diff options
author | Thomas Haller <thaller@redhat.com> | 2020-12-06 16:17:46 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-12-06 16:17:48 +0100 |
commit | 507c7c2b8abc12ad0729b2c1c7489207f56c6f9a (patch) | |
tree | b7ee6dbcff8c7d507038d1ee82ad99e3bc4e7d31 | |
parent | 6f32c5c10736d194322c760b108ce7d5de44d4a0 (diff) | |
parent | ae5ea7fa62201dc0809842c091edcc688702d1f5 (diff) |
release: bump version to 1.29.5 (development)1.29.5-dev
313 files changed, 20740 insertions, 10020 deletions
diff --git a/.clang-format b/.clang-format index 714ce0ea4d..13c9899c60 100644 --- a/.clang-format +++ b/.clang-format @@ -66,9 +66,12 @@ SpacesInContainerLiterals: false SpacesInParentheses: false ForEachMacros: ['c_list_for_each', + 'c_list_for_each_prev', + 'c_list_for_each_prev_safe', 'c_list_for_each_continue', 'c_list_for_each_entry', 'c_list_for_each_entry_continue', + 'c_list_for_each_entry_prev', 'c_list_for_each_entry_safe', 'c_list_for_each_entry_safe_continue', 'c_list_for_each_entry_safe_unlink', @@ -85,24 +88,34 @@ ForEachMacros: ['c_list_for_each', 'c_rbtree_for_each_safe', 'c_rbtree_for_each_safe_postorder', 'c_rbtree_for_each_safe_postorder_unlink', + 'json_array_foreach', + 'json_object_foreach', 'json_object_foreach_safe', 'ndp_msg_opt_dnssl_for_each_domain', 'ndp_msg_opt_for_each_offset', 'ndp_msg_opt_rdnss_for_each_addr', 'nla_for_each_attr', 'nla_for_each_nested', - 'nm_c_list_for_each_entry_prev', 'nm_dedup_multi_iter_for_each', 'nm_ip_config_iter_ip4_address_for_each', 'nm_ip_config_iter_ip4_route_for_each', 'nm_ip_config_iter_ip6_address_for_each', 'nm_ip_config_iter_ip6_route_for_each', + 'nm_ip_config_iter_ip_address_for_each', + 'nm_ip_config_iter_ip_route_for_each', 'nm_json_array_foreach', 'nm_json_object_foreach', + 'nm_l3_config_data_iter_ip4_address_for_each', + 'nm_l3_config_data_iter_ip4_route_for_each', + 'nm_l3_config_data_iter_ip6_address_for_each', + 'nm_l3_config_data_iter_ip6_route_for_each', + 'nm_l3_config_data_iter_obj_for_each', 'nm_manager_for_each_active_connection', + 'nm_manager_for_each_active_connection_prev', 'nm_manager_for_each_active_connection_safe', 'nm_manager_for_each_device', 'nm_manager_for_each_device_safe', + 'nm_platform_iter_obj_for_each', 'nmp_cache_iter_for_each', 'nmp_cache_iter_for_each_link', ] diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000..52f236506d --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,7 @@ +# The commits that did automated reformatting. You can ignore them +# during git-blame with `--ignore-rev` or `--ignore-revs-file`. +# +# $ git config --add 'blame.ignoreRevsFile' '.git-blame-ignore-revs' +# +328fb90f3e0d4e35975aff63944ac0412d7893a5 +740b092fda3d5f45102422f22884c88ea6c42858 diff --git a/.gitignore b/.gitignore index db9a2e86a2..b21bbf5c09 100644 --- a/.gitignore +++ b/.gitignore @@ -95,6 +95,7 @@ test-*.trs /docs/api/NetworkManager-*.txt /docs/api/NetworkManager-decl-list.txt.bak /docs/api/NetworkManager-decl.txt.bak +/docs/api/NetworkManager.actions /docs/api/NetworkManager.args /docs/api/NetworkManager.hierarchy /docs/api/NetworkManager.interfaces diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e4708e3ca0..68463b8def 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,221 +1,852 @@ -# Quick syntax check: -# python -c 'import sys, yaml; yaml.dump (yaml.load (sys.stdin), sys.stdout)' <.gitlab-ci.yml - -# If things don't seem to work, this can help: -# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/ci/lint +# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml: + +######################################## +# # +# THIS FILE IS GENERATED, DO NOT EDIT # +# # +######################################## + + +.templates_sha: &template_sha 766e3d77c647e404b349e398427e8965a1769b64 # see https://docs.gitlab.com/ee/ci/yaml/#includefile + +include: + # Centos container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/centos.yml' + # Debian container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/debian.yml' + # Fedora container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/fedora.yml' + # Ubuntu container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/ubuntu.yml' stages: + - prep - test - deploy - triage + - container_clean + +variables: + FDO_UPSTREAM_REPO: NetworkManager/NetworkManager + GIT_DEPTH: 1 + # these tags should be updated each time the list of packages is updated + # changing these will force rebuilding the associated image + # Note: these tags have no meaning and are not tied to a particular NM version + FEDORA_TAG: '2020-11-17.0-5276eb5b0e3c' + UBUNTU_TAG: '2020-11-17.0-89dd88de8047' + DEBIAN_TAG: '2020-11-17.0-89dd88de8047' + CENTOS_TAG: '2020-11-17.0-5276eb5b0e3c' + + FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh' + UBUNTU_EXEC: 'bash .gitlab-ci/debian-install.sh' + DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh' + CENTOS_EXEC: 'bash .gitlab-ci/fedora-install.sh' + +.nm_artifacts: + variables: + NM_BUILD_TARBALL: 1 + artifacts: + expire_in: 2 days + paths: + - docs-html + - NetworkManager-1*.tar.xz + - NetworkManager-1*.src.rpm -.fedora_install: &fedora_install - before_script: - - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<7\>' /etc/os-release ) || yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<7\>' /etc/os-release ) || yum install -y glibc-common - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<7\>' /etc/os-release ) || localedef -c -i pl_PL -f UTF-8 pl_PL.UTF-8 && locale -a - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<7\>' /etc/os-release ) || yum install -y python36-dbus python36-gobject-base +.nm_artifacts_undo: + variables: + NM_BUILD_TARBALL: 0 + artifacts: + paths: [] - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<8\>' /etc/os-release ) || dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<8\>' /etc/os-release ) || dnf install -y 'dnf-command(config-manager)' - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<8\>' /etc/os-release ) || dnf config-manager --set-enabled PowerTools - - date '+%Y%m%d-%H%M%S'; ! ( grep -q '^NAME=.*\(CentOS\)' /etc/os-release && grep -q '^VERSION_ID=.*\<8\>' /etc/os-release ) || curl https://copr.fedorainfracloud.org/coprs/nmstate/nm-build-deps/repo/epel-8/nmstate-nm-build-deps-epel-8.repo > /etc/yum.repos.d/nmstate-nm-build-deps-epel-8.repo +################################################################# +# # +# containers stage # +# # +################################################################# - - date '+%Y%m%d-%H%M%S'; NM_NO_EXTRA=1 NM_INSTALL="yum install -y" ./contrib/fedora/REQUIRED_PACKAGES - - date '+%Y%m%d-%H%M%S'; yum install -y glibc-langpack-pl ccache clang which +# Build a container for each distribution + version. The ci-templates +# will re-use the containers if the tag doesn't change. - # containers have "tsflags=nodocs" in /etc/dnf/dnf.conf. We need /usr/shared/gtk-doc/html - # to generate proper documentation. - - date '+%Y%m%d-%H%M%S'; yum reinstall -y --setopt='tsflags=' glib2-doc +fedora:28@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '28' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:29@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '29' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:30@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '30' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:31@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '31' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:32@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '32' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:33@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '33' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +fedora:rawhide@container-prep: + extends: + - .fdo.container-build@fedora + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: 'rawhide' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC + +ubuntu:16.04@container-prep: + extends: + - .fdo.container-build@ubuntu + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '16.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC + +ubuntu:18.04@container-prep: + extends: + - .fdo.container-build@ubuntu + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '18.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC + +ubuntu:20.04@container-prep: + extends: + - .fdo.container-build@ubuntu + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '20.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC + +ubuntu:devel@container-prep: + extends: + - .fdo.container-build@ubuntu + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: 'devel' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC + +ubuntu:rolling@container-prep: + extends: + - .fdo.container-build@ubuntu + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: 'rolling' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + FDO_DISTRIBUTION_EXEC: $UBUNTU_EXEC + +debian:9@container-prep: + extends: + - .fdo.container-build@debian + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '9' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC + +debian:10@container-prep: + extends: + - .fdo.container-build@debian + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '10' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC + +debian:testing@container-prep: + extends: + - .fdo.container-build@debian + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: 'testing' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC + +debian:sid@container-prep: + extends: + - .fdo.container-build@debian + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: 'sid' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + FDO_DISTRIBUTION_EXEC: $DEBIAN_EXEC + +centos:7.5.1804@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '7.5.1804' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:7.6.1810@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '7.6.1810' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:7.7.1908@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '7.7.1908' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:7.8.2003@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '7.8.2003' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:7.9.2009@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '7.9.2009' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:8.1.1911@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '8.1.1911' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +centos:8.2.2004@container-prep: + extends: + - .fdo.container-build@centos + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '8.2.2004' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + FDO_DISTRIBUTION_EXEC: $CENTOS_EXEC + +################################################################# +# # +# container clean stage # +# run during the clean stage # +# # +################################################################# + +# +# This stage will look for the container images we currently have in +# the registry and will remove any that are not tagged with the provided +# $container_image:$tag +# +# This job only runs for a scheduled pipeline. +# +# Go to your Profile, Settings, Access Tokens +# Create a personal token with 'api' scope, copy the value. +# Go to CI/CD, Schedules, schedule a monthly job. +# Define a variable of type File named AUTHFILE. Content is that token +# value. +.container-clean: + stage: container_clean + image: golang:alpine + before_script: + - apk add python3 py-pip git + - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates + script: + - ci-fairy -v --authfile $AUTHFILE delete-image + --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION + --exclude-tag $FDO_DISTRIBUTION_TAG + dependencies: [] + allow_failure: true + only: + - schedules - - date '+%Y%m%d-%H%M%S'; ! which dnf || dnf install -y python3-dnf-plugins-core - - date '+%Y%m%d-%H%M%S'; ! which dnf || dnf debuginfo-install -y glib2 - - date '+%Y%m%d-%H%M%S'; which dnf || debuginfo-install -y glib2 +fedora:28@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '28' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:29@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '29' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:30@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '30' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:31@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '31' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:32@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '32' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:33@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '33' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +fedora:rawhide@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: 'rawhide' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + +ubuntu:16.04@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '16.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + +ubuntu:18.04@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '18.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + +ubuntu:20.04@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '20.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + +ubuntu:devel@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: 'devel' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + +ubuntu:rolling@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: 'rolling' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + +debian:9@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '9' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + +debian:10@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '10' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + +debian:testing@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: 'testing' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + +debian:sid@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/debian/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: 'sid' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + +centos:7.5.1804@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '7.5.1804' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:7.6.1810@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '7.6.1810' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:7.7.1908@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '7.7.1908' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:7.8.2003@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '7.8.2003' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:7.9.2009@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '7.9.2009' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:8.1.1911@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '8.1.1911' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + +centos:8.2.2004@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/centos/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '8.2.2004' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG - - date '+%Y%m%d-%H%M%S'; contrib/scripts/nm-ci-patch-gtkdoc.sh || true - - date '+%Y%m%d-%H%M%S'; test -x /usr/bin/ninja || ! test -x /usr/bin/ninja-build || ln -s /usr/bin/ninja-build /usr/bin/ninja +################################################################# +# # +# build stage # +# # +################################################################# -.debian_install: &debian_install - before_script: - - date '+%Y%m%d-%H%M%S'; DEBIAN_FRONTEND=noninteractive apt-get update - - date '+%Y%m%d-%H%M%S'; DEBIAN_FRONTEND=noninteractive NM_INSTALL="apt-get -qq install -y" ./contrib/debian/REQUIRED_PACKAGES - - date '+%Y%m%d-%H%M%S'; dbus-uuidgen --ensure - - date '+%Y%m%d-%H%M%S'; sed -i 's/^# \(pl_PL.UTF-8 .*\)$/\1/p' /etc/locale.gen ; true - - date '+%Y%m%d-%H%M%S'; locale-gen pl_PL.UTF-8 - - date '+%Y%m%d-%H%M%S'; grep -q "VERSION=.16.04.[0-9]\+ LTS" /etc/os-release && pip3 install meson==0.53.2 - - date '+%Y%m%d-%H%M%S'; grep -q "VERSION=.16.04.[0-9]\+ LTS" /etc/os-release || pip3 install meson - - date '+%Y%m%d-%H%M%S'; contrib/scripts/nm-ci-install-valgrind-in-ubuntu1604.sh - - # iproute2 5.2.0 on debian:sid causes our unit tests to fail. - # Downgrade to a working version. See https://www.spinics.net/lists/netdev/msg584916.html - - date '+%Y%m%d-%H%M%S'; ! ( dpkg -s iproute2 | grep -q '^Version[:] 5.2.0-1\(ubuntu1\)\?$' ) || (curl 'http://ftp.debian.org/debian/pool/main/i/iproute2/iproute2_4.20.0-2_amd64.deb' --output /tmp/iproute2_4.20.0-2_amd64.deb && dpkg -i /tmp/iproute2_4.20.0-2_amd64.deb) - -.do_build: &do_build +.build@template: stage: test script: - - date '+%Y%m%d-%H%M%S'; uname -a - - date '+%Y%m%d-%H%M%S'; locale -a - - date '+%Y%m%d-%H%M%S'; env - - date '+%Y%m%d-%H%M%S'; meson --version - - date '+%Y%m%d-%H%M%S'; ! which dpkg || dpkg -l - - date '+%Y%m%d-%H%M%S'; ! which yum || yum list installed - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; BUILD_TYPE=autotools CC=gcc WITH_DOCS=1 WITH_VALGRIND=1 contrib/scripts/nm-ci-run.sh - - date '+%Y%m%d-%H%M%S'; rm -rf /tmp/nm-docs-html; mv build/INST/share/gtk-doc/html /tmp/nm-docs-html - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; BUILD_TYPE=meson CC=gcc WITH_DOCS=1 WITH_VALGRIND=1 contrib/scripts/nm-ci-run.sh - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; BUILD_TYPE=autotools CC=clang WITH_DOCS=0 contrib/scripts/nm-ci-run.sh - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; BUILD_TYPE=meson CC=clang WITH_DOCS=0 contrib/scripts/nm-ci-run.sh - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; ! grep -q '^NAME=.*\(Fedora\|CentOS\)' /etc/os-release || ./contrib/fedora/rpm/build_clean.sh -g -w crypto_gnutls -w debug -w iwd -w test -W meson - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; ! grep -q '^NAME=.*\(Fedora\)' /etc/os-release || ./contrib/fedora/rpm/build_clean.sh -g -w crypto_gnutls -w debug -w iwd -w test -w meson - - date '+%Y%m%d-%H%M%S'; git clean -fdx ; test "$NM_BUILD_TARBALL" != 1 || ( SIGN_SOURCE=0 ./contrib/fedora/rpm/build_clean.sh -r && mv ./NetworkManager-1*.tar.xz /tmp/ && mv ./contrib/fedora/rpm/latest/SRPMS/NetworkManager-1*.src.rpm /tmp/ ) - - date '+%Y%m%d-%H%M%S'; git clean -fdx - - date '+%Y%m%d-%H%M%S'; mv /tmp/nm-docs-html ./docs-html - - date '+%Y%m%d-%H%M%S'; test "$NM_BUILD_TARBALL" != 1 || mv /tmp/NetworkManager-1*.tar.xz /tmp/NetworkManager-1*.src.rpm ./ - -checkpatch: - image: fedora:33 - stage: test - script: - - date '+%Y%m%d-%H%M%S'; dnf install -y git black gettext /usr/bin/xargs which clang - - date '+%Y%m%d-%H%M%S'; NM_CHECKPATCH_FETCH_UPSTREAM=1 contrib/scripts/checkpatch-feature-branch.sh - - date '+%Y%m%d-%H%M%S'; black --check . examples/python/gi/nm-wg-set - - date '+%Y%m%d-%H%M%S'; git ls-files -z -- 'po/*.po' | xargs -0 -n1 msgfmt -vc - - date '+%Y%m%d-%H%M%S'; contrib/scripts/nm-code-format.sh - allow_failure: true + - .gitlab-ci/build.sh + dependencies: [] + +################################################################# +# # +# test stage # +# # +################################################################# + t_fedora:28: - <<: *fedora_install - image: fedora:28 - <<: *do_build + extends: + - .build@template + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: '28' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:28@container-prep" when: manual t_fedora:29: - <<: *fedora_install - image: fedora:29 - <<: *do_build + extends: + - .build@template + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: '29' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:29@container-prep" when: manual t_fedora:30: - <<: *fedora_install - image: fedora:30 - <<: *do_build + extends: + - .build@template + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: '30' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:30@container-prep" when: manual t_fedora:31: - <<: *fedora_install - image: fedora:31 - <<: *do_build + extends: + - .build@template + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: '31' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:31@container-prep" when: manual t_fedora:32: - <<: *fedora_install - image: fedora:32 - <<: *do_build + extends: + - .build@template + - .fdo.distribution-image@fedora variables: - NM_BUILD_TARBALL: 1 - artifacts: - expire_in: 2 days - paths: - - docs-html - - NetworkManager-1*.tar.xz - - NetworkManager-1*.src.rpm + FDO_DISTRIBUTION_VERSION: '32' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:32@container-prep" + when: manual t_fedora:33: - <<: *fedora_install - image: fedora:33 - <<: *do_build - when: manual + extends: + - .build@template + - .fdo.distribution-image@fedora + - .nm_artifacts + variables: + FDO_DISTRIBUTION_VERSION: '33' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:33@container-prep" t_fedora:rawhide: - <<: *fedora_install - image: fedora:rawhide - <<: *do_build - allow_failure: true + extends: + - .build@template + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: 'rawhide' + FDO_DISTRIBUTION_TAG: $FEDORA_TAG + needs: + - "fedora:rawhide@container-prep" when: manual -t_centos:7.5.1804: - <<: *fedora_install - image: centos:7.5.1804 - <<: *do_build +t_ubuntu:16.04: + extends: + - .build@template + - .fdo.distribution-image@ubuntu + variables: + FDO_DISTRIBUTION_VERSION: '16.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + needs: + - "ubuntu:16.04@container-prep" when: manual -t_centos:7.6.1810: - <<: *fedora_install - image: centos:7.6.1810 - <<: *do_build +t_ubuntu:18.04: + extends: + - .build@template + - .fdo.distribution-image@ubuntu + variables: + FDO_DISTRIBUTION_VERSION: '18.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + needs: + - "ubuntu:18.04@container-prep" when: manual -t_centos:7.7.1908: - <<: *fedora_install - image: centos:7.7.1908 - <<: *do_build +t_ubuntu:20.04: + extends: + - .build@template + - .fdo.distribution-image@ubuntu + variables: + FDO_DISTRIBUTION_VERSION: '20.04' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + needs: + - "ubuntu:20.04@container-prep" when: manual -t_centos:7.8.2003: - <<: *fedora_install - image: centos:7.8.2003 - <<: *do_build +t_ubuntu:devel: + extends: + - .build@template + - .fdo.distribution-image@ubuntu + variables: + FDO_DISTRIBUTION_VERSION: 'devel' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + needs: + - "ubuntu:devel@container-prep" when: manual -t_centos:8.1.1911: - <<: *fedora_install - image: centos:8.1.1911 - <<: *do_build +t_ubuntu:rolling: + extends: + - .build@template + - .fdo.distribution-image@ubuntu + variables: + FDO_DISTRIBUTION_VERSION: 'rolling' + FDO_DISTRIBUTION_TAG: $UBUNTU_TAG + needs: + - "ubuntu:rolling@container-prep" when: manual -t_ubuntu:16.04: - <<: *debian_install - image: ubuntu:16.04 - <<: *do_build +t_debian:9: + extends: + - .build@template + - .fdo.distribution-image@debian + variables: + FDO_DISTRIBUTION_VERSION: '9' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + needs: + - "debian:9@container-prep" when: manual -t_ubuntu:18.04: - <<: *debian_install - image: ubuntu:18.04 - <<: *do_build +t_debian:10: + extends: + - .build@template + - .fdo.distribution-image@debian + variables: + FDO_DISTRIBUTION_VERSION: '10' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + needs: + - "debian:10@container-prep" when: manual -t_ubuntu:rolling: - <<: *debian_install - image: ubuntu:rolling - <<: *do_build +t_debian:testing: + extends: + - .build@template + - .fdo.distribution-image@debian + variables: + FDO_DISTRIBUTION_VERSION: 'testing' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + needs: + - "debian:testing@container-prep" when: manual -t_ubuntu:devel: - <<: *debian_install - image: ubuntu:devel - <<: *do_build +t_debian:sid: + extends: + - .build@template + - .fdo.distribution-image@debian + variables: + FDO_DISTRIBUTION_VERSION: 'sid' + FDO_DISTRIBUTION_TAG: $DEBIAN_TAG + needs: + - "debian:sid@container-prep" when: manual -t_debian:9: - <<: *debian_install - image: debian:stretch - <<: *do_build +t_centos:7.5.1804: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '7.5.1804' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:7.5.1804@container-prep" when: manual -t_debian:10: - <<: *debian_install - image: debian:stretch - <<: *do_build +t_centos:7.6.1810: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '7.6.1810' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:7.6.1810@container-prep" when: manual -t_debian:testing: - <<: *debian_install - image: debian:testing - <<: *do_build +t_centos:7.7.1908: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '7.7.1908' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:7.7.1908@container-prep" when: manual -t_debian:sid: - <<: *debian_install - image: debian:sid - <<: *do_build +t_centos:7.8.2003: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '7.8.2003' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:7.8.2003@container-prep" + when: manual + +t_centos:7.9.2009: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '7.9.2009' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:7.9.2009@container-prep" + when: manual + +t_centos:8.1.1911: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '8.1.1911' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:8.1.1911@container-prep" when: manual +t_centos:8.2.2004: + extends: + - .build@template + - .fdo.distribution-image@centos + variables: + FDO_DISTRIBUTION_VERSION: '8.2.2004' + FDO_DISTRIBUTION_TAG: $CENTOS_TAG + needs: + - "centos:8.2.2004@container-prep" + when: manual + +################################################################# +# # +# specific jobs # +# # +################################################################# + +check-patch: + extends: + - t_fedora:33 + - .nm_artifacts_undo + stage: test + script: + - date '+%Y%m%d-%H%M%S'; NM_CHECKPATCH_FETCH_UPSTREAM=1 contrib/scripts/checkpatch-feature-branch.sh + allow_failure: true + +check-tree: + extends: + - t_fedora:33 + - .nm_artifacts_undo + stage: test + script: + - date '+%Y%m%d-%H%M%S'; black --check . examples/python/gi/nm-wg-set + - date '+%Y%m%d-%H%M%S'; git ls-files -z -- 'po/*.po' | xargs -0 -n1 msgfmt -vc + - date '+%Y%m%d-%H%M%S'; contrib/scripts/nm-code-format.sh + - date '+%Y%m%d-%H%M%S'; ci-fairy generate-template && git diff --exit-code + pages: stage: deploy - dependencies: - - t_fedora:32 script: - mv docs-html public artifacts: @@ -224,6 +855,10 @@ pages: - public only: - master + dependencies: + - t_fedora:33 + needs: + - t_fedora:33 triage:issues: stage: triage @@ -232,4 +867,4 @@ triage:issues: - gem install gitlab-triage - gitlab-triage -d --token $API_TOKEN --source-id $SOURCE_ID only: - - schedules + - schedules
\ No newline at end of file diff --git a/.gitlab-ci/build.sh b/.gitlab-ci/build.sh new file mode 100755 index 0000000000..b3f6863582 --- /dev/null +++ b/.gitlab-ci/build.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +set -ex + +IS_FEDORA=0 +IS_CENTOS=0 +grep -q '^NAME=.*\(CentOS\)' /etc/os-release && IS_CENTOS=1 +grep -q '^NAME=.*\(Fedora\)' /etc/os-release && IS_FEDORA=1 + +do_clean() { + git clean -fdx +} + +uname -a +locale -a +env +meson --version + +! which dpkg || dpkg -l +! which yum || yum list installed + +# The formatting depends on the version of python black. +# We have a dedicated test that checks our formatting, which +# uses the right version. We should disable the check during +# `make check`. +export NMTST_SKIP_PYTHON_BLACK=1 + +do_clean; BUILD_TYPE=autotools CC=gcc WITH_DOCS=1 WITH_VALGRIND=1 contrib/scripts/nm-ci-run.sh +rm -rf /tmp/nm-docs-html; +mv build/INST/share/gtk-doc/html /tmp/nm-docs-html +do_clean; BUILD_TYPE=meson CC=gcc WITH_DOCS=1 WITH_VALGRIND=1 contrib/scripts/nm-ci-run.sh +do_clean; BUILD_TYPE=autotools CC=clang WITH_DOCS=0 contrib/scripts/nm-ci-run.sh +do_clean; BUILD_TYPE=meson CC=clang WITH_DOCS=0 contrib/scripts/nm-ci-run.sh + +do_clean; test $IS_FEDORA = 1 -o $IS_CENTOS = 1 && ./contrib/fedora/rpm/build_clean.sh -g -w crypto_gnutls -w debug -w iwd -w test -W meson +do_clean; test $IS_FEDORA = 1 && ./contrib/fedora/rpm/build_clean.sh -g -w crypto_gnutls -w debug -w iwd -w test -w meson + +do_clean +if [ "$NM_BUILD_TARBALL" = 1 ]; then + SIGN_SOURCE=0 ./contrib/fedora/rpm/build_clean.sh -r + mv ./NetworkManager-1*.tar.xz /tmp/ + mv ./contrib/fedora/rpm/latest/SRPMS/NetworkManager-1*.src.rpm /tmp/ + do_clean + mv /tmp/nm-docs-html ./docs-html + mv /tmp/NetworkManager-1*.tar.xz /tmp/NetworkManager-1*.src.rpm ./ +fi + +echo "BUILD SUCCESSFUL!!" diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template new file mode 100644 index 0000000000..aa5ed4327b --- /dev/null +++ b/.gitlab-ci/ci.template @@ -0,0 +1,229 @@ +# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml: + +{# You're looking at the template here, so you can ignore the below + warning. This is the right file to edit #} +######################################## +# # +# THIS FILE IS GENERATED, DO NOT EDIT # +# # +######################################## + + +.templates_sha: &template_sha 766e3d77c647e404b349e398427e8965a1769b64 # see https://docs.gitlab.com/ee/ci/yaml/#includefile + +include: +{% for distro in distributions|sort(attribute="name") %} + # {{ distro.name.capitalize() }} container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/{{distro.name}}.yml' +{% endfor %} + +stages: + - prep + - test + - deploy + - triage + - container_clean + +variables: + FDO_UPSTREAM_REPO: NetworkManager/NetworkManager + GIT_DEPTH: 1 + # these tags should be updated each time the list of packages is updated + # changing these will force rebuilding the associated image + # Note: these tags have no meaning and are not tied to a particular NM version +{% for distro in distributions %} + {{"%-13s"| format(distro.name.upper() + '_TAG:')}}'{{distro.tag}}-{{ + (ci_fairy.hashfiles('./.gitlab-ci/config.yml', + './.gitlab-ci/ci.template', + './.gitlab-ci/' + distro.base_type + '-install.sh', + './contrib/' + distro.base_type + '/REQUIRED_PACKAGES'))[0:12] + }}' +{% endfor %} + +{% for distro in distributions %} + {{"%-13s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.base_type}}-install.sh' +{% endfor %} + +.nm_artifacts: + variables: + NM_BUILD_TARBALL: 1 + artifacts: + expire_in: 2 days + paths: + - docs-html + - NetworkManager-1*.tar.xz + - NetworkManager-1*.src.rpm + +.nm_artifacts_undo: + variables: + NM_BUILD_TARBALL: 0 + artifacts: + paths: [] + +################################################################# +# # +# containers stage # +# # +################################################################# + +# Build a container for each distribution + version. The ci-templates +# will re-use the containers if the tag doesn't change. +{% for distro in distributions %} +{% for version in distro.versions %} + +{{distro.name}}:{{version}}@container-prep: + extends: + - .fdo.container-build@{{distro.name}} + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '{{version}}' + FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG + FDO_DISTRIBUTION_EXEC: ${{distro.name.upper()}}_EXEC +{% endfor %} +{% endfor %} + +################################################################# +# # +# container clean stage # +# run during the clean stage # +# # +################################################################# + +# +# This stage will look for the container images we currently have in +# the registry and will remove any that are not tagged with the provided +# $container_image:$tag +# +# This job only runs for a scheduled pipeline. +# +# Go to your Profile, Settings, Access Tokens +# Create a personal token with 'api' scope, copy the value. +# Go to CI/CD, Schedules, schedule a monthly job. +# Define a variable of type File named AUTHFILE. Content is that token +# value. +.container-clean: + stage: container_clean + image: golang:alpine + before_script: + - apk add python3 py-pip git + - pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates + script: + - ci-fairy -v --authfile $AUTHFILE delete-image + --repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION + --exclude-tag $FDO_DISTRIBUTION_TAG + dependencies: [] + allow_failure: true + only: + - schedules + +{% for distro in distributions %} +{% for version in distro.versions %} +{{distro.name}}:{{version}}@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/{{distro.name}}/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '{{version}}' + FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG + +{% endfor %} +{% endfor %} + +################################################################# +# # +# build stage # +# # +################################################################# + +.build@template: + stage: test + script: + - .gitlab-ci/build.sh + dependencies: [] + +################################################################# +# # +# test stage # +# # +################################################################# + +{% for distro in distributions %} +{% for version in distro.versions %} + +t_{{distro.name}}:{{version}}: + extends: + - .build@template + - .fdo.distribution-image@{{distro.name}} +{% if distro.name == pages_build.name and + version == pages_build.version %} + - .nm_artifacts +{% endif %} + variables: + FDO_DISTRIBUTION_VERSION: '{{version}}' + FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG + {# Where we have extra_variables defined, add them to the list #} + {% if distro.build is defined and distro.build.extra_variables is defined %} + {% for var in distro.build.extra_variables %} + {{var}} + {% endfor %} + {% endif %} + needs: + - "{{distro.name}}:{{version}}@container-prep" +{% if not version in distro.always %} + when: manual +{% endif %} +{% endfor %} +{% endfor %} + +################################################################# +# # +# specific jobs # +# # +################################################################# + +check-patch: + extends: + - t_{{pages_build.name}}:{{pages_build.version}} + - .nm_artifacts_undo + stage: test + script: + - date '+%Y%m%d-%H%M%S'; NM_CHECKPATCH_FETCH_UPSTREAM=1 contrib/scripts/checkpatch-feature-branch.sh + allow_failure: true + +check-tree: + extends: + - t_{{pages_build.name}}:{{pages_build.version}} + - .nm_artifacts_undo + stage: test + script: + - date '+%Y%m%d-%H%M%S'; black --check . examples/python/gi/nm-wg-set + - date '+%Y%m%d-%H%M%S'; git ls-files -z -- 'po/*.po' | xargs -0 -n1 msgfmt -vc + - date '+%Y%m%d-%H%M%S'; contrib/scripts/nm-code-format.sh + - date '+%Y%m%d-%H%M%S'; ci-fairy generate-template && git diff --exit-code + +pages: + stage: deploy + script: + - mv docs-html public + artifacts: + expire_in: 20 days + paths: + - public + only: + - master + dependencies: + - t_{{pages_build.name}}:{{pages_build.version}} + needs: + - t_{{pages_build.name}}:{{pages_build.version}} + +triage:issues: + stage: triage + image: ruby:2.7 + script: + - gem install gitlab-triage + - gitlab-triage -d --token $API_TOKEN --source-id $SOURCE_ID + only: + - schedules diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml new file mode 100644 index 0000000000..201828379c --- /dev/null +++ b/.gitlab-ci/config.yml @@ -0,0 +1,62 @@ +# This file contains the configuration for the gitlab ci. +# +# To recreate the .gitlab-ci.yml file, run +# ci-fairy generate-template +# +# The ci-fairy tool is part of +# https://gitlab.freedesktop.org/freedesktop/ci-templates +# + +# We're happy to rebuild all containers when one changes. +.default_tag: &default_tag '2020-11-17.0' + + +# The list of all distributions we want to create job for. +# The template generates manual jobs for all these. +distributions: + - name: fedora + tag: *default_tag + base_type: fedora + versions: + - '28' + - '29' + - '30' + - '31' + - '32' + - '33' + - 'rawhide' + always: + - '33' + - name: ubuntu + tag: *default_tag + base_type: debian + versions: + - '16.04' + - '18.04' + - '20.04' + - 'devel' + - 'rolling' + - name: debian + tag: *default_tag + base_type: debian + versions: + - '9' + - '10' + - 'testing' + - 'sid' + - name: centos + tag: *default_tag + base_type: fedora + versions: + - '7.5.1804' + - '7.6.1810' + - '7.7.1908' + - '7.8.2003' + - '7.9.2009' + - '8.1.1911' + - '8.2.2004' + +# specifies which of the above distros is used as source for pages +pages_build: + name: fedora + version: '33' diff --git a/.gitlab-ci/debian-install.sh b/.gitlab-ci/debian-install.sh new file mode 100755 index 0000000000..575b127e0c --- /dev/null +++ b/.gitlab-ci/debian-install.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -ex + +IS_UBUNTU_1604=0 +grep -q '^VERSION=.16.04.[0-9]\+ LTS' /etc/os-release && IS_UBUNTU_1604=1 + + +DEBIAN_FRONTEND=noninteractive apt-get update +DEBIAN_FRONTEND=noninteractive NM_INSTALL="apt-get -qq install -y" ./contrib/debian/REQUIRED_PACKAGES + +dbus-uuidgen --ensure + +sed -i 's/^# \(pl_PL.UTF-8 .*\)$/\1/p' /etc/locale.gen || true +locale-gen pl_PL.UTF-8 + +if [ $IS_UBUNTU_1604 = 1 ]; then + pip3 install meson==0.53.2 + contrib/scripts/nm-ci-install-valgrind-in-ubuntu1604.sh +else + pip3 install meson +fi + +# iproute2 5.2.0 on debian:sid causes our unit tests to fail. +# Downgrade to a working version. See https://www.spinics.net/lists/netdev/msg584916.html +if dpkg -s iproute2 | grep -q '^Version[:] 5.2.0-1\(ubuntu1\)\?$' ; then + curl 'http://ftp.debian.org/debian/pool/main/i/iproute2/iproute2_4.20.0-2_amd64.deb' --output /tmp/iproute2_4.20.0-2_amd64.deb + dpkg -i /tmp/iproute2_4.20.0-2_amd64.deb +fi diff --git a/.gitlab-ci/fedora-install.sh b/.gitlab-ci/fedora-install.sh new file mode 100755 index 0000000000..12f6f73b5f --- /dev/null +++ b/.gitlab-ci/fedora-install.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +set -ex + +IS_FEDORA=0 +IS_CENTOS=0 +IS_CENTOS_7=0 +grep -q '^NAME=.*\(CentOS\)' /etc/os-release && IS_CENTOS=1 +grep -q '^NAME=.*\(Fedora\)' /etc/os-release && IS_FEDORA=1 +if [ $IS_CENTOS = 1 ]; then + grep -q '^VERSION_ID=.*\<7\>' /etc/os-release && IS_CENTOS_7=1 +fi + +if [ $IS_CENTOS = 1 ]; then + if [ $IS_CENTOS_7 = 1 ]; then + yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + yum install -y glibc-common + localedef -c -i pl_PL -f UTF-8 pl_PL.UTF-8 + locale -a + yum install -y python36-dbus python36-gobject-base + else + dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm + dnf install -y 'dnf-command(config-manager)' + dnf config-manager --set-enabled PowerTools + curl https://copr.fedorainfracloud.org/coprs/nmstate/nm-build-deps/repo/epel-8/nmstate-nm-build-deps-epel-8.repo > /etc/yum.repos.d/nmstate-nm-build-deps-epel-8.repo + fi +fi + + +NM_NO_EXTRA=1 NM_INSTALL="yum install -y" ./contrib/fedora/REQUIRED_PACKAGES +yum install -y glibc-langpack-pl ccache clang which + +# containers have "tsflags=nodocs" in /etc/dnf/dnf.conf. We need /usr/shared/gtk-doc/html +# to generate proper documentation. +yum reinstall -y --setopt='tsflags=' glib2-doc + +if which dnf &>/dev/null; then + dnf install -y python3-dnf-plugins-core + dnf debuginfo-install -y glib2 +else + debuginfo-install -y glib2 +fi + +contrib/scripts/nm-ci-patch-gtkdoc.sh || true + +if [ -x /usr/bin/ninja ] && ! [ -x /usr/bin/ninja-build ]; then + ln -s /usr/bin/ninja-build /usr/bin/ninja +fi + +if [ $IS_FEDORA = 1 ]; then + TEMPLATE_SHA="$(sed -n 's/^.templates_sha: *\&template_sha *\([0-9a-f]\+\) .*/\1/p' ./.gitlab-ci/ci.template)" + test -n "$TEMPLATE_SHA" + dnf install -y python3-pip + pip3 install "git+http://gitlab.freedesktop.org/freedesktop/ci-templates@$TEMPLATE_SHA" +fi @@ -43,6 +43,7 @@ Matej UrbanÄiÄ <matej.urban@gmail.com> <mateju@svn.gnome.org> Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> <mathieu-tl@ubuntu.com> Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> <mathieu.tl@gmail.com> Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> <mathieu@canonical.com> +Matt Bernstein <matt@bernstein.org.uk> Maxim Dziumanenko <dziumanenko@gmail.com> <mvd@mylinux.com.ua> Maxim Dziumanenko <dziumanenko@gmail.com> <mvd@mylinux.ua> Michael Biebl <biebl@debian.org> <mbiebl@debian.org> diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 57e68af9a8..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,75 +0,0 @@ -language: c -dist: xenial -sudo: required -compiler: - - gcc - - clang - -addons: - apt: - packages: - - autoconf - - automake - - dbus - - dbus-x11 - - dnsmasq - - gobject-introspection - - gtk-doc-tools - - intltool - - iptables - - libcurl4-gnutls-dev - - libdbus-1-dev - - libgcrypt11-dev - - libgirepository1.0-dev - - libglib2.0-dev - - libglib2.0-doc - - libgnutls-dev - - libiw-dev - - libjansson-dev - - libjansson4 - - libmm-glib-dev - - libndp-dev - - libnewt-dev - - libnss3-dev - - libpolkit-gobject-1-dev - - libreadline-dev - - libteam-dev - - libtool - - libudev-dev - - make - - mobile-broadband-provider-info - - pkg-config - - ppp - - ppp-dev - - python-dbus - - python-gi - - python-software-properties - - python3-pip - - python3-setuptools - - uuid-dev - coverity_scan: - project: - name: NetworkManager/NetworkManager - build_command_prepend: sh autogen.sh --with-systemd-logind=no --enable-more-warnings=no --disable-ovs - build_command: make -j4 - branch_pattern: .*coverity.* - -before_install: - - sudo dbus-uuidgen --ensure - - | - if test "$BUILD_TYPE" == 'meson'; then - pip3 install ninja - pip3 install meson - fi - - sudo chmod o+x /usr/sbin/pppd - - sudo locale-gen pl_PL.UTF-8 - -script: - - CI=travis contrib/scripts/nm-ci-run.sh - -env: - matrix: - - BUILD_TYPE=autotools - - BUILD_TYPE=meson - global: - secure: K36MXkcsuDZ0msuEj5zHMmHfv6O725lsXuFdP6AJ3rYWKuLYE1+iNLgIRndNWDK9ckkNQFaCxDY4Z/NCfCYQTGAS9oXR5AwNqNbhOq8XrqdaZ2GX35sob8Tp4B3IsoREkN/UbIkXQKYlA5rUhgtSifUg3EwfeOiFvnLCwHcp0rYHnvT/jaq5vodBbA1jChjezcMHsp43kvPXHpybKRkipb9EzV/V3VtDLLWh9WQBvQNawpsHnT+MXSke1yU1zfNMyD9XiD7VDzCwaTs6LzjoFBLc86QS5U/9W72s0rFe6SbecntQHftknRzSrGiJDNe64wDZN/Wxq1MHxEOFCwDi6vcSwQ+RoTdhyshhfPVY2Mm5soj2w7Dx43Cz0dDZDCMhu5xxzFAFgkieJSfwXbuxga0ds58Ph8MgtDSp3fBRewZwI+vMuzl7a1hGkcqJojrm1lfgAKbNgrNUzQRwbVYAyrpa6/vCbd6ZH4PEtITwLaRf2mz8PG71xiMQguDDDXS8WF0U7Looe+G9ybAUwDS5hqHfeP+3q6bfN5Sg5Zs5QkBIN5LZbeWbPYldOEEDTvo3VI7e84bk7U5qEoUKc0w/tqVF1B5KgNUq6nIkCkmoBx8RFnmjpOHh99IfeRG9nQTRpCaEDvAM4fcRzITzId8dIIfAW/45P3ozzfz/HYiie+o= diff --git a/CONTRIBUTING b/CONTRIBUTING index c157614e07..8335cbfdf6 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -1,32 +1,51 @@ Guidelines for Contributing =========================== + Coding Standard --------------- -* The formatting uses clang-format with clang 11.0. Run - `./contrib/scripts/nm-code-format.sh -i` to reformat. +The formatting uses clang-format with clang 11.0. Run +`./contrib/scripts/nm-code-format.sh -i` to reformat the code +or call `clang-format` yourself. +You may also call `./contrib/scripts/nm-code-format-container.sh` +which runs a Fedora 33 container using podman. +You are welcome to not bother and open a merge request with +wrong formatting, but note that we then will automatically adjust +your contribution before merging. + +The automatic reformatting was done by commit 328fb90f3e0d4e35975aff63944ac0412d7893a5. +Use `--ignore-rev` option or `--ignore-revs-file .git-blame-ignore-revs` to ignore +the reformatting commit with git-blame: + +``` +$ git config --add 'blame.ignoreRevsFile' '.git-blame-ignore-revs' +``` + +Since our coding style is entirely automated, the following are just +some details of the style we use: * Indent with 4 spaces. (_no_ tabs). * Have no space between the function name and the opening '('. - GOOD: g_strdup(x) - BAD: g_strdup (x) + - GOOD: `g_strdup(x)` + - BAD: `g_strdup (x)` * C-style comments - GOOD: f(x); /* comment */ - BAD: f(x); // comment + - GOOD: `f(x); /* comment */` + - BAD: `f(x); // comment` * Keep assignments in the variable declaration area pretty short. - GOOD: MyObject *object; - BAD: MyObject *object = complex_and_long_init_function(arg1, arg2, arg3); + - GOOD: `MyObject *object;` + - BAD: `MyObject *object = complex_and_long_init_function(arg1, arg2, arg3);` * 80-cols is a guideline, don't make the code uncomfortable in order to fit in less than 80 cols. * Constants are CAPS_WITH_UNDERSCORES and use the preprocessor. - GOOD: #define MY_CONSTANT 42 - BAD: static const unsigned myConstant = 42; + - GOOD: `#define MY_CONSTANT 42` + - BAD: `static const unsigned myConstant = 42;` + Legal ----- @@ -40,6 +59,8 @@ Note that all new contributions to NetworkManager MUST be made under terms of LGPL-2.1+, that is also the case for parts that are currently licensed GPL-2.0+. The reason for that is that we might eventually relicense everything as LGPL and new contributions already must agree with that future change. +For more details see [RELICENSE.md](RELICENSE.md). + Assertions in NetworkManager code --------------------------------- @@ -125,15 +146,21 @@ The notes it are called "refs/notes/bugs". So configure: - $ git config --add 'remote.origin.fetch' 'refs/notes/bugs:refs/notes/bugs' - $ git config --add 'notes.displayref' 'refs/notes/bugs' +``` +$ git config --add 'remote.origin.fetch' 'refs/notes/bugs:refs/notes/bugs' +$ git config --add 'notes.displayref' 'refs/notes/bugs' +``` For example, set notes with - $ git notes --ref refs/notes/bugs add -m "(cherry picked from $COMMIT_SHA)" HEAD +``` +$ git notes --ref refs/notes/bugs add -m "(cherry picked from $COMMIT_SHA)" HEAD +``` You should see the notes in git-log output as well. To resync our local notes use: - $ git fetch origin refs/notes/bugs:refs/notes/bugs -f +``` +$ git fetch origin refs/notes/bugs:refs/notes/bugs -f +``` diff --git a/Makefile.am b/Makefile.am index 829f57513c..0ea43de987 100644 --- a/Makefile.am +++ b/Makefile.am @@ -928,6 +928,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-core-types.h \ libnm-core/nm-dbus-interface.h \ libnm-core/nm-errors.h \ + libnm-core/nm-keyfile.h \ libnm-core/nm-setting-6lowpan.h \ libnm-core/nm-setting-8021x.h \ libnm-core/nm-setting-adsl.h \ @@ -942,6 +943,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-setting-ethtool.h \ libnm-core/nm-setting-generic.h \ libnm-core/nm-setting-gsm.h \ + libnm-core/nm-setting-hostname.h \ libnm-core/nm-setting-infiniband.h \ libnm-core/nm-setting-ip-config.h \ libnm-core/nm-setting-ip-tunnel.h \ @@ -953,6 +955,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-setting-olpc-mesh.h \ libnm-core/nm-setting-ovs-bridge.h \ libnm-core/nm-setting-ovs-dpdk.h \ + libnm-core/nm-setting-ovs-external-ids.h \ libnm-core/nm-setting-ovs-interface.h \ libnm-core/nm-setting-ovs-patch.h \ libnm-core/nm-setting-ovs-port.h \ @@ -966,6 +969,7 @@ libnm_core_lib_h_pub_real = \ libnm-core/nm-setting-team.h \ libnm-core/nm-setting-tun.h \ libnm-core/nm-setting-user.h \ + libnm-core/nm-setting-veth.h \ libnm-core/nm-setting-vlan.h \ libnm-core/nm-setting-vpn.h \ libnm-core/nm-setting-vrf.h \ @@ -1015,6 +1019,7 @@ libnm_core_lib_c_settings_real = \ libnm-core/nm-setting-ethtool.c \ libnm-core/nm-setting-generic.c \ libnm-core/nm-setting-gsm.c \ + libnm-core/nm-setting-hostname.c \ libnm-core/nm-setting-infiniband.c \ libnm-core/nm-setting-ip-config.c \ libnm-core/nm-setting-ip-tunnel.c \ @@ -1026,6 +1031,7 @@ libnm_core_lib_c_settings_real = \ libnm-core/nm-setting-olpc-mesh.c \ libnm-core/nm-setting-ovs-bridge.c \ libnm-core/nm-setting-ovs-dpdk.c \ + libnm-core/nm-setting-ovs-external-ids.c \ libnm-core/nm-setting-ovs-interface.c \ libnm-core/nm-setting-ovs-patch.c \ libnm-core/nm-setting-ovs-port.c \ @@ -1039,6 +1045,7 @@ libnm_core_lib_c_settings_real = \ libnm-core/nm-setting-team.c \ libnm-core/nm-setting-tun.c \ libnm-core/nm-setting-user.c \ + libnm-core/nm-setting-veth.c \ libnm-core/nm-setting-vlan.c \ libnm-core/nm-setting-vpn.c \ libnm-core/nm-setting-vrf.c \ @@ -1358,6 +1365,7 @@ libnm_lib_h_pub_real = \ libnm/nm-device-ppp.h \ libnm/nm-device-team.h \ libnm/nm-device-tun.h \ + libnm/nm-device-veth.h \ libnm/nm-device-vlan.h \ libnm/nm-device-vrf.h \ libnm/nm-device-vxlan.h \ @@ -1422,6 +1430,7 @@ libnm_lib_c_real = \ libnm/nm-device-ppp.c \ libnm/nm-device-team.c \ libnm/nm-device-tun.c \ + libnm/nm-device-veth.c \ libnm/nm-device-vlan.c \ libnm/nm-device-vrf.c \ libnm/nm-device-vxlan.c \ @@ -1484,6 +1493,7 @@ nodist_libnm_liblibnm_la_SOURCES = \ libnm_liblibnm_la_LIBADD = \ libnm-core/nm-libnm-core-aux/libnm-libnm-core-aux.la \ + libnm-core/nm-keyfile/libnm-keyfile.la \ libnm-core/libnm-core.la \ $(libnm_crypto_lib) \ libnm-core/nm-libnm-core-intern/libnm-libnm-core-intern.la \ @@ -1577,6 +1587,7 @@ libnm_NM_1_0_gir_FILES = \ $(libnm_core_lib_c_real) \ $(libnm_lib_h_pub_mkenums) \ $(libnm_lib_h_pub_real) \ + libnm-core/nm-keyfile/nm-keyfile.c \ $(libnm_lib_c_mkenums) \ $(libnm_lib_c_real) libnm_NM_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm @@ -1599,8 +1610,20 @@ libnm_noinst_data = \ noinst_DATA += $(libnm_noinst_data) +EXTRA_DIST += clients/cli/generate-docs-nm-settings-nmcli.xml.in + +if BUILD_DOCS clients/cli/generate-docs-nm-settings-nmcli.xml: clients/cli/generate-docs-nm-settings-nmcli - $(AM_V_GEN) clients/cli/generate-docs-nm-settings-nmcli > $@ + $(AM_V_GEN) clients/cli/generate-docs-nm-settings-nmcli > "$@" +check-local-generate-docs-nm-settings-nmcli: clients/cli/generate-docs-nm-settings-nmcli.xml + $(srcdir)/tools/check-compare-generated.sh "$(srcdir)" "$(builddir)" "$<" +check_local += check-local-generate-docs-nm-settings-nmcli +DISTCLEANFILES += clients/cli/generate-docs-nm-settings-nmcli.xml +else +clients/cli/generate-docs-nm-settings-nmcli.xml: clients/cli/generate-docs-nm-settings-nmcli.xml.in + $(AM_V_GEN) cp $^ $@ +check-local-generate-docs-nm-settings-nmcli: +endif libnm_docs_sources = $(libnm_core_lib_c_settings_real) @@ -2128,6 +2151,8 @@ src_libNetworkManagerBase_la_SOURCES = \ src/nm-netns.h \ src/nm-l3-config-data.c \ src/nm-l3-config-data.h \ + src/nm-l3-ipv4ll.c \ + src/nm-l3-ipv4ll.h \ src/nm-l3cfg.c \ src/nm-l3cfg.h \ src/nm-ip-config.c \ @@ -4448,12 +4473,12 @@ $(clients_common_libnmc_base_la_OBJECTS): $(libnm_lib_h_pub_mkenums) $(clients_common_libnmc_base_la_OBJECTS): clients/common/.dirstamp clients_common_settings_doc_h = clients/common/settings-docs.h -if HAVE_INTROSPECTION +if BUILD_DOCS $(clients_common_settings_doc_h): clients/common/settings-docs.xsl libnm/nm-settings-docs-gir.xml clients/common/.dirstamp $(AM_V_GEN) $(XSLTPROC) --output $@ $< $(word 2,$^) DISTCLEANFILES += $(clients_common_settings_doc_h) check-local-settings-docs: $(clients_common_settings_doc_h) - $(srcdir)/tools/check-settings-docs.sh "$(srcdir)" "$(builddir)" "$(clients_common_settings_doc_h)" + $(srcdir)/tools/check-compare-generated.sh "$(srcdir)" "$(builddir)" "$(clients_common_settings_doc_h)" check_local += check-local-settings-docs else $(clients_common_settings_doc_h): $(clients_common_settings_doc_h).in clients/common/.dirstamp @@ -4992,6 +5017,11 @@ EXTRA_DIST += \ clients/tests/test-client.check-on-disk/test_004.expected \ $(NULL) +check-local-gitlab-ci: + "$(srcdir)/tools/check-gitlab-ci.sh" "$(srcdir)" + +check_local += check-local-gitlab-ci + ############################################################################### # data ############################################################################### @@ -5280,7 +5310,8 @@ EXTRA_DIST += \ tools/check-config-options.sh \ tools/check-docs.sh \ tools/check-exports.sh \ - tools/check-settings-docs.sh \ + tools/check-compare-generated.sh \ + tools/check-gitlab-ci.sh \ tools/create-exports-NetworkManager.sh \ tools/debug-helper.py \ tools/meson-post-install.sh \ diff --git a/Makefile.examples b/Makefile.examples index 385a8353ed..3cb46293bb 100644 --- a/Makefile.examples +++ b/Makefile.examples @@ -178,8 +178,10 @@ EXTRA_DIST += \ examples/python/gi/list-connections.py \ examples/python/gi/nm-add-connection2.py \ examples/python/gi/nm-connection-update-stable-id.py \ + examples/python/gi/nm-keyfile.py \ examples/python/gi/nm-update2.py \ examples/python/gi/nm-wg-set \ + examples/python/gi/ovs-external-ids.py \ examples/python/gi/setting-user-data.py \ examples/python/gi/show-wifi-networks.py \ examples/python/gi/update-ip4-method.py \ @@ -1,13 +1,23 @@ ============================================= -NetworkManager-1.28 -Overview of changes since NetworkManager-1.26 +NetworkManager-1.30 +Overview of changes since NetworkManager-1.28 ============================================= -This is a snapshot of NetworkManager 1.28 development series. +This is a snapshot of NetworkManager 1.30 development series. The API is subject to change and not guaranteed to be compatible with the later release. USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE! +* libnm: nm_setting_bond_add_option() no longer validates the + option that is set. Instead, use nm_connection_verify() to validate + the profile. +* Increase timeout of NetworkManager-wait-online.service to 60 seconds. + +============================================= +NetworkManager-1.28 +Overview of changes since NetworkManager-1.26 +============================================= + * Introduce a new "rc-manager=auto" setting and make it the default, unless a different default is chosen at compile time. This mode tries to detect "systemd-resolved", "resolvconf", and "netconfig" diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 3714485a16..5b8929b997 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -858,30 +858,31 @@ const NmcMetaGenericInfo /*****************************************************************************/ -#define NMC_FIELDS_SETTINGS_NAMES_ALL \ - NM_SETTING_CONNECTION_SETTING_NAME \ - "," NM_SETTING_MATCH_SETTING_NAME "," NM_SETTING_WIRED_SETTING_NAME \ - "," NM_SETTING_802_1X_SETTING_NAME "," NM_SETTING_WIRELESS_SETTING_NAME \ - "," NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "," NM_SETTING_IP4_CONFIG_SETTING_NAME \ - "," NM_SETTING_IP6_CONFIG_SETTING_NAME "," NM_SETTING_SERIAL_SETTING_NAME \ - "," NM_SETTING_WIFI_P2P_SETTING_NAME "," NM_SETTING_PPP_SETTING_NAME \ - "," NM_SETTING_PPPOE_SETTING_NAME "," NM_SETTING_ADSL_SETTING_NAME \ - "," NM_SETTING_GSM_SETTING_NAME "," NM_SETTING_CDMA_SETTING_NAME \ - "," NM_SETTING_BLUETOOTH_SETTING_NAME "," NM_SETTING_OLPC_MESH_SETTING_NAME \ - "," NM_SETTING_VPN_SETTING_NAME "," NM_SETTING_INFINIBAND_SETTING_NAME \ - "," NM_SETTING_BOND_SETTING_NAME "," NM_SETTING_VLAN_SETTING_NAME \ - "," NM_SETTING_BRIDGE_SETTING_NAME "," NM_SETTING_BRIDGE_PORT_SETTING_NAME \ - "," NM_SETTING_TEAM_SETTING_NAME "," NM_SETTING_TEAM_PORT_SETTING_NAME \ - "," NM_SETTING_OVS_BRIDGE_SETTING_NAME "," NM_SETTING_OVS_INTERFACE_SETTING_NAME \ - "," NM_SETTING_OVS_PATCH_SETTING_NAME "," NM_SETTING_OVS_PORT_SETTING_NAME \ - "," NM_SETTING_DCB_SETTING_NAME "," NM_SETTING_TUN_SETTING_NAME \ - "," NM_SETTING_IP_TUNNEL_SETTING_NAME "," NM_SETTING_MACSEC_SETTING_NAME \ - "," NM_SETTING_MACVLAN_SETTING_NAME "," NM_SETTING_VXLAN_SETTING_NAME \ - "," NM_SETTING_VRF_SETTING_NAME "," NM_SETTING_WPAN_SETTING_NAME \ - "," NM_SETTING_6LOWPAN_SETTING_NAME "," NM_SETTING_WIREGUARD_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_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */ +#define NMC_FIELDS_SETTINGS_NAMES_ALL \ + NM_SETTING_CONNECTION_SETTING_NAME \ + "," NM_SETTING_MATCH_SETTING_NAME "," NM_SETTING_WIRED_SETTING_NAME \ + "," NM_SETTING_VETH_SETTING_NAME "," NM_SETTING_802_1X_SETTING_NAME \ + "," NM_SETTING_WIRELESS_SETTING_NAME "," NM_SETTING_WIRELESS_SECURITY_SETTING_NAME \ + "," NM_SETTING_IP4_CONFIG_SETTING_NAME "," NM_SETTING_IP6_CONFIG_SETTING_NAME \ + "," NM_SETTING_SERIAL_SETTING_NAME "," NM_SETTING_WIFI_P2P_SETTING_NAME \ + "," NM_SETTING_PPP_SETTING_NAME "," NM_SETTING_PPPOE_SETTING_NAME \ + "," NM_SETTING_ADSL_SETTING_NAME "," NM_SETTING_GSM_SETTING_NAME \ + "," NM_SETTING_CDMA_SETTING_NAME "," NM_SETTING_BLUETOOTH_SETTING_NAME \ + "," NM_SETTING_OLPC_MESH_SETTING_NAME "," NM_SETTING_VPN_SETTING_NAME \ + "," NM_SETTING_INFINIBAND_SETTING_NAME "," NM_SETTING_BOND_SETTING_NAME \ + "," NM_SETTING_VLAN_SETTING_NAME "," NM_SETTING_BRIDGE_SETTING_NAME \ + "," NM_SETTING_BRIDGE_PORT_SETTING_NAME "," NM_SETTING_TEAM_SETTING_NAME \ + "," NM_SETTING_TEAM_PORT_SETTING_NAME "," NM_SETTING_OVS_BRIDGE_SETTING_NAME \ + "," NM_SETTING_OVS_INTERFACE_SETTING_NAME "," NM_SETTING_OVS_PATCH_SETTING_NAME \ + "," NM_SETTING_OVS_PORT_SETTING_NAME "," NM_SETTING_DCB_SETTING_NAME \ + "," NM_SETTING_TUN_SETTING_NAME "," NM_SETTING_IP_TUNNEL_SETTING_NAME \ + "," NM_SETTING_MACSEC_SETTING_NAME "," NM_SETTING_MACVLAN_SETTING_NAME \ + "," NM_SETTING_VXLAN_SETTING_NAME "," NM_SETTING_VRF_SETTING_NAME \ + "," NM_SETTING_WPAN_SETTING_NAME "," NM_SETTING_6LOWPAN_SETTING_NAME \ + "," NM_SETTING_WIREGUARD_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 */ const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = { NMC_META_GENERIC_WITH_NESTED("GENERAL", metagen_con_active_general), /* 0 */ @@ -1102,7 +1103,7 @@ usage_connection_add(void) " mode vepa|bridge|private|passthru|source\n" " [tap yes|no]\n\n" " vxlan: id <VXLAN ID>\n" - " remote <IP of multicast group or remote address>\n" + " [remote <IP of multicast group or remote address>]\n" " [local <source IP>]\n" " [dev <parent device (ifname or connection UUID)>]\n" " [source-port-min <0-65535>]\n" @@ -4957,6 +4958,10 @@ nmc_process_connection_properties(NmCli * nmc, const char * option; const char * value = NULL; const char * tmp; + const NMMetaAbstractInfo * chosen = NULL; + const char * chosen_setting_name = NULL; + const char * chosen_option = NULL; + NMMetaSettingType s; if (!con_settings(connection, &type_settings, &slv_settings, error)) return FALSE; @@ -5020,25 +5025,24 @@ nmc_process_connection_properties(NmCli * nmc, ss = is_setting_valid(connection, type_settings, slv_settings, setting_name); if (!ss) { - if (check_valid_name(setting_name, type_settings, slv_settings, NULL)) { - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Setting '%s' is not present in the connection."), - setting_name); - } else { + if (!check_valid_name(setting_name, type_settings, slv_settings, NULL)) { g_set_error(error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT, _("Error: invalid setting argument '%s'."), setting_name); + return FALSE; } - return FALSE; + continue; } if (!connection_remove_setting(connection, ss, error)) return FALSE; - } else if ((tmp = strchr(option, '.'))) { + + continue; + } + + if ((tmp = strchr(option, '.'))) { gs_free char *option_sett = g_strndup(option, tmp - option); const char * option_prop = &tmp[1]; const char * option_sett_expanded; @@ -5081,58 +5085,35 @@ nmc_process_connection_properties(NmCli * nmc, modifier, error)) return FALSE; - } else { - const NMMetaAbstractInfo *chosen = NULL; - const char * chosen_setting_name = NULL; - const char * chosen_option = NULL; - NMMetaSettingType s; - - /* Let's see if this is an property alias (such as "id", "mode", "type" or "con-name")*/ - for (s = 0; s < _NM_META_SETTING_TYPE_NUM; s++) { - const NMMetaPropertyInfo *const *property_infos; - guint p; - - if (!check_valid_name(nm_meta_setting_infos[s].setting_name, - type_settings, - slv_settings, - NULL)) - continue; - property_infos = nm_meta_setting_infos_editor[s].properties; - if (!property_infos) - continue; - for (p = 0; property_infos[p]; p++) { - const NMMetaPropertyInfo *property_info = property_infos[p]; - - if (_meta_property_needs_bond_hack(property_info)) { - guint i; - - for (i = 0; i < nm_meta_property_typ_data_bond.nested_len; i++) { - const NMMetaNestedPropertyInfo *bi = - &nm_meta_property_typ_data_bond.nested[i]; - - if (!nm_streq0(bi->base.property_alias, option)) - continue; - if (chosen) { - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Error: '%s' is ambiguous (%s.%s or %s.%s)."), - option, - chosen_setting_name, - chosen_option, - nm_meta_setting_infos[s].setting_name, - option); - return FALSE; - } - chosen_setting_name = nm_meta_setting_infos[s].setting_name; - chosen_option = option; - chosen = (const NMMetaAbstractInfo *) bi; - } - } else { - if (!property_info->is_cli_option) - continue; - if (!nm_streq0(property_info->property_alias, option)) + continue; + } + + /* Let's see if this is an property alias (such as "id", "mode", "type" or "con-name")*/ + for (s = 0; s < _NM_META_SETTING_TYPE_NUM; s++) { + const NMMetaPropertyInfo *const *property_infos; + guint p; + + if (!check_valid_name(nm_meta_setting_infos[s].setting_name, + type_settings, + slv_settings, + NULL)) + continue; + + property_infos = nm_meta_setting_infos_editor[s].properties; + if (!property_infos) + continue; + for (p = 0; property_infos[p]; p++) { + const NMMetaPropertyInfo *property_info = property_infos[p]; + + if (_meta_property_needs_bond_hack(property_info)) { + guint i; + + for (i = 0; i < nm_meta_property_typ_data_bond.nested_len; i++) { + const NMMetaNestedPropertyInfo *bi = + &nm_meta_property_typ_data_bond.nested[i]; + + if (!nm_streq0(bi->base.property_alias, option)) continue; if (chosen) { g_set_error(error, @@ -5148,39 +5129,60 @@ nmc_process_connection_properties(NmCli * nmc, } chosen_setting_name = nm_meta_setting_infos[s].setting_name; chosen_option = option; - chosen = (const NMMetaAbstractInfo *) property_info; + chosen = (const NMMetaAbstractInfo *) bi; } + } else { + if (!property_info->is_cli_option) + continue; + if (!nm_streq0(property_info->property_alias, option)) + continue; + if (chosen) { + g_set_error(error, + NMCLI_ERROR, + NMC_RESULT_ERROR_USER_INPUT, + _("Error: '%s' is ambiguous (%s.%s or %s.%s)."), + option, + chosen_setting_name, + chosen_option, + nm_meta_setting_infos[s].setting_name, + option); + return FALSE; + } + chosen_setting_name = nm_meta_setting_infos[s].setting_name; + chosen_option = option; + chosen = (const NMMetaAbstractInfo *) property_info; } } + } - if (!chosen) { - if (*argc == 1 && nmc->complete) { - if (allow_setting_removal && g_str_has_prefix("remove", option)) - g_print("remove\n"); - complete_property_name(nmc, connection, modifier, option, NULL); - } - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Error: invalid <setting>.<property> '%s'."), - option); - return FALSE; + if (!chosen) { + if (*argc == 1 && nmc->complete) { + if (allow_setting_removal && g_str_has_prefix("remove", option)) + g_print("remove\n"); + complete_property_name(nmc, connection, modifier, option, NULL); } + g_set_error(error, + NMCLI_ERROR, + NMC_RESULT_ERROR_USER_INPUT, + _("Error: invalid <setting>.<property> '%s'."), + option); + return FALSE; + } - if (*argc == 1 && nmc->complete) - complete_property_name(nmc, connection, modifier, option, NULL); + if (*argc == 1 && nmc->complete) + complete_property_name(nmc, connection, modifier, option, NULL); - (*argc)--; - (*argv)++; - if (!get_value(&value, argc, argv, option_orig, error)) - return FALSE; + (*argc)--; + (*argv)++; + if (!get_value(&value, argc, argv, option_orig, error)) + return FALSE; - if (!*argc && nmc->complete) - complete_option(nmc, chosen, value ?: "", connection); + if (!*argc && nmc->complete) + complete_option(nmc, chosen, value ?: "", connection); + + if (!set_option(nmc, connection, chosen, value, error)) + return FALSE; - if (!set_option(nmc, connection, chosen, value, error)) - return FALSE; - } } while (*argc); return TRUE; diff --git a/clients/cli/generate-docs-nm-settings-nmcli.xml.in b/clients/cli/generate-docs-nm-settings-nmcli.xml.in new file mode 100644 index 0000000000..1d1a09ba4a --- /dev/null +++ b/clients/cli/generate-docs-nm-settings-nmcli.xml.in @@ -0,0 +1,1125 @@ +<nm-setting-docs> + <setting name="6lowpan" > + <property name="parent" + alias="dev" + description="If given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created." /> + </setting> + <setting name="802-11-olpc-mesh" + alias="olpc-mesh" > + <property name="ssid" + alias="ssid" + description="SSID of the mesh network to join." /> + <property name="channel" + alias="channel" + description="Channel on which the mesh network to join is located." /> + <property name="dhcp-anycast-address" + alias="dhcp-anycast" + 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." /> + </setting> + <setting name="802-11-wireless" + alias="wifi" > + <property name="ssid" + alias="ssid" + description="SSID of the Wi-Fi network. Must be specified." /> + <property name="mode" + alias="mode" + description="Wi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed." /> + <property name="band" + 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." /> + <property name="channel" + 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." /> + <property name="bssid" + 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." /> + <property name="rate" + description="If non-zero, directs the device to only use the specified bitrate for communication with the access point. Units are in Kb/s, ie 5500 = 5.5 Mbit/s. This property is highly driver dependent and not all devices support setting a static bitrate." /> + <property name="tx-power" + description="If non-zero, directs the device to use the specified transmit power. Units are dBm. This property is highly driver dependent and not all devices support setting a static transmit power." /> + <property name="mac-address" + alias="mac" + 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)." /> + <property name="cloned-mac-address" + alias="cloned-mac" + 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"." /> + <property name="generate-mac-address-mask" + 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." /> + <property name="mac-address-blacklist" + 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")." /> + <property name="mac-address-randomization" + 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). This property is deprecated for 'cloned-mac-address'. Deprecated: 1" /> + <property name="mtu" + alias="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." /> + <property name="seen-bssids" + 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." /> + <property name="hidden" + 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." /> + <property name="powersave" + 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." /> + <property name="wake-on-wlan" + 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)." /> + <property name="ap-isolation" + 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)." /> + </setting> + <setting name="802-11-wireless-security" + alias="wifi-sec" > + <property name="key-mgmt" + description="Key management used for the connection. One of "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE), "owe" (Opportunistic Wireless Encryption) or "wpa-eap" (WPA-Enterprise). This property must be set for any Wi-Fi connection that uses security." /> + <property name="wep-tx-keyidx" + 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." /> + <property name="auth-alg" + 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." /> + <property name="proto" + 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." /> + <property name="pairwise" + 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"." /> + <property name="group" + 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"." /> + <property name="pmf" + 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." /> + <property name="leap-username" + description="The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." /> + <property name="wep-key0" + 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." /> + <property name="wep-key1" + 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." /> + <property name="wep-key2" + 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." /> + <property name="wep-key3" + 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." /> + <property name="wep-key-flags" + description="Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties." /> + <property name="wep-key-type" + 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." /> + <property name="psk" + 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." /> + <property name="psk-flags" + description="Flags indicating how to handle the "psk" property." /> + <property name="leap-password" + description="The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap")." /> + <property name="leap-password-flags" + description="Flags indicating how to handle the "leap-password" property." /> + <property name="wps-method" + 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." /> + <property name="fils" + 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." /> + </setting> + <setting name="802-1x" > + <property name="optional" + 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." /> + <property name="eap" + 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." /> + <property name="identity" + description="Identity string for EAP authentication methods. Often the user's user or login name." /> + <property name="anonymous-identity" + description="Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." /> + <property name="pac-file" + description="UTF-8 encoded file path containing PAC for EAP-FAST." /> + <property name="ca-cert" + 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." /> + <property name="ca-cert-password" + 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." /> + <property name="ca-cert-password-flags" + description="Flags indicating how to handle the "ca-cert-password" property." /> + <property name="ca-path" + 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." /> + <property name="subject-match" + 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 its use is deprecated in favor of NMSetting8021x:domain-suffix-match." /> + <property name="altsubject-matches" + 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." /> + <property name="domain-suffix-match" + 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." /> + <property name="domain-match" + 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." /> + <property name="client-cert" + 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." /> + <property name="client-cert-password" + 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." /> + <property name="client-cert-password-flags" + description="Flags indicating how to handle the "client-cert-password" property." /> + <property name="phase1-peapver" + 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." /> + <property name="phase1-peaplabel" + 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." /> + <property name="phase1-fast-provisioning" + 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." /> + <property name="phase1-auth-flags" + description="Specifies authentication flags to use in "phase 1" outer authentication using NMSetting8021xAuthFlags options. The individual TLS versions can be explicitly 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 settings. See the wpa_supplicant documentation for more details." /> + <property name="phase2-auth" + description="Specifies the allowed "phase 2" inner non-EAP authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. Recognized non-EAP "phase 2" methods are "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." /> + <property name="phase2-autheap" + description="Specifies the allowed "phase 2" inner EAP-based authentication method when an EAP method that uses an inner TLS tunnel 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." /> + <property name="phase2-ca-cert" + 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." /> + <property name="phase2-ca-cert-password" + 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." /> + <property name="phase2-ca-cert-password-flags" + description="Flags indicating how to handle the "phase2-ca-cert-password" property." /> + <property name="phase2-ca-path" + 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." /> + <property name="phase2-subject-match" + 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 its use is deprecated in favor of NMSetting8021x:phase2-domain-suffix-match." /> + <property name="phase2-altsubject-matches" + 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." /> + <property name="phase2-domain-suffix-match" + 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." /> + <property name="phase2-domain-match" + 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." /> + <property name="phase2-client-cert" + 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." /> + <property name="phase2-client-cert-password" + 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." /> + <property name="phase2-client-cert-password-flags" + description="Flags indicating how to handle the "phase2-client-cert-password" property." /> + <property name="password" + 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." /> + <property name="password-flags" + description="Flags indicating how to handle the "password" property." /> + <property name="password-raw" + 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." /> + <property name="password-raw-flags" + description="Flags indicating how to handle the "password-raw" property." /> + <property name="private-key" + 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." /> + <property name="private-key-password" + 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." /> + <property name="private-key-password-flags" + description="Flags indicating how to handle the "private-key-password" property." /> + <property name="phase2-private-key" + 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." /> + <property name="phase2-private-key-password" + 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." /> + <property name="phase2-private-key-password-flags" + description="Flags indicating how to handle the "phase2-private-key-password" property." /> + <property name="pin" + description="PIN used for EAP authentication methods." /> + <property name="pin-flags" + description="Flags indicating how to handle the "pin" property." /> + <property name="system-ca-certs" + 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)." /> + <property name="auth-timeout" + description="A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds." /> + </setting> + <setting name="802-3-ethernet" + alias="ethernet" > + <property name="port" + 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." /> + <property name="speed" + 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." /> + <property name="duplex" + 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." /> + <property name="auto-negotiate" + 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." /> + <property name="mac-address" + alias="mac" + 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)." /> + <property name="cloned-mac-address" + alias="cloned-mac" + 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"." /> + <property name="generate-mac-address-mask" + 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." /> + <property name="mac-address-blacklist" + 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)." /> + <property name="mtu" + alias="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." /> + <property name="s390-subchannels" + 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." /> + <property name="s390-nettype" + description="s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems." /> + <property name="s390-options" + 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])." /> + <property name="wake-on-lan" + 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)." /> + <property name="wake-on-lan-password" + 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." /> + </setting> + <setting name="adsl" > + <property name="username" + alias="username" + description="Username used to authenticate with the ADSL service." /> + <property name="password" + alias="password" + description="Password used to authenticate with the ADSL service." /> + <property name="password-flags" + description="Flags indicating how to handle the "password" property." /> + <property name="protocol" + alias="protocol" + description="ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm"." /> + <property name="encapsulation" + alias="encapsulation" + description="Encapsulation of ADSL connection. Can be "vcmux" or "llc"." /> + <property name="vpi" + description="VPI of ADSL connection" /> + <property name="vci" + description="VCI of ADSL connection" /> + </setting> + <setting name="bluetooth" > + <property name="bdaddr" + alias="addr" + description="The Bluetooth address of the device." /> + <property name="type" + alias="bt-type" + description="Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile." /> + </setting> + <setting name="bond" > + <property name="options" + 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])." /> + </setting> + <setting name="bridge" > + <property name="mac-address" + alias="mac" + 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. Hence, this property is deprecated. Deprecated: 1" /> + <property name="stp" + alias="stp" + description="Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." /> + <property name="priority" + alias="priority" + 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." /> + <property name="forward-delay" + alias="forward-delay" + description="The Spanning Tree Protocol (STP) forwarding delay, in seconds." /> + <property name="hello-time" + alias="hello-time" + description="The Spanning Tree Protocol (STP) hello time, in seconds." /> + <property name="max-age" + alias="max-age" + description="The Spanning Tree Protocol (STP) maximum message age, in seconds." /> + <property name="ageing-time" + alias="ageing-time" + description="The Ethernet MAC address aging time, in seconds." /> + <property name="group-address" + 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." /> + <property name="group-forward-mask" + alias="group-forward-mask" + 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." /> + <property name="multicast-hash-max" + description="Set maximum size of multicast hash table (value must be a power of 2)." /> + <property name="multicast-last-member-count" + description="Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received." /> + <property name="multicast-last-member-interval" + description="Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received." /> + <property name="multicast-membership-interval" + description="Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received." /> + <property name="multicast-querier" + description="Enable or disable sending of multicast queries by the bridge. If not specified the option is disabled." /> + <property name="multicast-querier-interval" + description="If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries." /> + <property name="multicast-query-interval" + description="Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase." /> + <property name="multicast-query-response-interval" + description="Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge." /> + <property name="multicast-query-use-ifaddr" + 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." /> + <property name="multicast-snooping" + alias="multicast-snooping" + 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." /> + <property name="multicast-startup-query-count" + description="Set the number of IGMP queries to send during startup phase." /> + <property name="multicast-startup-query-interval" + description="Sets the time (in deciseconds) between queries sent out at startup to determine membership information." /> + <property name="multicast-router" + 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)." /> + <property name="vlan-filtering" + description="Control whether VLAN filtering is enabled on the bridge." /> + <property name="vlan-default-pvid" + description="The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames." /> + <property name="vlan-stats-enabled" + description="Controls whether per-VLAN stats accounting is enabled." /> + <property name="vlan-protocol" + 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'." /> + <property name="vlans" + 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." /> + </setting> + <setting name="bridge-port" > + <property name="priority" + alias="priority" + description="The Spanning Tree Protocol (STP) priority of this bridge port." /> + <property name="path-cost" + alias="path-cost" + description="The Spanning Tree Protocol (STP) port cost for destinations via this port." /> + <property name="hairpin-mode" + alias="hairpin" + 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." /> + <property name="vlans" + 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." /> + </setting> + <setting name="cdma" > + <property name="number" + 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." /> + <property name="username" + alias="user" + 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." /> + <property name="password" + alias="password" + 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." /> + <property name="password-flags" + description="Flags indicating how to handle the "password" property." /> + <property name="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + </setting> + <setting name="connection" > + <property name="id" + alias="con-name" + description="A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G"." /> + <property name="uuid" + description="A universally unique identifier for the connection, for example generated with libuuid. It should be assigned when the connection is created, and never changed as long as the connection still applies to the same network. For example, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-")." /> + <property name="stable-id" + 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 as DHCP client identifier with ipv4.dhcp-client-id=stable and to derive the DHCP DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid]. 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. The '$' character is treated special to perform dynamic substitutions at runtime. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", "${BOOT}", "${RANDOM}". These effectively create unique IDs per-connection, per-device, per-boot, or every time. Note that "${DEVICE}" corresponds to the interface name of the device and "${MAC}" is 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 similar to "${CONNECTION}" and uses a unique, fixed ID for the connection." /> + <property name="type" + alias="type" + 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)." /> + <property name="interface-name" + alias="ifname" + 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." /> + <property name="autoconnect" + alias="autoconnect" + 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. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles." /> + <property name="autoconnect-priority" + description="The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority." /> + <property name="autoconnect-retries" + 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." /> + <property name="multi-connect" + description="Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect." /> + <property name="auth-retries" + 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." /> + <property name="timestamp" + 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)." /> + <property name="read-only" + description="FALSE if the connection can be modified using the provided settings service's D-Bus interface with the right privileges, or TRUE if the connection is read-only and cannot be modified." /> + <property name="permissions" + 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." /> + <property name="zone" + 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." /> + <property name="master" + alias="master" + description="Interface name of the master device or UUID of the master connection." /> + <property name="slave-type" + alias="slave-type" + description="Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave." /> + <property name="autoconnect-slaves" + 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." /> + <property name="secondaries" + description="List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported." /> + <property name="gateway-ping-timeout" + description="If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping." /> + <property name="metered" + description="Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately." /> + <property name="lldp" + description="Whether LLDP is enabled for the connection." /> + <property name="mdns" + 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." /> + <property name="llmnr" + 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." /> + <property name="mud-url" + 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"." /> + <property name="wait-device-timeout" + 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." /> + </setting> + <setting name="dcb" > + <property name="app-fcoe-flags" + 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)." /> + <property name="app-fcoe-priority" + 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." /> + <property name="app-fcoe-mode" + description="The FCoE controller mode; either "fabric" (default) or "vn2vn"." /> + <property name="app-iscsi-flags" + 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)." /> + <property name="app-iscsi-priority" + 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." /> + <property name="app-fip-flags" + 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)." /> + <property name="app-fip-priority" + 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." /> + <property name="priority-flow-control-flags" + 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)." /> + <property name="priority-flow-control" + 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." /> + <property name="priority-group-flags" + 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)." /> + <property name="priority-group-id" + 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." /> + <property name="priority-group-bandwidth" + 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." /> + <property name="priority-bandwidth" + 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." /> + <property name="priority-strict-bandwidth" + 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." /> + <property name="priority-traffic-class" + 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." /> + </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-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-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-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-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-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="ring-rx" /> + <property name="ring-rx-jumbo" /> + <property name="ring-rx-mini" /> + <property name="ring-tx" /> + </setting> + <setting name="generic" > + </setting> + <setting name="gsm" > + <property name="auto-config" + 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." /> + <property name="number" + description="Legacy setting that used to help establishing PPP data sessions for GSM-based modems. Deprecated: 1" /> + <property name="username" + alias="user" + 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." /> + <property name="password" + alias="password" + 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." /> + <property name="password-flags" + description="Flags indicating how to handle the "password" property." /> + <property name="apn" + alias="apn" + 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." /> + <property name="network-id" + 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." /> + <property name="pin" + 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." /> + <property name="pin-flags" + description="Flags indicating how to handle the "pin" property." /> + <property name="home-only" + description="When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." /> + <property name="device-id" + 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." /> + <property name="sim-id" + 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." /> + <property name="sim-operator-id" + 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." /> + <property name="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + </setting> + <setting name="hostname" > + <property name="priority" + 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." /> + <property name="from-dhcp" + 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)." /> + <property name="from-dns-lookup" + 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)." /> + <property name="only-from-default" + 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_TRUE (1)." /> + </setting> + <setting name="infiniband" > + <property name="mac-address" + alias="mac" + 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)." /> + <property name="mtu" + alias="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." /> + <property name="transport-mode" + alias="transport-mode" + description="The IP-over-InfiniBand transport mode. Either "datagram" or "connected"." /> + <property name="p-key" + alias="p-key" + 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 is set if it is a "full membership" P_Key." /> + <property name="parent" + alias="parent" + 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"." /> + </setting> + <setting name="ip-tunnel" > + <property name="mode" + alias="mode" + description="The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or NM_IP_TUNNEL_MODE_GRE (2)." /> + <property name="parent" + alias="dev" + 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." /> + <property name="local" + alias="local" + description="The local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address." /> + <property name="remote" + alias="remote" + description="The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address." /> + <property name="ttl" + description="The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value." /> + <property name="tos" + description="The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets." /> + <property name="path-mtu-discovery" + description="Whether to enable Path MTU Discovery on this tunnel." /> + <property name="input-key" + 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." /> + <property name="output-key" + 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." /> + <property name="encapsulation-limit" + description="How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels." /> + <property name="flow-label" + description="The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels." /> + <property name="mtu" + description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments." /> + <property name="flags" + description="Tunnel flags. Currently, the following values are supported: NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT (0x1), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_TCLASS (0x2), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FLOWLABEL (0x4), NM_IP_TUNNEL_FLAG_IP6_MIP6_DEV (0x8), NM_IP_TUNNEL_FLAG_IP6_RCV_DSCP_COPY (0x10), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK (0x20). They are valid only for IPv6 tunnels." /> + </setting> + <setting name="ipv4" > + <property name="method" + description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared." /> + <property name="dns" + description="Array of IP addresses of DNS servers." /> + <property name="dns-search" + description="Array 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." /> + <property name="dns-options" + description="Array of DNS options as described in man 5 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", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". 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." /> + <property name="dns-priority" + 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." /> + <property name="addresses" + alias="ip4" + description="Array of IP addresses." /> + <property name="gateway" + alias="gw4" + description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length." /> + <property name="routes" + description="Array of IP routes." /> + <property name="route-metric" + 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." /> + <property name="route-table" + 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" /> + <property name="ignore-auto-routes" + 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." /> + <property name="ignore-auto-dns" + 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." /> + <property name="dhcp-client-id" + 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 "duid" generates a RFC4361-compliant client identifier based on a hash of the interface name as IAID and /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." /> + <property name="dhcp-iaid" + description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "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". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address." /> + <property name="dhcp-timeout" + 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." /> + <property name="dhcp-send-hostname" + 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." /> + <property name="dhcp-hostname" + 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." /> + <property name="dhcp-fqdn" + 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." /> + <property name="dhcp-hostname-flags" + 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." /> + <property name="never-default" + 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." /> + <property name="may-fail" + 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." /> + <property name="dad-timeout" + 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." /> + <property name="dhcp-vendor-class-identifier" + 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. Since 1.28" /> + <property name="dhcp-reject-servers" + 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." /> + </setting> + <setting name="ipv6" > + <property name="method" + description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "disabled", "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty. For IPv4 method "shared", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen. Note that the shared method must be configured on the interface which shares the internet to a subnet, not on the uplink which is shared." /> + <property name="dns" + description="Array of IP addresses of DNS servers." /> + <property name="dns-search" + description="Array 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." /> + <property name="dns-options" + description="Array of DNS options as described in man 5 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", "inet6", "ip6-bytestring", "ip6-dotint", "ndots", "no-check-names", "no-ip6-dotint", "no-reload", "no-tld-query", "rotate", "single-request", "single-request-reopen", "timeout", "trust-ad", "use-vc". 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." /> + <property name="dns-priority" + 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." /> + <property name="addresses" + alias="ip6" + description="Array of IP addresses." /> + <property name="gateway" + alias="gw6" + description="The gateway associated with this configuration. This is only meaningful if "addresses" is also set. The gateway's main purpose is to control the next hop of the standard default route on the device. Hence, the gateway property conflicts with "never-default" and will be automatically dropped if the IP configuration is set to never-default. As an alternative to set the gateway, configure a static default route with /0 as prefix length." /> + <property name="routes" + description="Array of IP routes." /> + <property name="route-metric" + 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." /> + <property name="route-table" + 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" /> + <property name="ignore-auto-routes" + 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." /> + <property name="ignore-auto-dns" + 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." /> + <property name="never-default" + 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." /> + <property name="may-fail" + 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." /> + <property name="ip6-privacy" + 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." /> + <property name="addr-gen-mode" + description="Configure method for creating the address for use with RFC4862 IPv6 Stateless Address Autoconfiguration. The permitted values are: NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64 (0) or NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_STABLE_PRIVACY (1). If the property is set to EUI64, the addresses will be generated using the interface tokens derived from hardware address. This makes the host part of the address to stay constant, making it possible to track host's presence when it changes networks. The address changes when the interface hardware is replaced. The value of stable-privacy enables use of cryptographically secure hash of a secret host-specific key along with the connection's stable-id and the network address as specified by RFC7217. This makes it impossible to use the address track host's presence, and makes the address stable when the network interface hardware is replaced. On D-Bus, the absence of an addr-gen-mode setting equals enabling stable-privacy. For keyfile plugin, the absence of the setting on disk means EUI64 so that the property doesn't change on upgrade from older versions. 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." /> + <property name="ra-timeout" + 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." /> + <property name="dhcp-duid" + 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." /> + <property name="dhcp-iaid" + description="A string containing the "Identity Association Identifier" (IAID) used by the DHCP client. The property is a 32-bit decimal value or a special value among "mac", "perm-mac", "ifname" and "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". Note that at the moment this property is ignored for IPv6 by dhclient, which always derives the IAID from the MAC address." /> + <property name="dhcp-timeout" + 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." /> + <property name="dhcp-send-hostname" + 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." /> + <property name="dhcp-hostname" + 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." /> + <property name="dhcp-hostname-flags" + 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." /> + <property name="token" + description="Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode." /> + </setting> + <setting name="macsec" > + <property name="parent" + alias="dev" + 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." /> + <property name="mode" + alias="mode" + description="Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained." /> + <property name="encrypt" + alias="encrypt" + description="Whether the transmitted traffic must be encrypted." /> + <property name="mka-cak" + alias="cak" + description="The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement." /> + <property name="mka-cak-flags" + description="Flags indicating how to handle the "mka-cak" property." /> + <property name="mka-ckn" + alias="ckn" + description="The pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement." /> + <property name="port" + alias="port" + description="The port component of the SCI (Secure Channel Identifier), between 1 and 65534." /> + <property name="validation" + description="Specifies the validation mode for incoming frames." /> + <property name="send-sci" + description="Specifies whether the SCI (Secure Channel Identifier) is included in every packet." /> + </setting> + <setting name="macvlan" > + <property name="parent" + alias="dev" + 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." /> + <property name="mode" + alias="mode" + description="The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device." /> + <property name="promiscuous" + description="Whether the interface should be put in promiscuous mode." /> + <property name="tap" + alias="tap" + description="Whether the interface should be a MACVTAP." /> + </setting> + <setting name="match" > + <property name="interface-name" + 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"." /> + <property name="kernel-command-line" + 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 if prefixed with the exclamation mark unset). The argument must either be a single word, or an assignment (i.e. two words, separated "="). 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. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\' are used for optional and mandatory matches and inverting the pattern." /> + <property name="driver" + 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." /> + <property name="path" + 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." /> + </setting> + <setting name="ovs-bridge" > + <property name="fail-mode" + description="The bridge failure mode. One of "secure", "standalone" or empty." /> + <property name="mcast-snooping-enable" + description="Enable or disable multicast snooping." /> + <property name="rstp-enable" + description="Enable or disable RSTP." /> + <property name="stp-enable" + description="Enable or disable STP." /> + <property name="datapath-type" + description="The data path type. One of "system", "netdev" or empty." /> + </setting> + <setting name="ovs-dpdk" > + <property name="devargs" + description="Open vSwitch DPDK device arguments." /> + </setting> + <setting name="ovs-external-ids" > + </setting> + <setting name="ovs-interface" > + <property name="type" + description="The interface type. Either "internal", "system", "patch", "dpdk", or empty." /> + </setting> + <setting name="ovs-patch" > + <property name="peer" + 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." /> + </setting> + <setting name="ovs-port" > + <property name="vlan-mode" + description="The VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk" or unset." /> + <property name="tag" + description="The VLAN tag in the range 0-4095." /> + <property name="lacp" + description="LACP mode. One of "active", "off", or "passive"." /> + <property name="bond-mode" + description="Bonding mode. One of "active-backup", "balance-slb", or "balance-tcp"." /> + <property name="bond-updelay" + description="The time port must be active before it starts forwarding traffic." /> + <property name="bond-downdelay" + description="The time port must be inactive in order to be considered down." /> + </setting> + <setting name="ppp" > + <property name="noauth" + 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." /> + <property name="refuse-eap" + description="If TRUE, the EAP authentication method will not be used." /> + <property name="refuse-pap" + description="If TRUE, the PAP authentication method will not be used." /> + <property name="refuse-chap" + description="If TRUE, the CHAP authentication method will not be used." /> + <property name="refuse-mschap" + description="If TRUE, the MSCHAP authentication method will not be used." /> + <property name="refuse-mschapv2" + description="If TRUE, the MSCHAPv2 authentication method will not be used." /> + <property name="nobsdcomp" + description="If TRUE, BSD compression will not be requested." /> + <property name="nodeflate" + description="If TRUE, "deflate" compression will not be requested." /> + <property name="no-vj-comp" + description="If TRUE, Van Jacobsen TCP header compression will not be requested." /> + <property name="require-mppe" + 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." /> + <property name="require-mppe-128" + 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." /> + <property name="mppe-stateful" + description="If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." /> + <property name="crtscts" + 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." /> + <property name="baud" + 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." /> + <property name="mru" + 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." /> + <property name="mtu" + description="If non-zero, instruct pppd to send packets no larger than the specified size." /> + <property name="lcp-echo-failure" + 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." /> + <property name="lcp-echo-interval" + 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." /> + </setting> + <setting name="pppoe" > + <property name="parent" + alias="parent" + 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." /> + <property name="service" + alias="service" + 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." /> + <property name="username" + alias="username" + description="Username used to authenticate with the PPPoE service." /> + <property name="password" + alias="password" + description="Password used to authenticate with the PPPoE service." /> + <property name="password-flags" + description="Flags indicating how to handle the "password" property." /> + </setting> + <setting name="proxy" > + <property name="method" + alias="method" + description="Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)" /> + <property name="browser-only" + alias="browser-only" + description="Whether the proxy configuration is for browser only." /> + <property name="pac-url" + alias="pac-url" + description="PAC URL for obtaining PAC file." /> + <property name="pac-script" + alias="pac-script" + description="PAC script for the connection." /> + </setting> + <setting name="serial" > + <property name="baud" + 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." /> + <property name="bits" + description="Byte-width of the serial communication. The 8 in "8n1" for example." /> + <property name="parity" + description="Parity setting of the serial port." /> + <property name="stopbits" + description="Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example." /> + <property name="send-delay" + description="Time to delay between each byte sent to the modem, in microseconds." /> + </setting> + <setting name="sriov" > + <property name="total-vfs" + 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." /> + <property name="vfs" + 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." /> + <property name="autoprobe-drivers" + 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)." /> + </setting> + <setting name="tc" > + <property name="qdiscs" + description="Array of TC queueing disciplines." /> + <property name="tfilters" + description="Array of TC traffic filters." /> + </setting> + <setting name="team" > + <property name="config" + alias="config" + 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." /> + <property name="notify-peers-count" + description="Corresponds to the teamd notify_peers.count." /> + <property name="notify-peers-interval" + description="Corresponds to the teamd notify_peers.interval." /> + <property name="mcast-rejoin-count" + description="Corresponds to the teamd mcast_rejoin.count." /> + <property name="mcast-rejoin-interval" + description="Corresponds to the teamd mcast_rejoin.interval." /> + <property name="runner" + description="Corresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random"." /> + <property name="runner-hwaddr-policy" + description="Corresponds to the teamd runner.hwaddr_policy." /> + <property name="runner-tx-hash" + description="Corresponds to the teamd runner.tx_hash." /> + <property name="runner-tx-balancer" + description="Corresponds to the teamd runner.tx_balancer.name." /> + <property name="runner-tx-balancer-interval" + description="Corresponds to the teamd runner.tx_balancer.interval." /> + <property name="runner-active" + description="Corresponds to the teamd runner.active." /> + <property name="runner-fast-rate" + description="Corresponds to the teamd runner.fast_rate." /> + <property name="runner-sys-prio" + description="Corresponds to the teamd runner.sys_prio." /> + <property name="runner-min-ports" + description="Corresponds to the teamd runner.min_ports." /> + <property name="runner-agg-select-policy" + description="Corresponds to the teamd runner.agg_select_policy." /> + <property name="link-watchers" + 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." /> + </setting> + <setting name="team-port" > + <property name="config" + alias="config" + 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." /> + <property name="queue-id" + description="Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config." /> + <property name="prio" + description="Corresponds to the teamd ports.PORTIFNAME.prio." /> + <property name="sticky" + description="Corresponds to the teamd ports.PORTIFNAME.sticky." /> + <property name="lacp-prio" + description="Corresponds to the teamd ports.PORTIFNAME.lacp_prio." /> + <property name="lacp-key" + description="Corresponds to the teamd ports.PORTIFNAME.lacp_key." /> + <property name="link-watchers" + 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." /> + </setting> + <setting name="tun" > + <property name="mode" + alias="mode" + 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." /> + <property name="owner" + alias="owner" + description="The user ID which will own the device. If set to NULL everyone will be able to use the device." /> + <property name="group" + alias="group" + description="The group ID which will own the device. If set to NULL everyone will be able to use the device." /> + <property name="pi" + alias="pi" + description="If TRUE the interface will prepend a 4 byte header describing the physical interface to the packets." /> + <property name="vnet-hdr" + alias="vnet-hdr" + description="If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header." /> + <property name="multi-queue" + alias="multi-queue" + 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." /> + </setting> + <setting name="user" > + </setting> + <setting name="veth" > + <property name="peer" + alias="peer" + description="This property specifies the peer interface name of the veth. This property is mandatory." /> + </setting> + <setting name="vlan" > + <property name="parent" + alias="dev" + 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." /> + <property name="id" + alias="id" + 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." /> + <property name="flags" + alias="flags" + 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." /> + <property name="ingress-priority-map" + alias="ingress" + 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"." /> + <property name="egress-priority-map" + alias="egress" + 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"." /> + </setting> + <setting name="vpn" > + <property name="service-type" + alias="vpn-type" + 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." /> + <property name="user-name" + alias="user" + 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." /> + <property name="data" + description="Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." /> + <property name="secrets" + description="Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." /> + <property name="persistent" + 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." /> + <property name="timeout" + 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." /> + </setting> + <setting name="vrf" > + <property name="table" + alias="table" + description="The routing table for this VRF." /> + </setting> + <setting name="vxlan" > + <property name="parent" + alias="dev" + description="If given, specifies the parent interface name or parent connection UUID." /> + <property name="id" + alias="id" + description="Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use." /> + <property name="local" + alias="local" + description="If given, specifies the source IP address to use in outgoing packets." /> + <property name="remote" + alias="remote" + 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." /> + <property name="source-port-min" + alias="source-port-min" + description="Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint." /> + <property name="source-port-max" + alias="source-port-max" + description="Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint." /> + <property name="destination-port" + alias="destination-port" + description="Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint." /> + <property name="tos" + description="Specifies the TOS value to use in outgoing packets." /> + <property name="ttl" + description="Specifies the time-to-live value to use in outgoing packets." /> + <property name="ageing" + description="Specifies the lifetime in seconds of FDB entries learnt by the kernel." /> + <property name="limit" + description="Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries." /> + <property name="learning" + description="Specifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database." /> + <property name="proxy" + description="Specifies whether ARP proxy is turned on." /> + <property name="rsc" + description="Specifies whether route short circuit is turned on." /> + <property name="l2-miss" + description="Specifies whether netlink LL ADDR miss notifications are generated." /> + <property name="l3-miss" + description="Specifies whether netlink IP ADDR miss notifications are generated." /> + </setting> + <setting name="wifi-p2p" > + <property name="peer" + alias="peer" + description="The P2P device that should be connected to. Currently, this is the only way to create or join a group." /> + <property name="wps-method" + 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." /> + <property name="wfd-ies" + 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." /> + </setting> + <setting name="wimax" > + <property name="mac-address" + alias="mac" + 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). Deprecated: 1" /> + <property name="network-name" + alias="nsp" + description="Network Service Provider (NSP) name of the WiMAX network this connection should use. Deprecated: 1" /> + </setting> + <setting name="wireguard" > + <property name="private-key" + description="The 256 bit private-key in base64 encoding." /> + <property name="private-key-flags" + description="Flags indicating how to handle the "private-key" property." /> + <property name="listen-port" + description="The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up." /> + <property name="fwmark" + 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." /> + <property name="peer-routes" + 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." /> + <property name="mtu" + 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." /> + <property name="ip4-auto-default-route" + 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." /> + <property name="ip6-auto-default-route" + description="Like ip4-auto-default-route, but for the IPv6 default route." /> + </setting> + <setting name="wpan" > + <property name="mac-address" + alias="mac" + description="If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches." /> + <property name="short-address" + alias="short-addr" + description="Short IEEE 802.15.4 address to be used within a restricted environment." /> + <property name="pan-id" + alias="pan-id" + description="IEEE 802.15.4 Personal Area Network (PAN) identifier." /> + <property name="page" + alias="page" + description="IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." /> + <property name="channel" + alias="channel" + description="IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to"." /> + </setting> +</nm-setting-docs> diff --git a/clients/cli/meson.build b/clients/cli/meson.build index 517deffa69..585a5a7382 100644 --- a/clients/cli/meson.build +++ b/clients/cli/meson.build @@ -50,9 +50,23 @@ generate_docs_nm_settings_nmcli = executable( link_depends: linker_script_binary, ) -generate_docs_nm_settings_nmcli_xml = custom_target( - 'generate-docs-nm-settings-nmcli.xml', - output: 'generate-docs-nm-settings-nmcli.xml', - command: [ generate_docs_nm_settings_nmcli ], - capture: true, -) +if enable_docs + generate_docs_nm_settings_nmcli_xml = custom_target( + 'generate-docs-nm-settings-nmcli.xml', + output: 'generate-docs-nm-settings-nmcli.xml', + command: [ generate_docs_nm_settings_nmcli ], + capture: true, + ) + + test( + 'check-local-generate-docs-nm-settings-nmcli', + find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), + args: [source_root, build_root, 'clients/cli/generate-docs-nm-settings-nmcli.xml'], + ) +else + settings_docs_source = configure_file( + input: 'generate-docs-nm-settings-nmcli.xml.in', + output: '@BASENAME@', + configuration: configuration_data(), + ) +endif diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c index 447954089a..9d6ada068c 100644 --- a/clients/cli/nmcli.c +++ b/clients/cli/nmcli.c @@ -33,26 +33,48 @@ #define NMCLI_VERSION VERSION #endif -#define DEFAULT_PALETTE_INIT \ - [NM_META_COLOR_CONNECTION_ACTIVATED] = "32", [NM_META_COLOR_CONNECTION_ACTIVATING] = "33", \ - [NM_META_COLOR_CONNECTION_DISCONNECTING] = "31", [NM_META_COLOR_CONNECTION_INVISIBLE] = "2", \ - [NM_META_COLOR_CONNECTION_EXTERNAL] = "32;2", [NM_META_COLOR_CONNECTIVITY_FULL] = "32", \ - [NM_META_COLOR_CONNECTIVITY_LIMITED] = "33", [NM_META_COLOR_CONNECTIVITY_NONE] = "31", \ - [NM_META_COLOR_CONNECTIVITY_PORTAL] = "33", [NM_META_COLOR_DEVICE_ACTIVATED] = "32", \ - [NM_META_COLOR_DEVICE_ACTIVATING] = "33", [NM_META_COLOR_DEVICE_DISCONNECTED] = "31", \ - [NM_META_COLOR_DEVICE_FIRMWARE_MISSING] = "31", [NM_META_COLOR_DEVICE_PLUGIN_MISSING] = "31", \ - [NM_META_COLOR_DEVICE_UNAVAILABLE] = "2", [NM_META_COLOR_DEVICE_DISABLED] = "31", \ - [NM_META_COLOR_DEVICE_EXTERNAL] = "32;2", [NM_META_COLOR_MANAGER_RUNNING] = "32", \ - [NM_META_COLOR_MANAGER_STARTING] = "33", [NM_META_COLOR_MANAGER_STOPPED] = "31", \ - [NM_META_COLOR_PERMISSION_AUTH] = "33", [NM_META_COLOR_PERMISSION_NO] = "31", \ - [NM_META_COLOR_PERMISSION_YES] = "32", [NM_META_COLOR_STATE_ASLEEP] = "31", \ - [NM_META_COLOR_STATE_CONNECTED_GLOBAL] = "32", [NM_META_COLOR_STATE_CONNECTED_LOCAL] = "32", \ - [NM_META_COLOR_STATE_CONNECTED_SITE] = "32", [NM_META_COLOR_STATE_CONNECTING] = "33", \ - [NM_META_COLOR_STATE_DISCONNECTED] = "31", [NM_META_COLOR_STATE_DISCONNECTING] = "33", \ - [NM_META_COLOR_WIFI_SIGNAL_EXCELLENT] = "32", [NM_META_COLOR_WIFI_SIGNAL_FAIR] = "35", \ - [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "33", [NM_META_COLOR_WIFI_SIGNAL_POOR] = "36", \ - [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "2", [NM_META_COLOR_ENABLED] = "32", \ - [NM_META_COLOR_DISABLED] = "31", +#define _NMC_COLOR_PALETTE_INIT() \ + { \ + .ansi_seq = { \ + [NM_META_COLOR_CONNECTION_ACTIVATED] = "32", \ + [NM_META_COLOR_CONNECTION_ACTIVATING] = "33", \ + [NM_META_COLOR_CONNECTION_DISCONNECTING] = "31", \ + [NM_META_COLOR_CONNECTION_INVISIBLE] = "2", \ + [NM_META_COLOR_CONNECTION_EXTERNAL] = "32;2", \ + [NM_META_COLOR_CONNECTIVITY_FULL] = "32", \ + [NM_META_COLOR_CONNECTIVITY_LIMITED] = "33", \ + [NM_META_COLOR_CONNECTIVITY_NONE] = "31", \ + [NM_META_COLOR_CONNECTIVITY_PORTAL] = "33", \ + [NM_META_COLOR_DEVICE_ACTIVATED] = "32", \ + [NM_META_COLOR_DEVICE_ACTIVATING] = "33", \ + [NM_META_COLOR_DEVICE_DISCONNECTED] = "31", \ + [NM_META_COLOR_DEVICE_FIRMWARE_MISSING] = "31", \ + [NM_META_COLOR_DEVICE_PLUGIN_MISSING] = "31", \ + [NM_META_COLOR_DEVICE_UNAVAILABLE] = "2", \ + [NM_META_COLOR_DEVICE_DISABLED] = "31", \ + [NM_META_COLOR_DEVICE_EXTERNAL] = "32;2", \ + [NM_META_COLOR_MANAGER_RUNNING] = "32", \ + [NM_META_COLOR_MANAGER_STARTING] = "33", \ + [NM_META_COLOR_MANAGER_STOPPED] = "31", \ + [NM_META_COLOR_PERMISSION_AUTH] = "33", \ + [NM_META_COLOR_PERMISSION_NO] = "31", \ + [NM_META_COLOR_PERMISSION_YES] = "32", \ + [NM_META_COLOR_STATE_ASLEEP] = "31", \ + [NM_META_COLOR_STATE_CONNECTED_GLOBAL] = "32", \ + [NM_META_COLOR_STATE_CONNECTED_LOCAL] = "32", \ + [NM_META_COLOR_STATE_CONNECTED_SITE] = "32", \ + [NM_META_COLOR_STATE_CONNECTING] = "33", \ + [NM_META_COLOR_STATE_DISCONNECTED] = "31", \ + [NM_META_COLOR_STATE_DISCONNECTING] = "33", \ + [NM_META_COLOR_WIFI_SIGNAL_EXCELLENT] = "32", \ + [NM_META_COLOR_WIFI_SIGNAL_FAIR] = "35", \ + [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "33", \ + [NM_META_COLOR_WIFI_SIGNAL_POOR] = "36", \ + [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "2", \ + [NM_META_COLOR_ENABLED] = "32", \ + [NM_META_COLOR_DISABLED] = "31", \ + }, \ + } static NmCli nm_cli = { .client = NULL, @@ -76,7 +98,7 @@ static NmCli nm_cli = { .complete = FALSE, .nmc_config.show_secrets = FALSE, .nmc_config.in_editor = FALSE, - .nmc_config.palette = {DEFAULT_PALETTE_INIT}, + .nmc_config.palette = _NMC_COLOR_PALETTE_INIT(), .editor_status_line = FALSE, .editor_save_confirmation = TRUE, }; @@ -486,97 +508,101 @@ check_colors(NmcColorOption color_option, char **out_palette_str) return TRUE; } -static const char * -resolve_color_alias(const char *color) -{ - static const struct { - const char *name; - const char *alias; - } aliases[] = { - {"reset", "0"}, {"bold", "1"}, {"white", "1;37"}, - {"halfbright", "2"}, {"underscore", "4"}, {"blink", "5"}, - {"reverse", "7"}, {"black", "30"}, {"red", "31"}, - {"green", "32"}, {"brown", "33"}, {"yellow", "33"}, /* well, yellow */ - {"blue", "34"}, {"magenta", "35"}, {"cyan", "36"}, - {"gray", "37"}, {"darkgray", "90"}, {"lightred", "91"}, - {"lightgreen", "92"}, {"lightblue", "94"}, {"lightmagenta", "95"}, - {"lightcyan", "96"}, {"lightgray", "97"}, - }; - int i; - - /* Shortcut literal sequences. */ - if (g_ascii_isdigit(*color)) - return color; - - for (i = 0; i < G_N_ELEMENTS(aliases); i++) { - if (strcmp(color, aliases[i].name) == 0) - return aliases[i].alias; - } - - return color; -} +static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( + _resolve_color_alias, + const char *, + { nm_assert(name); }, + { return NULL; }, + {"black", "30"}, + {"blink", "5"}, + {"blue", "34"}, + {"bold", "1"}, + {"brown", "33"}, + {"cyan", "36"}, + {"darkgray", "90"}, + {"gray", "37"}, + {"green", "32"}, + {"halfbright", "2"}, + {"lightblue", "94"}, + {"lightcyan", "96"}, + {"lightgray", "97"}, + {"lightgreen", "92"}, + {"lightmagenta", "95"}, + {"lightred", "91"}, + {"magenta", "35"}, + {"red", "31"}, + {"reset", "0"}, + {"reverse", "7"}, + {"underscore", "4"}, + {"white", "1;37"}, + {"yellow", "33" /* well, yellow */}, ); + +static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( + _nm_meta_color_from_name, + NMMetaColor, + { nm_assert(name); }, + { return NM_META_COLOR_NONE; }, + {"connection-activated", NM_META_COLOR_CONNECTION_ACTIVATED}, + {"connection-activating", NM_META_COLOR_CONNECTION_ACTIVATING}, + {"connection-disconnecting", NM_META_COLOR_CONNECTION_DISCONNECTING}, + {"connection-external", NM_META_COLOR_CONNECTION_EXTERNAL}, + {"connection-invisible", NM_META_COLOR_CONNECTION_INVISIBLE}, + {"connection-unknown", NM_META_COLOR_CONNECTION_UNKNOWN}, + {"connectivity-full", NM_META_COLOR_CONNECTIVITY_FULL}, + {"connectivity-limited", NM_META_COLOR_CONNECTIVITY_LIMITED}, + {"connectivity-none", NM_META_COLOR_CONNECTIVITY_NONE}, + {"connectivity-portal", NM_META_COLOR_CONNECTIVITY_PORTAL}, + {"connectivity-unknown", NM_META_COLOR_CONNECTIVITY_UNKNOWN}, + {"device-activated", NM_META_COLOR_DEVICE_ACTIVATED}, + {"device-activating", NM_META_COLOR_DEVICE_ACTIVATING}, + {"device-disabled", NM_META_COLOR_DEVICE_DISABLED}, + {"device-disconnected", NM_META_COLOR_DEVICE_DISCONNECTED}, + {"device-external", NM_META_COLOR_DEVICE_EXTERNAL}, + {"device-firmware-missing", NM_META_COLOR_DEVICE_FIRMWARE_MISSING}, + {"device-plugin-missing", NM_META_COLOR_DEVICE_PLUGIN_MISSING}, + {"device-unavailable", NM_META_COLOR_DEVICE_UNAVAILABLE}, + {"device-unknown", NM_META_COLOR_DEVICE_UNKNOWN}, + {"disabled", NM_META_COLOR_DISABLED}, + {"enabled", NM_META_COLOR_ENABLED}, + {"manager-running", NM_META_COLOR_MANAGER_RUNNING}, + {"manager-starting", NM_META_COLOR_MANAGER_STARTING}, + {"manager-stopped", NM_META_COLOR_MANAGER_STOPPED}, + {"permission-auth", NM_META_COLOR_PERMISSION_AUTH}, + {"permission-no", NM_META_COLOR_PERMISSION_NO}, + {"permission-unknown", NM_META_COLOR_PERMISSION_UNKNOWN}, + {"permission-yes", NM_META_COLOR_PERMISSION_YES}, + {"prompt", NM_META_COLOR_PROMPT}, + {"state-asleep", NM_META_COLOR_STATE_ASLEEP}, + {"state-connected-global", NM_META_COLOR_STATE_CONNECTED_GLOBAL}, + {"state-connected-local", NM_META_COLOR_STATE_CONNECTED_LOCAL}, + {"state-connected-site", NM_META_COLOR_STATE_CONNECTED_SITE}, + {"state-connecting", NM_META_COLOR_STATE_CONNECTING}, + {"state-disconnected", NM_META_COLOR_STATE_DISCONNECTED}, + {"state-disconnecting", NM_META_COLOR_STATE_DISCONNECTING}, + {"state-unknown", NM_META_COLOR_STATE_UNKNOWN}, + {"wifi-signal-excellent", NM_META_COLOR_WIFI_SIGNAL_EXCELLENT}, + {"wifi-signal-fair", NM_META_COLOR_WIFI_SIGNAL_FAIR}, + {"wifi-signal-good", NM_META_COLOR_WIFI_SIGNAL_GOOD}, + {"wifi-signal-poor", NM_META_COLOR_WIFI_SIGNAL_POOR}, + {"wifi-signal-unknown", NM_META_COLOR_WIFI_SIGNAL_UNKNOWN}, ); static gboolean -parse_color_scheme(char * palette_buffer, - const char **palette /* _NM_META_COLOR_NUM elements */, - GError ** error) +parse_color_scheme(char *palette_buffer, NmcColorPalette *out_palette, GError **error) { - char * p = palette_buffer; - const char * name; - const char * color; - const char * tmp_palette[_NM_META_COLOR_NUM] = {DEFAULT_PALETTE_INIT}; - static const char *const map[_NM_META_COLOR_NUM] = { - [NM_META_COLOR_NONE] = NULL, - [NM_META_COLOR_CONNECTION_ACTIVATED] = "connection-activated", - [NM_META_COLOR_CONNECTION_ACTIVATING] = "connection-activating", - [NM_META_COLOR_CONNECTION_DISCONNECTING] = "connection-disconnecting", - [NM_META_COLOR_CONNECTION_INVISIBLE] = "connection-invisible", - [NM_META_COLOR_CONNECTION_EXTERNAL] = "connection-external", - [NM_META_COLOR_CONNECTION_UNKNOWN] = "connection-unknown", - [NM_META_COLOR_CONNECTIVITY_FULL] = "connectivity-full", - [NM_META_COLOR_CONNECTIVITY_LIMITED] = "connectivity-limited", - [NM_META_COLOR_CONNECTIVITY_NONE] = "connectivity-none", - [NM_META_COLOR_CONNECTIVITY_PORTAL] = "connectivity-portal", - [NM_META_COLOR_CONNECTIVITY_UNKNOWN] = "connectivity-unknown", - [NM_META_COLOR_DEVICE_ACTIVATED] = "device-activated", - [NM_META_COLOR_DEVICE_ACTIVATING] = "device-activating", - [NM_META_COLOR_DEVICE_DISCONNECTED] = "device-disconnected", - [NM_META_COLOR_DEVICE_FIRMWARE_MISSING] = "device-firmware-missing", - [NM_META_COLOR_DEVICE_PLUGIN_MISSING] = "device-plugin-missing", - [NM_META_COLOR_DEVICE_UNAVAILABLE] = "device-unavailable", - [NM_META_COLOR_DEVICE_DISABLED] = "device-disabled", - [NM_META_COLOR_DEVICE_EXTERNAL] = "device-external", - [NM_META_COLOR_DEVICE_UNKNOWN] = "device-unknown", - [NM_META_COLOR_MANAGER_RUNNING] = "manager-running", - [NM_META_COLOR_MANAGER_STARTING] = "manager-starting", - [NM_META_COLOR_MANAGER_STOPPED] = "manager-stopped", - [NM_META_COLOR_PERMISSION_AUTH] = "permission-auth", - [NM_META_COLOR_PERMISSION_NO] = "permission-no", - [NM_META_COLOR_PERMISSION_UNKNOWN] = "permission-unknown", - [NM_META_COLOR_PERMISSION_YES] = "permission-yes", - [NM_META_COLOR_PROMPT] = "prompt", - [NM_META_COLOR_STATE_ASLEEP] = "state-asleep", - [NM_META_COLOR_STATE_CONNECTED_GLOBAL] = "state-connected-global", - [NM_META_COLOR_STATE_CONNECTED_LOCAL] = "state-connected-local", - [NM_META_COLOR_STATE_CONNECTED_SITE] = "state-connected-site", - [NM_META_COLOR_STATE_CONNECTING] = "state-connecting", - [NM_META_COLOR_STATE_DISCONNECTED] = "state-disconnected", - [NM_META_COLOR_STATE_DISCONNECTING] = "state-disconnecting", - [NM_META_COLOR_STATE_UNKNOWN] = "state-unknown", - [NM_META_COLOR_WIFI_SIGNAL_EXCELLENT] = "wifi-signal-excellent", - [NM_META_COLOR_WIFI_SIGNAL_FAIR] = "wifi-signal-fair", - [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "wifi-signal-good", - [NM_META_COLOR_WIFI_SIGNAL_POOR] = "wifi-signal-poor", - [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "wifi-signal-unknown", - [NM_META_COLOR_DISABLED] = "disabled", - [NM_META_COLOR_ENABLED] = "enabled", - }; - int i; + char *p = palette_buffer; + + nm_assert(out_palette); + + *out_palette = (NmcColorPalette) _NMC_COLOR_PALETTE_INIT(); /* This reads through the raw color scheme file contents, identifying the * color names and sequences, putting in terminating NULs in place, so that * pointers into the buffer can readily be used as strings in the palette. */ while (1) { + NMMetaColor name_idx; + const char *name; + const char *color; + /* Leading whitespace. */ while (nm_utils_is_separator(*p) || *p == '\n') p++; @@ -638,42 +664,51 @@ parse_color_scheme(char * palette_buffer, p++; } - /* All good, set the palette entry. */ - for (i = NM_META_COLOR_NONE + 1; i < _NM_META_COLOR_NUM; i++) { - if (strcmp(map[i], name) == 0) { - tmp_palette[i] = resolve_color_alias(color); - break; - } - } - if (i == _NM_META_COLOR_NUM) + name_idx = _nm_meta_color_from_name(name); + if (name_idx == NM_META_COLOR_NONE) { g_debug("Ignoring an unrecognized color: '%s'\n", name); + continue; + } + + out_palette->ansi_seq[name_idx] = _resolve_color_alias(color) ?: color; } - memcpy(palette, tmp_palette, sizeof(tmp_palette)); return TRUE; } static void -set_colors(NmcColorOption color_option, - bool * out_use_colors, - char ** out_palette_buffer, - const char ** palette /* _NM_META_COLOR_NUM elements */) +set_colors(NmcColorOption color_option, + bool * out_use_colors, + char ** out_palette_buffer, + NmcColorPalette *out_palette) { gs_free char *palette_str = NULL; gboolean use_colors; + gboolean palette_set = FALSE; + + nm_assert(out_use_colors); + nm_assert(out_palette); + nm_assert(out_palette_buffer && !*out_palette_buffer); use_colors = check_colors(color_option, &palette_str); *out_use_colors = use_colors; + if (use_colors && palette_str) { - GError *error = NULL; + gs_free_error GError *error = NULL; + NmcColorPalette palette; - if (!parse_color_scheme(palette_str, palette, &error)) { + if (!parse_color_scheme(palette_str, &palette, &error)) g_debug("Error parsing color scheme: %s", error->message); - g_error_free(error); - } else + else { *out_palette_buffer = g_steal_pointer(&palette_str); + *out_palette = palette; + palette_set = TRUE; + } } + + if (!palette_set) + *out_palette = (NmcColorPalette) _NMC_COLOR_PALETTE_INIT(); } /*************************************************************************************/ @@ -872,7 +907,7 @@ process_command_line(NmCli *nmc, int argc, char **argv_orig) set_colors(colors, &nmc->nmc_config_mutable.use_colors, &nmc->palette_buffer, - nmc->nmc_config_mutable.palette); + &nmc->nmc_config_mutable.palette); /* Now run the requested command */ nmc_do_cmd(nmc, nmcli_cmds, *argv, argc, argv); diff --git a/clients/cli/nmcli.h b/clients/cli/nmcli.h index 1cd2e2a757..e1c70b841c 100644 --- a/clients/cli/nmcli.h +++ b/clients/cli/nmcli.h @@ -73,6 +73,10 @@ typedef enum { NMC_OF_FLAG_MAIN_HEADER_ONLY = 0x00000008, /* Print main header only */ } NmcOfFlags; +typedef struct { + const char *ansi_seq[_NM_META_COLOR_NUM]; +} NmcColorPalette; + extern const NMMetaType nmc_meta_type_generic_info; typedef struct _NmcOutputField NmcOutputField; @@ -96,8 +100,8 @@ typedef struct _NmcConfig { bool in_editor; /* Whether running the editor - nmcli con edit' */ bool show_secrets; /* Whether to display secrets (both input and output): option '--show-secrets' */ - bool overview; /* Overview mode (hide default values) */ - const char *palette[_NM_META_COLOR_NUM]; /* Color palette */ + bool overview; /* Overview mode (hide default values) */ + NmcColorPalette palette; } NmcConfig; typedef struct { diff --git a/clients/cli/utils.c b/clients/cli/utils.c index 2e7b22ce6f..72ba9c6d86 100644 --- a/clients/cli/utils.c +++ b/clients/cli/utils.c @@ -374,23 +374,21 @@ nmc_terminal_show_progress(const char *str) char * nmc_colorize(const NmcConfig *nmc_config, NMMetaColor color, const char *fmt, ...) { - va_list args; - char * str, *colored; - const char *ansi_seq = NULL; + va_list args; + gs_free char *str = NULL; + const char * ansi_seq = NULL; va_start(args, fmt); str = g_strdup_vprintf(fmt, args); va_end(args); if (nmc_config->use_colors) - ansi_seq = nmc_config->palette[color]; + ansi_seq = nmc_config->palette.ansi_seq[color]; - if (ansi_seq == NULL) - return str; + if (!ansi_seq) + return g_steal_pointer(&str); - colored = g_strdup_printf("\33[%sm%s\33[0m", ansi_seq, str); - g_free(str); - return colored; + return g_strdup_printf("\33[%sm%s\33[0m", ansi_seq, str); } /* diff --git a/clients/common/meson.build b/clients/common/meson.build index cefcfce02d..0e3f0d4f6f 100644 --- a/clients/common/meson.build +++ b/clients/common/meson.build @@ -31,7 +31,7 @@ libnmc_base_dep = declare_dependency( settings_docs = 'settings-docs.h' -if enable_introspection +if enable_docs settings_docs_source = custom_target( settings_docs, input: nm_settings_docs_xml_gir, @@ -41,7 +41,7 @@ if enable_introspection test( 'check-settings-docs', - find_program(join_paths(source_root, 'tools', 'check-settings-docs.sh')), + find_program(join_paths(source_root, 'tools', 'check-compare-generated.sh')), args: [source_root, build_root, 'clients/common/' + settings_docs], ) else diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index cdb3084a07..e4b74751cb 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -2400,13 +2400,9 @@ _nm_meta_setting_bond_add_option(NMSetting * setting, char * p; if (!value || !value[0]) { - if (!nm_setting_bond_remove_option(s_bond, name)) { - nm_utils_error_set(error, - NM_UTILS_ERROR_INVALID_ARGUMENT, - _("failed to unset bond option \"%s\""), - name); - return FALSE; - } + /* This call only fails if name is currently not tracked. It's not an + * error to remove an option that is not set. */ + nm_setting_bond_remove_option(s_bond, name); return TRUE; } @@ -2421,7 +2417,7 @@ _nm_meta_setting_bond_add_option(NMSetting * setting, *p = ','; } - if (!nm_setting_bond_add_option(s_bond, name, value)) { + if (!nm_setting_bond_validate_option(name, value)) { nm_utils_error_set(error, NM_UTILS_ERROR_INVALID_ARGUMENT, _("failed to set bond option \"%s\""), @@ -2429,6 +2425,8 @@ _nm_meta_setting_bond_add_option(NMSetting * setting, return FALSE; } + nm_setting_bond_add_option(s_bond, name, value); + if (nm_streq(name, NM_SETTING_BOND_OPTION_ARP_INTERVAL)) { if (_nm_utils_ascii_str_to_int64(value, 10, 0, G_MAXINT, 0) > 0) _nm_setting_bond_remove_options_miimon(s_bond); @@ -2563,10 +2561,15 @@ static const char *const *_complete_fcn_connection_type(ARGS_COMPLETE_FCN) for (i = 0, j = 0; i < _NM_META_SETTING_TYPE_NUM; i++) { const NMMetaSettingInfoEditor *setting_info = &nm_meta_setting_infos_editor[i]; + GType gtype = setting_info->general->get_setting_gtype(); const char * v; - if (!setting_info->valid_parts) + if (_nm_setting_type_get_base_type_priority(gtype) == NM_SETTING_PRIORITY_INVALID) { + nm_assert(!setting_info->valid_parts); continue; + } + + nm_assert(setting_info->valid_parts); v = setting_info->alias; if (v) { @@ -5636,6 +5639,24 @@ static const NMMetaPropertyInfo *const property_infos_GSM[] = { }; #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, + .property_type = &_pt_gobject_int, + ), + PROPERTY_INFO (NM_SETTING_HOSTNAME_FROM_DHCP, DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DHCP, + .property_type = &_pt_gobject_enum, + ), + PROPERTY_INFO (NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, DESCRIBE_DOC_NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, + .property_type = &_pt_gobject_enum, + ), + PROPERTY_INFO (NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT, DESCRIBE_DOC_NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT, + .property_type = &_pt_gobject_enum, + ), + NULL +}; + +#undef _CURRENT_NM_META_SETTING_TYPE #define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_INFINIBAND static const NMMetaPropertyInfo *const property_infos_INFINIBAND[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_INFINIBAND_MAC_ADDRESS, @@ -7064,6 +7085,19 @@ static const NMMetaPropertyInfo *const property_infos_TUN[] = { }; #undef _CURRENT_NM_META_SETTING_TYPE +#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_VETH +static const NMMetaPropertyInfo *const property_infos_VETH[] = { + PROPERTY_INFO_WITH_DESC (NM_SETTING_VETH_PEER, + .is_cli_option = TRUE, + .property_alias = "peer", + .inf_flags = NM_META_PROPERTY_INF_FLAG_REQD, + .prompt = N_("veth peer"), + .property_type = &_pt_gobject_string, + ), + NULL +}; + +#undef _CURRENT_NM_META_SETTING_TYPE #define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_VLAN static const NMMetaPropertyInfo *const property_infos_VLAN[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_VLAN_PARENT, @@ -7202,7 +7236,6 @@ static const NMMetaPropertyInfo *const property_infos_VXLAN[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_VXLAN_REMOTE, .is_cli_option = TRUE, .property_alias = "remote", - .inf_flags = NM_META_PROPERTY_INF_FLAG_REQD, .prompt = N_("Remote"), .property_type = &_pt_gobject_string, ), @@ -7939,6 +7972,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN) #define SETTING_PRETTY_NAME_ETHTOOL N_("Ethtool settings") #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_INFINIBAND N_("InfiniBand connection") #define SETTING_PRETTY_NAME_IP4_CONFIG N_("IPv4 protocol") #define SETTING_PRETTY_NAME_IP6_CONFIG N_("IPv6 protocol") @@ -7949,6 +7983,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN) #define SETTING_PRETTY_NAME_OLPC_MESH N_("OLPC Mesh connection") #define SETTING_PRETTY_NAME_OVS_BRIDGE N_("Open vSwitch bridge settings") #define SETTING_PRETTY_NAME_OVS_DPDK N_("Open vSwitch DPDK interface settings") +#define SETTING_PRETTY_NAME_OVS_EXTERNAL_IDS N_("OVS External IDs") #define SETTING_PRETTY_NAME_OVS_INTERFACE N_("Open vSwitch interface settings") #define SETTING_PRETTY_NAME_OVS_PATCH N_("Open vSwitch patch interface settings") #define SETTING_PRETTY_NAME_OVS_PORT N_("Open vSwitch port settings") @@ -7962,6 +7997,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN) #define SETTING_PRETTY_NAME_TEAM_PORT N_("Team port") #define SETTING_PRETTY_NAME_TUN N_("Tun device") #define SETTING_PRETTY_NAME_USER N_("User settings") +#define SETTING_PRETTY_NAME_VETH N_("Veth connection") #define SETTING_PRETTY_NAME_VLAN N_("VLAN connection") #define SETTING_PRETTY_NAME_VPN N_("VPN connection") #define SETTING_PRETTY_NAME_VRF N_("VRF connection") @@ -8075,6 +8111,7 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { ), .setting_init_fcn = _setting_init_fcn_gsm, ), + SETTING_INFO (HOSTNAME), SETTING_INFO (INFINIBAND, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), @@ -8131,7 +8168,13 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { NM_META_SETTING_VALID_PART_ITEM (WIRED, FALSE), ), ), - SETTING_INFO (OVS_DPDK), + SETTING_INFO (OVS_DPDK, + .valid_parts = NM_META_SETTING_VALID_PARTS ( + NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), + NM_META_SETTING_VALID_PART_ITEM (OVS_DPDK, TRUE), + ), + ), + SETTING_INFO_EMPTY (OVS_EXTERNAL_IDS), SETTING_INFO (OVS_INTERFACE, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), @@ -8144,7 +8187,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE), ), ), - SETTING_INFO (OVS_PATCH), + SETTING_INFO (OVS_PATCH, + .valid_parts = NM_META_SETTING_VALID_PARTS ( + NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), + NM_META_SETTING_VALID_PART_ITEM (OVS_PATCH, TRUE), + ), + ), SETTING_INFO (OVS_PORT, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), @@ -8190,6 +8238,14 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { .setting_init_fcn = _setting_init_fcn_tun, ), SETTING_INFO_EMPTY (USER), + SETTING_INFO (VETH, + .valid_parts = NM_META_SETTING_VALID_PARTS ( + NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), + NM_META_SETTING_VALID_PART_ITEM (VETH, TRUE), + NM_META_SETTING_VALID_PART_ITEM (WIRED, FALSE), + NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE), + ), + ), SETTING_INFO (VLAN, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), @@ -8285,6 +8341,7 @@ static const NMMetaSettingValidPartItem *const valid_settings_noslave[] = { NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE), NM_META_SETTING_VALID_PART_ITEM(IP4_CONFIG, FALSE), NM_META_SETTING_VALID_PART_ITEM(IP6_CONFIG, FALSE), + NM_META_SETTING_VALID_PART_ITEM(HOSTNAME, FALSE), NM_META_SETTING_VALID_PART_ITEM(TC_CONFIG, FALSE), NM_META_SETTING_VALID_PART_ITEM(PROXY, FALSE), NULL, diff --git a/clients/common/settings-docs.h.in b/clients/common/settings-docs.h.in index 58fc92e135..9e42d99d6e 100644 --- a/clients/common/settings-docs.h.in +++ b/clients/common/settings-docs.h.in @@ -203,6 +203,10 @@ #define DESCRIBE_DOC_NM_SETTING_GSM_SIM_ID N_("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.") #define DESCRIBE_DOC_NM_SETTING_GSM_SIM_OPERATOR_ID N_("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.") #define DESCRIBE_DOC_NM_SETTING_GSM_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_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_TRUE (1).") +#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_INFINIBAND_MAC_ADDRESS N_("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).") #define DESCRIBE_DOC_NM_SETTING_INFINIBAND_MTU N_("If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.") #define DESCRIBE_DOC_NM_SETTING_INFINIBAND_P_KEY N_("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 is set if it is a \"full membership\" P_Key.") @@ -294,6 +298,7 @@ #define DESCRIBE_DOC_NM_SETTING_OVS_BRIDGE_RSTP_ENABLE N_("Enable or disable RSTP.") #define DESCRIBE_DOC_NM_SETTING_OVS_BRIDGE_STP_ENABLE N_("Enable or disable STP.") #define DESCRIBE_DOC_NM_SETTING_OVS_DPDK_DEVARGS N_("Open vSwitch DPDK device arguments.") +#define DESCRIBE_DOC_NM_SETTING_OVS_EXTERNAL_IDS_DATA N_("A dictionary of key/value pairs with exernal-ids for OVS.") #define DESCRIBE_DOC_NM_SETTING_OVS_INTERFACE_TYPE N_("The interface type. Either \"internal\", \"system\", \"patch\", \"dpdk\", or empty.") #define DESCRIBE_DOC_NM_SETTING_OVS_PATCH_PEER N_("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.") #define DESCRIBE_DOC_NM_SETTING_OVS_PORT_BOND_DOWNDELAY N_("The time port must be inactive in order to be considered down.") @@ -369,6 +374,7 @@ #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_VETH_PEER N_("This property specifies the peer interface name of the veth. This property is mandatory.") #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_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.") diff --git a/clients/common/tests/test-clients-common.c b/clients/common/tests/test-clients-common.c index 8a59d4e288..d4c53d24c3 100644 --- a/clients/common/tests/test-clients-common.c +++ b/clients/common/tests/test-clients-common.c @@ -53,6 +53,9 @@ test_client_meta_check(void) for (m = 0; m < _NM_META_SETTING_TYPE_NUM; m++) { const NMMetaSettingInfoEditor *info = &nm_meta_setting_infos_editor[m]; + GType gtype; + NMSettingPriority base_priority; + gboolean is_base_type; g_assert(info); g_assert(info->meta_type == &nm_meta_type_setting_info_editor); @@ -97,6 +100,11 @@ test_client_meta_check(void) } else g_assert(!info->properties); + gtype = info->general->get_setting_gtype(); + base_priority = _nm_setting_type_get_base_type_priority(gtype); + is_base_type = (base_priority != NM_SETTING_PRIORITY_INVALID); + g_assert((!!info->valid_parts) == is_base_type); + if (info->valid_parts) { gsize i, l; gs_unref_hashtable GHashTable *dup = g_hash_table_new(nm_direct_hash, NULL); diff --git a/clients/tests/test-client.check-on-disk/test_003.expected b/clients/tests/test-client.check-on-disk/test_003.expected index 0d471da59a..733c4faba7 100644 --- a/clients/tests/test-client.check-on-disk/test_003.expected +++ b/clients/tests/test-client.check-on-disk/test_003.expected @@ -716,12 +716,12 @@ stdout: 51 bytes GENERAL.STATE: aktywowano <<< -size: 5008 +size: 5010 location: clients/tests/test-client.py:test_003()/29 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 4878 bytes +stdout: 4880 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -818,7 +818,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -830,12 +830,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5040 +size: 5042 location: clients/tests/test-client.py:test_003()/30 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 4900 bytes +stdout: 4902 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -932,7 +932,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -952,22 +952,22 @@ returncode: 0 stdout: 1272 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 +eth0 ethernet connected unknown unknown /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 eth1 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/2 -- -- -- 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: 1420 +size: 1421 location: clients/tests/test-client.py:test_003()/32 cmd: $NMCLI -f ALL dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1277 bytes +stdout: 1278 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 +eth0 ethernet poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 eth1 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/2 -- -- -- wlan0 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 -- -- -- wlan1 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/4 -- -- -- @@ -1012,13 +1012,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -1036,7 +1036,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -1065,12 +1065,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3782 +size: 3783 location: clients/tests/test-client.py:test_003()/36 cmd: $NMCLI -f ALL dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -1083,13 +1083,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -1107,7 +1107,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -1136,12 +1136,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2388 +size: 2390 location: clients/tests/test-client.py:test_003()/37 cmd: $NMCLI -f ALL -t dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -1154,13 +1154,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -1178,7 +1178,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -1207,12 +1207,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2398 +size: 2400 location: clients/tests/test-client.py:test_003()/38 cmd: $NMCLI -f ALL -t dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -1225,13 +1225,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -1249,7 +1249,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -1644,12 +1644,12 @@ GENERAL.STATE: aktywowano GENERAL.STATE: aktywowano <<< -size: 5716 +size: 5720 location: clients/tests/test-client.py:test_003()/54 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5586 bytes +stdout: 5590 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1746,7 +1746,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -1760,7 +1760,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -1772,12 +1772,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5752 +size: 5756 location: clients/tests/test-client.py:test_003()/55 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5612 bytes +stdout: 5616 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -1874,7 +1874,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -1888,7 +1888,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -1908,23 +1908,23 @@ returncode: 0 stdout: 1272 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 -eth1 ethernet unavailable 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 +eth1 ethernet connected unknown unknown /org/freedesktop/NetworkManager/Devices/2 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/2 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: 1420 +size: 1422 location: clients/tests/test-client.py:test_003()/57 cmd: $NMCLI -f ALL dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1277 bytes +stdout: 1279 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 -eth1 ethernet niedostÄ™pne 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 +eth1 ethernet poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/2 ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/2 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 -- -- -- @@ -1968,13 +1968,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -1992,7 +1992,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2021,12 +2021,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3782 +size: 3783 location: clients/tests/test-client.py:test_003()/61 cmd: $NMCLI -f ALL dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -2039,13 +2039,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2063,7 +2063,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2092,12 +2092,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2388 +size: 2390 location: clients/tests/test-client.py:test_003()/62 cmd: $NMCLI -f ALL -t dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -2110,13 +2110,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -2134,7 +2134,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2163,12 +2163,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2398 +size: 2400 location: clients/tests/test-client.py:test_003()/63 cmd: $NMCLI -f ALL -t dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -2181,13 +2181,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -2205,7 +2205,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2292,12 +2292,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 5719 +size: 5723 location: clients/tests/test-client.py:test_003()/68 cmd: $NMCLI con s ethernet lang: C returncode: 0 -stdout: 5589 bytes +stdout: 5593 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2394,7 +2394,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -2408,7 +2408,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -2420,12 +2420,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5756 +size: 5760 location: clients/tests/test-client.py:test_003()/69 cmd: $NMCLI con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5616 bytes +stdout: 5620 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2522,7 +2522,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -2536,7 +2536,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -2548,12 +2548,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5051 +size: 5053 location: clients/tests/test-client.py:test_003()/70 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 4881 bytes +stdout: 4883 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2650,7 +2650,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -2662,12 +2662,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5084 +size: 5086 location: clients/tests/test-client.py:test_003()/71 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4904 bytes +stdout: 4906 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -2764,7 +2764,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -2794,13 +2794,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2818,7 +2818,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2847,12 +2847,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3782 +size: 3783 location: clients/tests/test-client.py:test_003()/73 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -2865,13 +2865,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2889,7 +2889,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -2976,12 +2976,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 5731 +size: 5735 location: clients/tests/test-client.py:test_003()/78 cmd: $NMCLI --color yes con s ethernet lang: C returncode: 0 -stdout: 5589 bytes +stdout: 5593 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3078,7 +3078,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -3092,7 +3092,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -3104,12 +3104,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5768 +size: 5772 location: clients/tests/test-client.py:test_003()/79 cmd: $NMCLI --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5616 bytes +stdout: 5620 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3206,7 +3206,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -3220,7 +3220,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -3232,12 +3232,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5063 +size: 5065 location: clients/tests/test-client.py:test_003()/80 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 4881 bytes +stdout: 4883 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3334,7 +3334,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -3346,12 +3346,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5096 +size: 5098 location: clients/tests/test-client.py:test_003()/81 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4904 bytes +stdout: 4906 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -3448,7 +3448,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -3478,13 +3478,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -3502,7 +3502,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -3531,12 +3531,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3794 +size: 3795 location: clients/tests/test-client.py:test_003()/83 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -3549,13 +3549,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -3573,7 +3573,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -3676,12 +3676,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6973 +size: 6977 location: clients/tests/test-client.py:test_003()/88 cmd: $NMCLI --pretty con s ethernet lang: C returncode: 0 -stdout: 6834 bytes +stdout: 6838 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -3789,7 +3789,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -3807,7 +3807,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -3820,12 +3820,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7029 +size: 7033 location: clients/tests/test-client.py:test_003()/89 cmd: $NMCLI --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6880 bytes +stdout: 6884 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -3933,7 +3933,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -3951,7 +3951,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -3964,12 +3964,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 5992 +size: 5994 location: clients/tests/test-client.py:test_003()/90 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5813 bytes +stdout: 5815 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4077,7 +4077,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4090,12 +4090,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6037 +size: 6039 location: clients/tests/test-client.py:test_003()/91 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5850 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -4203,7 +4203,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4237,13 +4237,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -4264,7 +4264,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -4299,12 +4299,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4728 +size: 4729 location: clients/tests/test-client.py:test_003()/93 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4573 bytes +stdout: 4574 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -4320,13 +4320,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -4347,7 +4347,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -4456,12 +4456,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL gsm UUID-con-xx1-REPLACED-REPLACED-REPLA ethernet <<< -size: 6985 +size: 6989 location: clients/tests/test-client.py:test_003()/98 cmd: $NMCLI --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 6834 bytes +stdout: 6838 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4569,7 +4569,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4587,7 +4587,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4600,12 +4600,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7041 +size: 7045 location: clients/tests/test-client.py:test_003()/99 cmd: $NMCLI --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6880 bytes +stdout: 6884 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -4713,7 +4713,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4731,7 +4731,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4744,12 +4744,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6005 +size: 6007 location: clients/tests/test-client.py:test_003()/100 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5813 bytes +stdout: 5815 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -4857,7 +4857,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4870,12 +4870,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6050 +size: 6052 location: clients/tests/test-client.py:test_003()/101 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5850 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -4983,7 +4983,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -5017,13 +5017,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5044,7 +5044,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -5079,12 +5079,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4741 +size: 4742 location: clients/tests/test-client.py:test_003()/103 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4573 bytes +stdout: 4574 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -5100,13 +5100,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5127,7 +5127,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -5216,12 +5216,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3062 +size: 3070 location: clients/tests/test-client.py:test_003()/108 cmd: $NMCLI --terse con s ethernet lang: C returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5318,7 +5318,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5332,7 +5332,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5344,12 +5344,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3072 +size: 3080 location: clients/tests/test-client.py:test_003()/109 cmd: $NMCLI --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5446,7 +5446,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5460,7 +5460,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5472,12 +5472,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2716 +size: 2720 location: clients/tests/test-client.py:test_003()/110 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5574,7 +5574,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5586,12 +5586,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2726 +size: 2730 location: clients/tests/test-client.py:test_003()/111 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5688,7 +5688,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -5700,12 +5700,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2394 +size: 2396 location: clients/tests/test-client.py:test_003()/112 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -5718,13 +5718,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -5742,7 +5742,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -5771,12 +5771,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2404 +size: 2406 location: clients/tests/test-client.py:test_003()/113 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -5789,13 +5789,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -5813,7 +5813,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -5896,12 +5896,12 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 3074 +size: 3082 location: clients/tests/test-client.py:test_003()/118 cmd: $NMCLI --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -5998,7 +5998,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6012,7 +6012,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6024,12 +6024,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3084 +size: 3092 location: clients/tests/test-client.py:test_003()/119 cmd: $NMCLI --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6126,7 +6126,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6140,7 +6140,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6152,12 +6152,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2728 +size: 2732 location: clients/tests/test-client.py:test_003()/120 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6254,7 +6254,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6266,12 +6266,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2738 +size: 2742 location: clients/tests/test-client.py:test_003()/121 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -6368,7 +6368,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -6380,12 +6380,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2406 +size: 2408 location: clients/tests/test-client.py:test_003()/122 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -6398,13 +6398,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -6422,7 +6422,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -6451,12 +6451,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2416 +size: 2418 location: clients/tests/test-client.py:test_003()/123 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -6469,13 +6469,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -6493,7 +6493,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -6603,11 +6603,11 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6634,11 +6634,11 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6665,7 +6665,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6692,19 +6692,19 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 3148 +size: 3146 location: clients/tests/test-client.py:test_003()/132 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 -stdout: 2996 bytes +stdout: 2994 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -6713,7 +6713,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -6731,15 +6731,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3179 +size: 3176 location: clients/tests/test-client.py:test_003()/133 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3017 bytes +stdout: 3014 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -6747,8 +6747,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -6847,11 +6847,11 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6878,11 +6878,11 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6909,7 +6909,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -6936,19 +6936,19 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 3160 +size: 3158 location: clients/tests/test-client.py:test_003()/142 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2996 bytes +stdout: 2994 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -6957,7 +6957,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -6975,15 +6975,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3191 +size: 3188 location: clients/tests/test-client.py:test_003()/143 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3017 bytes +stdout: 3014 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -6991,8 +6991,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -7119,7 +7119,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- ====================================================================== @@ -7127,7 +7127,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- acti ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7166,7 +7166,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- =========================================================================== @@ -7174,7 +7174,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- akty =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7213,7 +7213,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7252,23 +7252,23 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 4736 +size: 4733 location: clients/tests/test-client.py:test_003()/152 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4575 bytes +stdout: 4572 bytes >>> ========================= Device details (eth0) ========================= -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -7280,7 +7280,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -7303,19 +7303,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 4804 +size: 4799 location: clients/tests/test-client.py:test_003()/153 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4633 bytes +stdout: 4628 bytes >>> ================================== Informacje o urzÄ…dzeniu (eth0) ================================== -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -7325,9 +7325,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -7459,7 +7459,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 activated no no -- no /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- ====================================================================== @@ -7467,7 +7467,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- acti ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7506,7 +7506,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 eth1 aktywowano nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- =========================================================================== @@ -7514,7 +7514,7 @@ GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth1 -- akty =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7553,7 +7553,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -7592,23 +7592,23 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 4748 +size: 4745 location: clients/tests/test-client.py:test_003()/162 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4575 bytes +stdout: 4572 bytes >>> ========================= Device details (eth0) ========================= -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -7620,7 +7620,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -7643,19 +7643,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 4816 +size: 4811 location: clients/tests/test-client.py:test_003()/163 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4633 bytes +stdout: 4628 bytes >>> ================================== Informacje o urzÄ…dzeniu (eth0) ================================== -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -7665,9 +7665,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -7744,81 +7744,81 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 845 +size: 853 location: clients/tests/test-client.py:test_003()/168 cmd: $NMCLI --mode tabular --terse con s ethernet lang: C returncode: 0 -stdout: 692 bytes +stdout: 700 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1::activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 855 +size: 863 location: clients/tests/test-client.py:test_003()/169 cmd: $NMCLI --mode tabular --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 692 bytes +stdout: 700 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1::activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 697 +size: 701 location: clients/tests/test-client.py:test_003()/170 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 504 bytes +stdout: 508 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 707 +size: 711 location: clients/tests/test-client.py:test_003()/171 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 504 bytes +stdout: 508 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 1441 +size: 1443 location: clients/tests/test-client.py:test_003()/172 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 1281 bytes +stdout: 1283 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -7826,17 +7826,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 1451 +size: 1453 location: clients/tests/test-client.py:test_003()/173 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1281 bytes +stdout: 1283 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -7898,81 +7898,81 @@ UUID-con-gsm1-REPLACED-REPLACED-REPL:gsm UUID-con-xx1-REPLACED-REPLACED-REPLA:802-3-ethernet <<< -size: 857 +size: 865 location: clients/tests/test-client.py:test_003()/178 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 692 bytes +stdout: 700 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1::activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 867 +size: 875 location: clients/tests/test-client.py:test_003()/179 cmd: $NMCLI --mode tabular --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 692 bytes +stdout: 700 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1::activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth1:eth1:activated:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/4:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 709 +size: 713 location: clients/tests/test-client.py:test_003()/180 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 504 bytes +stdout: 508 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 719 +size: 723 location: clients/tests/test-client.py:test_003()/181 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 504 bytes +stdout: 508 bytes >>> connection:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL::802-3-ethernet::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 802-3-ethernet::0::no:::::auto::::default: ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: proxy:none:no:: -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 1453 +size: 1455 location: clients/tests/test-client.py:test_003()/182 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 1281 bytes +stdout: 1283 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -7980,17 +7980,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 1463 +size: 1465 location: clients/tests/test-client.py:test_003()/183 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1281 bytes +stdout: 1283 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -8200,12 +8200,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 5737 +size: 5741 location: clients/tests/test-client.py:test_003()/188 cmd: $NMCLI --mode multiline con s ethernet lang: C returncode: 0 -stdout: 5589 bytes +stdout: 5593 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -8302,7 +8302,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -8316,7 +8316,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -8328,12 +8328,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5774 +size: 5778 location: clients/tests/test-client.py:test_003()/189 cmd: $NMCLI --mode multiline con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5616 bytes +stdout: 5620 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -8430,7 +8430,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -8444,7 +8444,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -8456,12 +8456,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5069 +size: 5071 location: clients/tests/test-client.py:test_003()/190 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 4881 bytes +stdout: 4883 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -8558,7 +8558,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -8570,12 +8570,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5102 +size: 5104 location: clients/tests/test-client.py:test_003()/191 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4904 bytes +stdout: 4906 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -8672,7 +8672,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -8702,13 +8702,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -8726,7 +8726,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -8755,12 +8755,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3800 +size: 3801 location: clients/tests/test-client.py:test_003()/193 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -8773,13 +8773,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -8797,7 +8797,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -9028,12 +9028,12 @@ UUID: UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE: ethernet <<< -size: 5749 +size: 5753 location: clients/tests/test-client.py:test_003()/198 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: C returncode: 0 -stdout: 5589 bytes +stdout: 5593 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9130,7 +9130,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -9144,7 +9144,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -9156,12 +9156,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5786 +size: 5790 location: clients/tests/test-client.py:test_003()/199 cmd: $NMCLI --mode multiline --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 5616 bytes +stdout: 5620 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9258,7 +9258,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -9272,7 +9272,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -9284,12 +9284,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5081 +size: 5083 location: clients/tests/test-client.py:test_003()/200 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 4881 bytes +stdout: 4883 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9386,7 +9386,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -9398,12 +9398,12 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 5114 +size: 5116 location: clients/tests/test-client.py:test_003()/201 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4904 bytes +stdout: 4906 bytes >>> connection.id: ethernet connection.uuid: UUID-ethernet-REPLACED-REPLACED-REPL @@ -9500,7 +9500,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -9530,13 +9530,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -9554,7 +9554,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -9583,12 +9583,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 3812 +size: 3813 location: clients/tests/test-client.py:test_003()/203 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3636 bytes +stdout: 3637 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -9601,13 +9601,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9625,7 +9625,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -9886,12 +9886,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 6991 +size: 6995 location: clients/tests/test-client.py:test_003()/208 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: C returncode: 0 -stdout: 6834 bytes +stdout: 6838 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -9999,7 +9999,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -10017,7 +10017,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -10030,12 +10030,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7047 +size: 7051 location: clients/tests/test-client.py:test_003()/209 cmd: $NMCLI --mode multiline --pretty con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6880 bytes +stdout: 6884 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -10143,7 +10143,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -10161,7 +10161,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -10174,12 +10174,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6010 +size: 6012 location: clients/tests/test-client.py:test_003()/210 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5813 bytes +stdout: 5815 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -10287,7 +10287,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -10300,12 +10300,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6055 +size: 6057 location: clients/tests/test-client.py:test_003()/211 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5850 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -10413,7 +10413,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -10447,13 +10447,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -10474,7 +10474,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -10509,12 +10509,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4746 +size: 4747 location: clients/tests/test-client.py:test_003()/213 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4573 bytes +stdout: 4574 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -10530,13 +10530,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -10557,7 +10557,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -10824,12 +10824,12 @@ TYPE: ethernet ------------------------------------------------------------------------------- <<< -size: 7003 +size: 7007 location: clients/tests/test-client.py:test_003()/218 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: C returncode: 0 -stdout: 6834 bytes +stdout: 6838 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -10937,7 +10937,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -10955,7 +10955,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -10968,12 +10968,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 7059 +size: 7063 location: clients/tests/test-client.py:test_003()/219 cmd: $NMCLI --mode multiline --pretty --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 6880 bytes +stdout: 6884 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -11081,7 +11081,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth1 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11099,7 +11099,7 @@ GENERAL.MASTER-PATH: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11112,12 +11112,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6022 +size: 6024 location: clients/tests/test-client.py:test_003()/220 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 5813 bytes +stdout: 5815 bytes >>> =============================================================================== Connection profile details (ethernet) @@ -11225,7 +11225,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -11238,12 +11238,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 6067 +size: 6069 location: clients/tests/test-client.py:test_003()/221 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5848 bytes +stdout: 5850 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (ethernet) @@ -11351,7 +11351,7 @@ proxy.pac-script: -- GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11385,13 +11385,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -11412,7 +11412,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -11447,12 +11447,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: UUID-ethernet-REPLACED-REPLACED-REPL | e ------------------------------------------------------------------------------- <<< -size: 4758 +size: 4759 location: clients/tests/test-client.py:test_003()/223 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4573 bytes +stdout: 4574 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -11468,13 +11468,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -11495,7 +11495,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -11732,12 +11732,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3079 +size: 3087 location: clients/tests/test-client.py:test_003()/228 cmd: $NMCLI --mode multiline --terse con s ethernet lang: C returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11834,7 +11834,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -11848,7 +11848,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -11860,12 +11860,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3089 +size: 3097 location: clients/tests/test-client.py:test_003()/229 cmd: $NMCLI --mode multiline --terse con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -11962,7 +11962,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -11976,7 +11976,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -11988,12 +11988,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2733 +size: 2737 location: clients/tests/test-client.py:test_003()/230 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12090,7 +12090,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12102,12 +12102,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2743 +size: 2747 location: clients/tests/test-client.py:test_003()/231 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12204,7 +12204,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12216,12 +12216,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2411 +size: 2413 location: clients/tests/test-client.py:test_003()/232 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -12234,13 +12234,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -12258,7 +12258,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -12287,12 +12287,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2421 +size: 2423 location: clients/tests/test-client.py:test_003()/233 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -12305,13 +12305,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -12329,7 +12329,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -12560,12 +12560,12 @@ UUID:UUID-con-xx1-REPLACED-REPLACED-REPLA TYPE:802-3-ethernet <<< -size: 3091 +size: 3099 location: clients/tests/test-client.py:test_003()/238 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: C returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12662,7 +12662,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12676,7 +12676,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12688,12 +12688,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 3101 +size: 3109 location: clients/tests/test-client.py:test_003()/239 cmd: $NMCLI --mode multiline --terse --color yes con s ethernet lang: pl_PL.UTF-8 returncode: 0 -stdout: 2923 bytes +stdout: 2931 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12790,7 +12790,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth1 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12804,7 +12804,7 @@ GENERAL.MASTER-PATH: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12816,12 +12816,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2745 +size: 2749 location: clients/tests/test-client.py:test_003()/240 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -12918,7 +12918,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -12930,12 +12930,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2755 +size: 2759 location: clients/tests/test-client.py:test_003()/241 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2537 bytes +stdout: 2541 bytes >>> connection.id:ethernet connection.uuid:UUID-ethernet-REPLACED-REPLACED-REPL @@ -13032,7 +13032,7 @@ proxy.pac-script: GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -13044,12 +13044,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2423 +size: 2425 location: clients/tests/test-client.py:test_003()/242 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -13062,13 +13062,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -13086,7 +13086,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13115,12 +13115,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet <<< -size: 2433 +size: 2435 location: clients/tests/test-client.py:test_003()/243 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2249 bytes +stdout: 2251 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -13133,13 +13133,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -13157,7 +13157,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13262,17 +13262,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 880 +size: 882 location: clients/tests/test-client.py:test_003()/250 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 712 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -13284,17 +13284,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 895 +size: 897 location: clients/tests/test-client.py:test_003()/251 cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 717 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -13324,13 +13324,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13348,7 +13348,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13377,12 +13377,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3805 +size: 3806 location: clients/tests/test-client.py:test_003()/253 cmd: $NMCLI -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3658 bytes +stdout: 3659 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -13395,13 +13395,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13419,7 +13419,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13524,17 +13524,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 892 +size: 894 location: clients/tests/test-client.py:test_003()/260 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 712 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -13546,17 +13546,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 907 +size: 909 location: clients/tests/test-client.py:test_003()/261 cmd: $NMCLI --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 717 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -13586,13 +13586,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13610,7 +13610,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13639,12 +13639,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3817 +size: 3818 location: clients/tests/test-client.py:test_003()/263 cmd: $NMCLI --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3658 bytes +stdout: 3659 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -13657,13 +13657,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13681,7 +13681,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -13802,12 +13802,12 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 1416 +size: 1418 location: clients/tests/test-client.py:test_003()/270 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 1236 bytes +stdout: 1238 bytes >>> =============================================================================== Connection profile details @@ -13818,7 +13818,7 @@ stdout: 1236 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -13831,12 +13831,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1443 +size: 1445 location: clients/tests/test-client.py:test_003()/271 cmd: $NMCLI --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1253 bytes +stdout: 1255 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia @@ -13847,7 +13847,7 @@ stdout: 1253 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -13881,13 +13881,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13908,7 +13908,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -13943,12 +13943,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4751 +size: 4752 location: clients/tests/test-client.py:test_003()/273 cmd: $NMCLI --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4595 bytes +stdout: 4596 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -13964,13 +13964,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13991,7 +13991,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -14118,12 +14118,12 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 1428 +size: 1430 location: clients/tests/test-client.py:test_003()/280 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 1236 bytes +stdout: 1238 bytes >>> =============================================================================== Connection profile details @@ -14134,7 +14134,7 @@ stdout: 1236 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -14147,12 +14147,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1455 +size: 1457 location: clients/tests/test-client.py:test_003()/281 cmd: $NMCLI --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1253 bytes +stdout: 1255 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia @@ -14163,7 +14163,7 @@ stdout: 1253 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -14197,13 +14197,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -14224,7 +14224,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -14259,12 +14259,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4763 +size: 4764 location: clients/tests/test-client.py:test_003()/283 cmd: $NMCLI --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4595 bytes +stdout: 4596 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -14280,13 +14280,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -14307,7 +14307,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -14414,17 +14414,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 566 +size: 570 location: clients/tests/test-client.py:test_003()/290 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -14436,17 +14436,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 576 +size: 580 location: clients/tests/test-client.py:test_003()/291 cmd: $NMCLI --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -14458,12 +14458,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2414 +size: 2416 location: clients/tests/test-client.py:test_003()/292 cmd: $NMCLI --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -14476,13 +14476,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -14500,7 +14500,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -14529,12 +14529,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 2424 +size: 2426 location: clients/tests/test-client.py:test_003()/293 cmd: $NMCLI --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -14547,13 +14547,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -14571,7 +14571,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -14672,17 +14672,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 578 +size: 582 location: clients/tests/test-client.py:test_003()/300 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -14694,17 +14694,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 588 +size: 592 location: clients/tests/test-client.py:test_003()/301 cmd: $NMCLI --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -14716,12 +14716,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2426 +size: 2428 location: clients/tests/test-client.py:test_003()/302 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -14734,13 +14734,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -14758,7 +14758,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -14787,12 +14787,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 2436 +size: 2438 location: clients/tests/test-client.py:test_003()/303 cmd: $NMCLI --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -14805,13 +14805,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -14829,7 +14829,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -14942,7 +14942,7 @@ returncode: 0 stdout: 507 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -14954,19 +14954,19 @@ returncode: 0 stdout: 511 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 3188 +size: 3186 location: clients/tests/test-client.py:test_003()/312 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: C returncode: 0 -stdout: 3036 bytes +stdout: 3034 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -14975,7 +14975,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -14993,15 +14993,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3223 +size: 3220 location: clients/tests/test-client.py:test_003()/313 cmd: $NMCLI --mode tabular -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3061 bytes +stdout: 3058 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -15009,8 +15009,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -15112,7 +15112,7 @@ returncode: 0 stdout: 507 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -15124,19 +15124,19 @@ returncode: 0 stdout: 511 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 3200 +size: 3198 location: clients/tests/test-client.py:test_003()/322 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 3036 bytes +stdout: 3034 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -15145,7 +15145,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -15163,15 +15163,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3235 +size: 3232 location: clients/tests/test-client.py:test_003()/323 cmd: $NMCLI --mode tabular --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3061 bytes +stdout: 3058 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -15179,8 +15179,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.6.238/29 -- dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64 192.168.213.113 sear4.foo4.bar 192.168.156.115 | 192.168.8.33 @@ -15305,7 +15305,7 @@ stdout: 1063 bytes ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -15324,23 +15324,23 @@ stdout: 1098 bytes =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 4796 +size: 4793 location: clients/tests/test-client.py:test_003()/332 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: C returncode: 0 -stdout: 4635 bytes +stdout: 4632 bytes >>> ========================= Device details (eth0) ========================= -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -15352,7 +15352,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -15375,19 +15375,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 4870 +size: 4865 location: clients/tests/test-client.py:test_003()/333 cmd: $NMCLI --mode tabular --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4699 bytes +stdout: 4694 bytes >>> ================================== Informacje o urzÄ…dzeniu (eth0) ================================== -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -15397,9 +15397,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -15529,7 +15529,7 @@ stdout: 1063 bytes ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 deactivating no no -- no /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< @@ -15548,23 +15548,23 @@ stdout: 1098 bytes =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 -- dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- +GENERAL ethernet UUID-ethernet-REPLACED-REPLACED-REPL eth0 eth0 dezaktywowanie nie nie -- nie /org/freedesktop/NetworkManager/ActiveConnection/1 /org/freedesktop/NetworkManager/Settings/Connection/4 -- -- <<< -size: 4808 +size: 4805 location: clients/tests/test-client.py:test_003()/342 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 4635 bytes +stdout: 4632 bytes >>> ========================= Device details (eth0) ========================= -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (connected) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -15576,7 +15576,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -15599,19 +15599,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILA CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1,2,4} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 4882 +size: 4877 location: clients/tests/test-client.py:test_003()/343 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4699 bytes +stdout: 4694 bytes >>> ================================== Informacje o urzÄ…dzeniu (eth0) ================================== -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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane +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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- C0:61:AE:26:4D:D7 0 100 (poÅ‚Ä…czono) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- ethernet UUID-ethernet-REPLACED-REPLACED-REPL /org/freedesktop/NetworkManager/ActiveConnection/1 nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -15621,9 +15621,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -15718,37 +15718,37 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 383 +size: 387 location: clients/tests/test-client.py:test_003()/350 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 190 bytes +stdout: 194 bytes >>> -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 393 +size: 397 location: clients/tests/test-client.py:test_003()/351 cmd: $NMCLI --mode tabular --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 190 bytes +stdout: 194 bytes >>> -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 1461 +size: 1463 location: clients/tests/test-client.py:test_003()/352 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 1301 bytes +stdout: 1303 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -15756,17 +15756,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 1471 +size: 1473 location: clients/tests/test-client.py:test_003()/353 cmd: $NMCLI --mode tabular --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1301 bytes +stdout: 1303 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -15846,37 +15846,37 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 395 +size: 399 location: clients/tests/test-client.py:test_003()/360 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 190 bytes +stdout: 194 bytes >>> -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 405 +size: 409 location: clients/tests/test-client.py:test_003()/361 cmd: $NMCLI --mode tabular --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 190 bytes +stdout: 194 bytes >>> -GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0::deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: +GENERAL:ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:eth0:eth0:deactivating:no:no::no:/org/freedesktop/NetworkManager/ActiveConnection/1:/org/freedesktop/NetworkManager/Settings/Connection/4:: <<< -size: 1473 +size: 1475 location: clients/tests/test-client.py:test_003()/362 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 1301 bytes +stdout: 1303 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -15884,17 +15884,17 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp- CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 1483 +size: 1485 location: clients/tests/test-client.py:test_003()/363 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1301 bytes +stdout: 1303 bytes >>> -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:100 (connected):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33 DHCP4: IP6:2001\:a\:\:29c0\:62b9\:2e01\:30a/69 | 2001\:a\:\:6433\:6420\:34f9\:3801/115 | 2001\:a\:\:8191\:ed6b\:8ce\:b60/103:2001\:a\:\:2b50\:64d1\:9a91\:23b4:dst = 2001\:a\:\:5ecb\:f5ee\:fb96\:856c/100, nh = \:\:, mt = 4249082794:2001\:a\:\:1323\:9a78\:2b82\:d16b | 2001\:a\:\:4e1\:24e6\:b8c1\:91bb | 2001\:a\:\:bd96\:3bed\:fbd6\:19c5:sear6.fo.x.y | sear6.foo4.bar @@ -16120,17 +16120,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 897 +size: 899 location: clients/tests/test-client.py:test_003()/370 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 712 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -16142,17 +16142,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 912 +size: 914 location: clients/tests/test-client.py:test_003()/371 cmd: $NMCLI --mode multiline c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 717 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -16182,13 +16182,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -16206,7 +16206,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -16235,12 +16235,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3822 +size: 3823 location: clients/tests/test-client.py:test_003()/373 cmd: $NMCLI --mode multiline -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3658 bytes +stdout: 3659 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -16253,13 +16253,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -16277,7 +16277,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -16524,17 +16524,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 909 +size: 911 location: clients/tests/test-client.py:test_003()/380 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 712 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -16546,17 +16546,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 924 +size: 926 location: clients/tests/test-client.py:test_003()/381 cmd: $NMCLI --mode multiline --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 715 bytes +stdout: 717 bytes >>> GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -16586,13 +16586,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -16610,7 +16610,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -16639,12 +16639,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 3834 +size: 3835 location: clients/tests/test-client.py:test_003()/383 cmd: $NMCLI --mode multiline --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3658 bytes +stdout: 3659 bytes >>> GENERAL.DEVICE: eth0 GENERAL.TYPE: ethernet @@ -16657,13 +16657,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -16681,7 +16681,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- IP4.ROUTE[1]: dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -16956,12 +16956,12 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 1433 +size: 1435 location: clients/tests/test-client.py:test_003()/390 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 1236 bytes +stdout: 1238 bytes >>> =============================================================================== Connection profile details @@ -16972,7 +16972,7 @@ stdout: 1236 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -16985,12 +16985,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1460 +size: 1462 location: clients/tests/test-client.py:test_003()/391 cmd: $NMCLI --mode multiline --pretty c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1253 bytes +stdout: 1255 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia @@ -17001,7 +17001,7 @@ stdout: 1253 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -17035,13 +17035,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -17062,7 +17062,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -17097,12 +17097,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4768 +size: 4769 location: clients/tests/test-client.py:test_003()/393 cmd: $NMCLI --mode multiline --pretty -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4595 bytes +stdout: 4596 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -17118,13 +17118,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -17145,7 +17145,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -17426,12 +17426,12 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 1445 +size: 1447 location: clients/tests/test-client.py:test_003()/400 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 1236 bytes +stdout: 1238 bytes >>> =============================================================================== Connection profile details @@ -17442,7 +17442,7 @@ stdout: 1236 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: deactivating GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -17455,12 +17455,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1472 +size: 1474 location: clients/tests/test-client.py:test_003()/401 cmd: $NMCLI --mode multiline --pretty --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1253 bytes +stdout: 1255 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia @@ -17471,7 +17471,7 @@ stdout: 1253 bytes GENERAL.NAME: ethernet GENERAL.UUID: UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES: eth0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.STATE: dezaktywowanie GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -17505,13 +17505,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -17532,7 +17532,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -17567,12 +17567,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[3]: <invisible> | /org/freedesktop/NetworkMa ------------------------------------------------------------------------------- <<< -size: 4780 +size: 4781 location: clients/tests/test-client.py:test_003()/403 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4595 bytes +stdout: 4596 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (eth0) @@ -17588,13 +17588,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: C0:61:AE:26:4D:D7 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -17615,7 +17615,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.6.238/29 IP4.GATEWAY: -- @@ -17868,17 +17868,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 583 +size: 587 location: clients/tests/test-client.py:test_003()/410 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -17890,17 +17890,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 593 +size: 597 location: clients/tests/test-client.py:test_003()/411 cmd: $NMCLI --mode multiline --terse c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -17912,12 +17912,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2431 +size: 2433 location: clients/tests/test-client.py:test_003()/412 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: C returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -17930,13 +17930,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17954,7 +17954,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -17983,12 +17983,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 2441 +size: 2443 location: clients/tests/test-client.py:test_003()/413 cmd: $NMCLI --mode multiline --terse -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18001,13 +18001,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -18025,7 +18025,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -18272,17 +18272,17 @@ stderr: 58 bytes BÅ‚Ä…d: ethernet — nie ma takiego profilu poÅ‚Ä…czenia. <<< -size: 595 +size: 599 location: clients/tests/test-client.py:test_003()/420 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18294,17 +18294,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 605 +size: 609 location: clients/tests/test-client.py:test_003()/421 cmd: $NMCLI --mode multiline --terse --color yes c s /org/freedesktop/NetworkManager/ActiveConnection/1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 392 bytes >>> GENERAL.NAME:ethernet GENERAL.UUID:UUID-ethernet-REPLACED-REPLACED-REPL GENERAL.DEVICES:eth0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.STATE:deactivating GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18316,12 +18316,12 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 2443 +size: 2445 location: clients/tests/test-client.py:test_003()/422 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: C returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18334,13 +18334,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -18358,7 +18358,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 @@ -18387,12 +18387,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con- CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4 <<< -size: 2453 +size: 2455 location: clients/tests/test-client.py:test_003()/423 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2269 bytes +stdout: 2271 bytes >>> GENERAL.DEVICE:eth0 GENERAL.TYPE:ethernet @@ -18405,13 +18405,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:C0:61:AE:26:4D:D7 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -18429,7 +18429,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.6.238/29 IP4.GATEWAY: IP4.ROUTE[1]:dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 diff --git a/clients/tests/test-client.check-on-disk/test_004.expected b/clients/tests/test-client.check-on-disk/test_004.expected index 8e30c78f98..5140c02216 100644 --- a/clients/tests/test-client.check-on-disk/test_004.expected +++ b/clients/tests/test-client.check-on-disk/test_004.expected @@ -562,12 +562,12 @@ con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0 con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet -- <<< -size: 5142 +size: 5145 location: clients/tests/test-client.py:test_004()/21 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5011 bytes +stdout: 5014 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -656,7 +656,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -676,12 +676,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5168 +size: 5171 location: clients/tests/test-client.py:test_004()/22 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5027 bytes +stdout: 5030 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -770,7 +770,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -790,12 +790,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5148 +size: 5151 location: clients/tests/test-client.py:test_004()/23 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -884,7 +884,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -904,12 +904,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5178 +size: 5181 location: clients/tests/test-client.py:test_004()/24 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -998,7 +998,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -1018,12 +1018,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5148 +size: 5151 location: clients/tests/test-client.py:test_004()/25 cmd: $NMCLI con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1112,7 +1112,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -1132,12 +1132,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5178 +size: 5181 location: clients/tests/test-client.py:test_004()/26 cmd: $NMCLI con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -1226,7 +1226,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -1462,17 +1462,17 @@ vpn.persistent: nie vpn.timeout: 0 <<< -size: 851 +size: 854 location: clients/tests/test-client.py:test_004()/31 cmd: $NMCLI -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 713 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -1484,17 +1484,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 864 +size: 867 location: clients/tests/test-client.py:test_004()/32 cmd: $NMCLI -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 713 bytes +stdout: 716 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -1514,22 +1514,22 @@ returncode: 0 stdout: 258 bytes >>> DEVICE TYPE STATE CONNECTION -wlan0 wifi unavailable con-vpn-1 +wlan0 wifi connected con-vpn-1 eth0 ethernet unavailable -- eth1 ethernet unavailable -- wlan1 wifi unavailable -- wlan1 wifi unavailable -- <<< -size: 393 +size: 394 location: clients/tests/test-client.py:test_004()/34 cmd: $NMCLI dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 263 bytes +stdout: 264 bytes >>> DEVICE TYPE STATE CONNECTION -wlan0 wifi niedostÄ™pne con-vpn-1 +wlan0 wifi poÅ‚Ä…czono con-vpn-1 eth0 ethernet niedostÄ™pne -- eth1 ethernet niedostÄ™pne -- wlan1 wifi niedostÄ™pne -- @@ -1544,40 +1544,40 @@ returncode: 0 stdout: 1272 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -wlan0 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi connected unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 1420 +size: 1421 location: clients/tests/test-client.py:test_004()/36 cmd: $NMCLI -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1277 bytes +stdout: 1278 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -wlan0 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 8042 +size: 8039 location: clients/tests/test-client.py:test_004()/37 cmd: $NMCLI dev show lang: C returncode: 0 -stdout: 7918 bytes +stdout: 7915 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -1605,7 +1605,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -1631,7 +1631,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -1712,18 +1712,18 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 8073 +size: 8071 location: clients/tests/test-client.py:test_004()/38 cmd: $NMCLI dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7939 bytes +stdout: 7937 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -1751,7 +1751,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -1777,7 +1777,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -1858,12 +1858,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22425 +size: 22435 location: clients/tests/test-client.py:test_004()/39 cmd: $NMCLI -f all dev show lang: C returncode: 0 -stdout: 22293 bytes +stdout: 22303 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -1876,13 +1876,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -1894,7 +1894,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -1984,7 +1984,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2002,7 +2002,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -2052,7 +2052,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2070,7 +2070,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -2127,7 +2127,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2223,7 +2223,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2282,12 +2282,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22586 +size: 22598 location: clients/tests/test-client.py:test_004()/40 cmd: $NMCLI -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22444 bytes +stdout: 22456 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -2300,13 +2300,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2318,7 +2318,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -2408,7 +2408,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2426,7 +2426,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -2476,7 +2476,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2494,7 +2494,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -2551,7 +2551,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2647,7 +2647,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2706,18 +2706,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1493 +size: 1492 location: clients/tests/test-client.py:test_004()/41 cmd: $NMCLI dev show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -2750,7 +2750,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -2772,12 +2772,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5358 +size: 5360 location: clients/tests/test-client.py:test_004()/43 cmd: $NMCLI -f all dev show wlan0 lang: C returncode: 0 -stdout: 5221 bytes +stdout: 5223 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -2790,13 +2790,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -2808,7 +2808,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -2882,12 +2882,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5416 +size: 5420 location: clients/tests/test-client.py:test_004()/44 cmd: $NMCLI -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5269 bytes +stdout: 5273 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -2900,13 +2900,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -2918,7 +2918,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -2992,12 +2992,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2166 +size: 2168 location: clients/tests/test-client.py:test_004()/45 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3010,13 +3010,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -3041,12 +3041,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2192 +size: 2195 location: clients/tests/test-client.py:test_004()/46 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3059,13 +3059,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -3090,12 +3090,12 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2166 +size: 2168 location: clients/tests/test-client.py:test_004()/47 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3108,13 +3108,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -3139,12 +3139,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2192 +size: 2195 location: clients/tests/test-client.py:test_004()/48 cmd: $NMCLI -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3157,13 +3157,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -3404,12 +3404,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 5361 +size: 5363 location: clients/tests/test-client.py:test_004()/63 cmd: $NMCLI -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5221 bytes +stdout: 5223 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3422,13 +3422,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -3440,7 +3440,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -3514,12 +3514,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5419 +size: 5423 location: clients/tests/test-client.py:test_004()/64 cmd: $NMCLI -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5269 bytes +stdout: 5273 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3532,13 +3532,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -3550,7 +3550,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -3624,18 +3624,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1506 +size: 1505 location: clients/tests/test-client.py:test_004()/65 cmd: $NMCLI -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -3668,7 +3668,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -3690,12 +3690,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5368 +size: 5370 location: clients/tests/test-client.py:test_004()/67 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: 5090 bytes +stdout: 5092 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3708,13 +3708,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -3726,7 +3726,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no WIFI-PROPERTIES.WEP: yes @@ -3797,12 +3797,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5425 +size: 5429 location: clients/tests/test-client.py:test_004()/68 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: 5137 bytes +stdout: 5141 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -3815,13 +3815,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -3833,7 +3833,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie WIFI-PROPERTIES.WEP: tak @@ -4012,12 +4012,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5160 +size: 5163 location: clients/tests/test-client.py:test_004()/73 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4106,7 +4106,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4126,12 +4126,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5190 +size: 5193 location: clients/tests/test-client.py:test_004()/74 cmd: $NMCLI --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4220,7 +4220,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4240,12 +4240,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5160 +size: 5163 location: clients/tests/test-client.py:test_004()/75 cmd: $NMCLI --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4334,7 +4334,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4354,12 +4354,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5190 +size: 5193 location: clients/tests/test-client.py:test_004()/76 cmd: $NMCLI --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -4448,7 +4448,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4684,17 +4684,17 @@ vpn.persistent: nie vpn.timeout: 0 <<< -size: 863 +size: 866 location: clients/tests/test-client.py:test_004()/81 cmd: $NMCLI --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 713 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -4706,17 +4706,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 876 +size: 879 location: clients/tests/test-client.py:test_004()/82 cmd: $NMCLI --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 713 bytes +stdout: 716 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -4728,78 +4728,78 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 550 +size: 554 location: clients/tests/test-client.py:test_004()/83 cmd: $NMCLI --color yes dev s lang: C returncode: 0 -stdout: 418 bytes +stdout: 422 bytes >>> DEVICE TYPE STATE CONNECTION -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m <<< -size: 565 +size: 570 location: clients/tests/test-client.py:test_004()/84 cmd: $NMCLI --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 423 bytes +stdout: 428 bytes >>> DEVICE TYPE STATE CONNECTION -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m <<< -size: 1777 +size: 1786 location: clients/tests/test-client.py:test_004()/85 cmd: $NMCLI --color yes -f all dev status lang: C returncode: 0 -stdout: 1632 bytes +stdout: 1641 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32munknown[0m [32munknown[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 1792 +size: 1802 location: clients/tests/test-client.py:test_004()/86 cmd: $NMCLI --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1637 bytes +stdout: 1647 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mnieznane[0m [32mnieznane[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 8054 +size: 8051 location: clients/tests/test-client.py:test_004()/87 cmd: $NMCLI --color yes dev show lang: C returncode: 0 -stdout: 7918 bytes +stdout: 7915 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -4827,7 +4827,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -4853,7 +4853,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -4934,18 +4934,18 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 8085 +size: 8083 location: clients/tests/test-client.py:test_004()/88 cmd: $NMCLI --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7939 bytes +stdout: 7937 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -4973,7 +4973,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -4999,7 +4999,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -5080,12 +5080,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22761 +size: 22771 location: clients/tests/test-client.py:test_004()/89 cmd: $NMCLI --color yes -f all dev show lang: C returncode: 0 -stdout: 22617 bytes +stdout: 22627 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -5098,13 +5098,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5116,7 +5116,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -5206,7 +5206,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5224,7 +5224,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -5274,7 +5274,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5292,7 +5292,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -5349,7 +5349,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5445,7 +5445,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -5504,12 +5504,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22922 +size: 22934 location: clients/tests/test-client.py:test_004()/90 cmd: $NMCLI --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22768 bytes +stdout: 22780 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -5522,13 +5522,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5540,7 +5540,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -5630,7 +5630,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5648,7 +5648,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -5698,7 +5698,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5716,7 +5716,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -5773,7 +5773,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5869,7 +5869,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -5928,18 +5928,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1505 +size: 1504 location: clients/tests/test-client.py:test_004()/91 cmd: $NMCLI --color yes dev show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -5972,7 +5972,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -5994,12 +5994,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5613 +size: 5615 location: clients/tests/test-client.py:test_004()/93 cmd: $NMCLI --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 5464 bytes +stdout: 5466 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6012,13 +6012,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -6030,7 +6030,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -6104,12 +6104,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5671 +size: 5675 location: clients/tests/test-client.py:test_004()/94 cmd: $NMCLI --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5512 bytes +stdout: 5516 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6122,13 +6122,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -6140,7 +6140,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -6214,12 +6214,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2178 +size: 2180 location: clients/tests/test-client.py:test_004()/95 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6232,13 +6232,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -6263,12 +6263,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2204 +size: 2207 location: clients/tests/test-client.py:test_004()/96 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6281,13 +6281,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -6312,12 +6312,12 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2178 +size: 2180 location: clients/tests/test-client.py:test_004()/97 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6330,13 +6330,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -6361,12 +6361,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2204 +size: 2207 location: clients/tests/test-client.py:test_004()/98 cmd: $NMCLI --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6379,13 +6379,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -6410,30 +6410,30 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 641 +size: 644 location: clients/tests/test-client.py:test_004()/99 cmd: $NMCLI --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 486 bytes +stdout: 489 bytes >>> DEVICE TYPE DBUS-PATH -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 652 +size: 655 location: clients/tests/test-client.py:test_004()/100 cmd: $NMCLI --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 486 bytes +stdout: 489 bytes >>> DEVICE TYPE DBUS-PATH -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -6626,12 +6626,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 5617 +size: 5619 location: clients/tests/test-client.py:test_004()/113 cmd: $NMCLI --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5464 bytes +stdout: 5466 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6644,13 +6644,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -6662,7 +6662,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -6736,12 +6736,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5675 +size: 5679 location: clients/tests/test-client.py:test_004()/114 cmd: $NMCLI --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5512 bytes +stdout: 5516 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6754,13 +6754,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -6772,7 +6772,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -6846,18 +6846,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1519 +size: 1518 location: clients/tests/test-client.py:test_004()/115 cmd: $NMCLI --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -6890,7 +6890,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -6912,12 +6912,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5624 +size: 5626 location: clients/tests/test-client.py:test_004()/117 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: 5333 bytes +stdout: 5335 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -6930,13 +6930,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -6948,7 +6948,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no WIFI-PROPERTIES.WEP: yes @@ -7019,12 +7019,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5681 +size: 5685 location: clients/tests/test-client.py:test_004()/118 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: 5380 bytes +stdout: 5384 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -7037,13 +7037,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -7055,7 +7055,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie WIFI-PROPERTIES.WEP: tak @@ -7234,12 +7234,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6170 +size: 6173 location: clients/tests/test-client.py:test_004()/123 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7339,7 +7339,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -7361,12 +7361,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6212 +size: 6215 location: clients/tests/test-client.py:test_004()/124 cmd: $NMCLI --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -7466,7 +7466,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -7488,12 +7488,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6170 +size: 6173 location: clients/tests/test-client.py:test_004()/125 cmd: $NMCLI --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -7593,7 +7593,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -7615,12 +7615,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6212 +size: 6215 location: clients/tests/test-client.py:test_004()/126 cmd: $NMCLI --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -7720,7 +7720,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -7982,12 +7982,12 @@ vpn.timeout: 0 ------------------------------------------------------------------------------- <<< -size: 1175 +size: 1178 location: clients/tests/test-client.py:test_004()/131 cmd: $NMCLI --pretty -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 1023 bytes +stdout: 1026 bytes >>> =============================================================================== Activate connection details (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -7995,7 +7995,7 @@ stdout: 1023 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -8008,12 +8008,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1195 +size: 1198 location: clients/tests/test-client.py:test_004()/132 cmd: $NMCLI --pretty -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1033 bytes +stdout: 1036 bytes >>> =============================================================================== Szczegóły aktywowania poÅ‚Ä…czenia (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -8021,7 +8021,7 @@ stdout: 1033 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -8046,26 +8046,26 @@ stdout: 387 bytes ===================== DEVICE TYPE STATE CONNECTION ---------------------------------------------------------------- -wlan0 wifi unavailable con-vpn-1 +wlan0 wifi connected con-vpn-1 eth0 ethernet unavailable -- eth1 ethernet unavailable -- wlan1 wifi unavailable -- wlan1 wifi unavailable -- <<< -size: 525 +size: 526 location: clients/tests/test-client.py:test_004()/134 cmd: $NMCLI --pretty dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 385 bytes +stdout: 386 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE CONNECTION -------------------------------------------------------------- -wlan0 wifi niedostÄ™pne con-vpn-1 +wlan0 wifi poÅ‚Ä…czono con-vpn-1 eth0 ethernet niedostÄ™pne -- eth1 ethernet niedostÄ™pne -- wlan1 wifi niedostÄ™pne -- @@ -8084,38 +8084,38 @@ stdout: 1570 bytes ===================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -wlan0 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi connected unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 1721 +size: 1722 location: clients/tests/test-client.py:test_004()/136 cmd: $NMCLI --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1568 bytes +stdout: 1569 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -wlan0 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 12868 +size: 12865 location: clients/tests/test-client.py:test_004()/137 cmd: $NMCLI --pretty dev show lang: C returncode: 0 -stdout: 12733 bytes +stdout: 12730 bytes >>> =============================================================================== Device details (wlan0) @@ -8128,7 +8128,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -8171,7 +8171,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -8210,7 +8210,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -8318,12 +8318,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 12932 +size: 12930 location: clients/tests/test-client.py:test_004()/138 cmd: $NMCLI --pretty dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12787 bytes +stdout: 12785 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -8336,7 +8336,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -8379,7 +8379,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -8418,7 +8418,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -8526,12 +8526,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27410 +size: 27420 location: clients/tests/test-client.py:test_004()/139 cmd: $NMCLI --pretty -f all dev show lang: C returncode: 0 -stdout: 27268 bytes +stdout: 27278 bytes >>> =============================================================================== Device details (wlan0) @@ -8547,13 +8547,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -8566,7 +8566,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -8670,7 +8670,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -8691,7 +8691,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -8750,7 +8750,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -8771,7 +8771,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -8837,7 +8837,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -8946,7 +8946,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -9014,12 +9014,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27604 +size: 27616 location: clients/tests/test-client.py:test_004()/140 cmd: $NMCLI --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27452 bytes +stdout: 27464 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -9035,13 +9035,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9054,7 +9054,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -9158,7 +9158,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9179,7 +9179,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -9238,7 +9238,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9259,7 +9259,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -9325,7 +9325,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9434,7 +9434,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9502,12 +9502,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2434 +size: 2433 location: clients/tests/test-client.py:test_004()/141 cmd: $NMCLI --pretty dev show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -9520,7 +9520,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -9565,7 +9565,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -9592,12 +9592,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6539 +size: 6541 location: clients/tests/test-client.py:test_004()/143 cmd: $NMCLI --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 6392 bytes +stdout: 6394 bytes >>> =============================================================================== Device details (wlan0) @@ -9613,13 +9613,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -9632,7 +9632,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -9717,12 +9717,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6604 +size: 6608 location: clients/tests/test-client.py:test_004()/144 cmd: $NMCLI --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6447 bytes +stdout: 6451 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -9738,13 +9738,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9757,7 +9757,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -9842,12 +9842,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2627 +size: 2629 location: clients/tests/test-client.py:test_004()/145 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -9863,13 +9863,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -9897,12 +9897,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2660 +size: 2663 location: clients/tests/test-client.py:test_004()/146 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -9918,13 +9918,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -9952,12 +9952,12 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2627 +size: 2629 location: clients/tests/test-client.py:test_004()/147 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -9973,13 +9973,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -10007,12 +10007,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2660 +size: 2663 location: clients/tests/test-client.py:test_004()/148 cmd: $NMCLI --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -10028,13 +10028,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -10382,12 +10382,12 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 6542 +size: 6544 location: clients/tests/test-client.py:test_004()/163 cmd: $NMCLI --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6392 bytes +stdout: 6394 bytes >>> =============================================================================== Device details (wlan0) @@ -10403,13 +10403,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -10422,7 +10422,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -10507,12 +10507,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6607 +size: 6611 location: clients/tests/test-client.py:test_004()/164 cmd: $NMCLI --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6447 bytes +stdout: 6451 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -10528,13 +10528,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -10547,7 +10547,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -10632,12 +10632,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2447 +size: 2446 location: clients/tests/test-client.py:test_004()/165 cmd: $NMCLI --pretty -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -10650,7 +10650,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -10695,7 +10695,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -10722,12 +10722,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6469 +size: 6471 location: clients/tests/test-client.py:test_004()/167 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: 6181 bytes +stdout: 6183 bytes >>> =============================================================================== Device details (wlan0) @@ -10743,13 +10743,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -10762,7 +10762,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -10843,12 +10843,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6533 +size: 6537 location: clients/tests/test-client.py:test_004()/168 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: 6235 bytes +stdout: 6239 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -10864,13 +10864,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -10883,7 +10883,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -11128,12 +11128,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6182 +size: 6185 location: clients/tests/test-client.py:test_004()/173 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11233,7 +11233,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -11255,12 +11255,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6224 +size: 6227 location: clients/tests/test-client.py:test_004()/174 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -11360,7 +11360,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11382,12 +11382,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6182 +size: 6185 location: clients/tests/test-client.py:test_004()/175 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -11487,7 +11487,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -11509,12 +11509,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6224 +size: 6227 location: clients/tests/test-client.py:test_004()/176 cmd: $NMCLI --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -11614,7 +11614,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11876,12 +11876,12 @@ vpn.timeout: 0 ------------------------------------------------------------------------------- <<< -size: 1187 +size: 1190 location: clients/tests/test-client.py:test_004()/181 cmd: $NMCLI --pretty --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 1023 bytes +stdout: 1026 bytes >>> =============================================================================== Activate connection details (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -11889,7 +11889,7 @@ stdout: 1023 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -11902,12 +11902,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1207 +size: 1210 location: clients/tests/test-client.py:test_004()/182 cmd: $NMCLI --pretty --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1033 bytes +stdout: 1036 bytes >>> =============================================================================== Szczegóły aktywowania poÅ‚Ä…czenia (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -11915,7 +11915,7 @@ stdout: 1033 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -11928,88 +11928,88 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 689 +size: 693 location: clients/tests/test-client.py:test_004()/183 cmd: $NMCLI --pretty --color yes dev s lang: C returncode: 0 -stdout: 547 bytes +stdout: 551 bytes >>> ===================== Status of devices ===================== DEVICE TYPE STATE CONNECTION ---------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m <<< -size: 697 +size: 702 location: clients/tests/test-client.py:test_004()/184 cmd: $NMCLI --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 545 bytes +stdout: 550 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE CONNECTION -------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m <<< -size: 2085 +size: 2094 location: clients/tests/test-client.py:test_004()/185 cmd: $NMCLI --pretty --color yes -f all dev status lang: C returncode: 0 -stdout: 1930 bytes +stdout: 1939 bytes >>> ===================== Status of devices ===================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32munknown[0m [32munknown[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 2093 +size: 2103 location: clients/tests/test-client.py:test_004()/186 cmd: $NMCLI --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1928 bytes +stdout: 1938 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mnieznane[0m [32mnieznane[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 12880 +size: 12877 location: clients/tests/test-client.py:test_004()/187 cmd: $NMCLI --pretty --color yes dev show lang: C returncode: 0 -stdout: 12733 bytes +stdout: 12730 bytes >>> =============================================================================== Device details (wlan0) @@ -12022,7 +12022,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -12065,7 +12065,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -12104,7 +12104,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -12212,12 +12212,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 12944 +size: 12942 location: clients/tests/test-client.py:test_004()/188 cmd: $NMCLI --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12787 bytes +stdout: 12785 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -12230,7 +12230,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -12273,7 +12273,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -12312,7 +12312,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -12420,12 +12420,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27746 +size: 27756 location: clients/tests/test-client.py:test_004()/189 cmd: $NMCLI --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 27592 bytes +stdout: 27602 bytes >>> =============================================================================== Device details (wlan0) @@ -12441,13 +12441,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -12460,7 +12460,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -12564,7 +12564,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -12585,7 +12585,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -12644,7 +12644,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -12665,7 +12665,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -12731,7 +12731,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -12840,7 +12840,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -12908,12 +12908,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27940 +size: 27952 location: clients/tests/test-client.py:test_004()/190 cmd: $NMCLI --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27776 bytes +stdout: 27788 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -12929,13 +12929,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -12948,7 +12948,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -13052,7 +13052,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13073,7 +13073,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -13132,7 +13132,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13153,7 +13153,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -13219,7 +13219,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13328,7 +13328,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13396,12 +13396,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2446 +size: 2445 location: clients/tests/test-client.py:test_004()/191 cmd: $NMCLI --pretty --color yes dev show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -13414,7 +13414,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -13459,7 +13459,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -13486,12 +13486,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6794 +size: 6796 location: clients/tests/test-client.py:test_004()/193 cmd: $NMCLI --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 6635 bytes +stdout: 6637 bytes >>> =============================================================================== Device details (wlan0) @@ -13507,13 +13507,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13526,7 +13526,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -13611,12 +13611,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6859 +size: 6863 location: clients/tests/test-client.py:test_004()/194 cmd: $NMCLI --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6690 bytes +stdout: 6694 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -13632,13 +13632,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13651,7 +13651,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -13736,12 +13736,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2639 +size: 2641 location: clients/tests/test-client.py:test_004()/195 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -13757,13 +13757,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13791,12 +13791,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2672 +size: 2675 location: clients/tests/test-client.py:test_004()/196 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -13812,13 +13812,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13846,12 +13846,12 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2639 +size: 2641 location: clients/tests/test-client.py:test_004()/197 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -13867,13 +13867,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -13901,12 +13901,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2672 +size: 2675 location: clients/tests/test-client.py:test_004()/198 cmd: $NMCLI --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -13922,13 +13922,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -13956,38 +13956,38 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 798 +size: 801 location: clients/tests/test-client.py:test_004()/199 cmd: $NMCLI --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 633 bytes +stdout: 636 bytes >>> ===================== Status of devices ===================== DEVICE TYPE DBUS-PATH ---------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 801 +size: 804 location: clients/tests/test-client.py:test_004()/200 cmd: $NMCLI --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 626 bytes +stdout: 629 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE DBUS-PATH -------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -14276,12 +14276,12 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 6797 +size: 6799 location: clients/tests/test-client.py:test_004()/213 cmd: $NMCLI --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6635 bytes +stdout: 6637 bytes >>> =============================================================================== Device details (wlan0) @@ -14297,13 +14297,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -14316,7 +14316,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -14401,12 +14401,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6862 +size: 6866 location: clients/tests/test-client.py:test_004()/214 cmd: $NMCLI --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6690 bytes +stdout: 6694 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -14422,13 +14422,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -14441,7 +14441,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -14526,12 +14526,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2459 +size: 2458 location: clients/tests/test-client.py:test_004()/215 cmd: $NMCLI --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -14544,7 +14544,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -14589,7 +14589,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -14616,12 +14616,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6724 +size: 6726 location: clients/tests/test-client.py:test_004()/217 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: 6424 bytes +stdout: 6426 bytes >>> =============================================================================== Device details (wlan0) @@ -14637,13 +14637,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -14656,7 +14656,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -14737,12 +14737,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6788 +size: 6792 location: clients/tests/test-client.py:test_004()/218 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: 6478 bytes +stdout: 6482 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -14758,13 +14758,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -14777,7 +14777,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -15022,12 +15022,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2597 +size: 2602 location: clients/tests/test-client.py:test_004()/223 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15116,7 +15116,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15136,12 +15136,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2607 +size: 2612 location: clients/tests/test-client.py:test_004()/224 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15230,7 +15230,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15250,12 +15250,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2597 +size: 2602 location: clients/tests/test-client.py:test_004()/225 cmd: $NMCLI --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15344,7 +15344,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15364,12 +15364,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2607 +size: 2612 location: clients/tests/test-client.py:test_004()/226 cmd: $NMCLI --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -15458,7 +15458,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15694,17 +15694,17 @@ vpn.persistent:no vpn.timeout:0 <<< -size: 538 +size: 543 location: clients/tests/test-client.py:test_004()/231 cmd: $NMCLI --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15716,17 +15716,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 548 +size: 553 location: clients/tests/test-client.py:test_004()/232 cmd: $NMCLI --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -15738,74 +15738,74 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 264 +size: 262 location: clients/tests/test-client.py:test_004()/233 cmd: $NMCLI --terse dev s lang: C returncode: 0 -stdout: 135 bytes +stdout: 133 bytes >>> -wlan0:wifi:unavailable:con-vpn-1 +wlan0:wifi:connected:con-vpn-1 eth0:ethernet:unavailable: eth1:ethernet:unavailable: wlan1:wifi:unavailable: wlan1:wifi:unavailable: <<< -size: 274 +size: 272 location: clients/tests/test-client.py:test_004()/234 cmd: $NMCLI --terse dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 135 bytes +stdout: 133 bytes >>> -wlan0:wifi:unavailable:con-vpn-1 +wlan0:wifi:connected:con-vpn-1 eth0:ethernet:unavailable: eth1:ethernet:unavailable: wlan1:wifi:unavailable: wlan1:wifi:unavailable: <<< -size: 662 +size: 660 location: clients/tests/test-client.py:test_004()/235 cmd: $NMCLI --terse -f all dev status lang: C returncode: 0 -stdout: 521 bytes +stdout: 519 bytes >>> -wlan0:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0:wifi:connected:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 eth0:ethernet:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/1::: 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: 672 +size: 670 location: clients/tests/test-client.py:test_004()/236 cmd: $NMCLI --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 521 bytes +stdout: 519 bytes >>> -wlan0:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0:wifi:connected:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 eth0:ethernet:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/1::: 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: 4535 +size: 4532 location: clients/tests/test-client.py:test_004()/237 cmd: $NMCLI --terse dev show lang: C returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -15833,7 +15833,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -15859,7 +15859,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -15940,18 +15940,18 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 4545 +size: 4542 location: clients/tests/test-client.py:test_004()/238 cmd: $NMCLI --terse dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -15979,7 +15979,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -16005,7 +16005,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -16086,12 +16086,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 12963 +size: 12983 location: clients/tests/test-client.py:test_004()/239 cmd: $NMCLI --terse -f all dev show lang: C returncode: 0 -stdout: 12822 bytes +stdout: 12842 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -16104,13 +16104,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16122,7 +16122,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -16212,7 +16212,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16230,7 +16230,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -16280,7 +16280,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16298,7 +16298,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -16355,7 +16355,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16451,7 +16451,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16510,12 +16510,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13009 +size: 13029 location: clients/tests/test-client.py:test_004()/240 cmd: $NMCLI --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12858 bytes +stdout: 12878 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -16528,13 +16528,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16546,7 +16546,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -16636,7 +16636,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16654,7 +16654,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -16704,7 +16704,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16722,7 +16722,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -16779,7 +16779,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16875,7 +16875,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -16934,18 +16934,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 877 +size: 876 location: clients/tests/test-client.py:test_004()/241 cmd: $NMCLI --terse dev show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -16967,18 +16967,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 887 +size: 886 location: clients/tests/test-client.py:test_004()/242 cmd: $NMCLI --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -17000,12 +17000,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 2983 +size: 2987 location: clients/tests/test-client.py:test_004()/243 cmd: $NMCLI --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 2837 bytes +stdout: 2841 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17018,13 +17018,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17036,7 +17036,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -17110,12 +17110,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3020 +size: 3024 location: clients/tests/test-client.py:test_004()/244 cmd: $NMCLI --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2864 bytes +stdout: 2868 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17128,13 +17128,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17146,7 +17146,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -17220,12 +17220,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1312 +size: 1316 location: clients/tests/test-client.py:test_004()/245 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17238,13 +17238,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17269,12 +17269,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1322 +size: 1326 location: clients/tests/test-client.py:test_004()/246 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17287,13 +17287,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17318,12 +17318,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1312 +size: 1316 location: clients/tests/test-client.py:test_004()/247 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17336,13 +17336,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17367,12 +17367,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1322 +size: 1326 location: clients/tests/test-client.py:test_004()/248 cmd: $NMCLI --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17385,13 +17385,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17606,12 +17606,12 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:24 <<< -size: 2986 +size: 2990 location: clients/tests/test-client.py:test_004()/263 cmd: $NMCLI --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 2837 bytes +stdout: 2841 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17624,13 +17624,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17642,7 +17642,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -17716,12 +17716,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3023 +size: 3027 location: clients/tests/test-client.py:test_004()/264 cmd: $NMCLI --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2864 bytes +stdout: 2868 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17734,13 +17734,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17752,7 +17752,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -17826,18 +17826,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 890 +size: 889 location: clients/tests/test-client.py:test_004()/265 cmd: $NMCLI --terse -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -17859,18 +17859,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 900 +size: 899 location: clients/tests/test-client.py:test_004()/266 cmd: $NMCLI --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -17892,12 +17892,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3045 +size: 3049 location: clients/tests/test-client.py:test_004()/267 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: 2758 bytes +stdout: 2762 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -17910,13 +17910,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -17928,7 +17928,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -17999,12 +17999,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3082 +size: 3086 location: clients/tests/test-client.py:test_004()/268 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: 2785 bytes +stdout: 2789 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -18017,13 +18017,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -18035,7 +18035,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -18214,12 +18214,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2609 +size: 2614 location: clients/tests/test-client.py:test_004()/273 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18308,7 +18308,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18328,12 +18328,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2619 +size: 2624 location: clients/tests/test-client.py:test_004()/274 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18422,7 +18422,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18442,12 +18442,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2609 +size: 2614 location: clients/tests/test-client.py:test_004()/275 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18536,7 +18536,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18556,12 +18556,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2619 +size: 2624 location: clients/tests/test-client.py:test_004()/276 cmd: $NMCLI --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -18650,7 +18650,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18886,17 +18886,17 @@ vpn.persistent:no vpn.timeout:0 <<< -size: 550 +size: 555 location: clients/tests/test-client.py:test_004()/281 cmd: $NMCLI --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18908,17 +18908,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 560 +size: 565 location: clients/tests/test-client.py:test_004()/282 cmd: $NMCLI --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -18930,74 +18930,74 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 436 +size: 438 location: clients/tests/test-client.py:test_004()/283 cmd: $NMCLI --terse --color yes dev s lang: C returncode: 0 -stdout: 295 bytes +stdout: 297 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2mcon-vpn-1[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32mcon-vpn-1[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m <<< -size: 446 +size: 448 location: clients/tests/test-client.py:test_004()/284 cmd: $NMCLI --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 295 bytes +stdout: 297 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2mcon-vpn-1[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32mcon-vpn-1[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m <<< -size: 1034 +size: 1041 location: clients/tests/test-client.py:test_004()/285 cmd: $NMCLI --terse --color yes -f all dev status lang: C returncode: 0 -stdout: 881 bytes +stdout: 888 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m:[2mcon-vpn-1[0m:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32munknown[0m:[32munknown[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m:[32mcon-vpn-1[0m:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m:[2m[0m:[2m[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m:[2m[0m:[2m[0m:[2m[0m <<< -size: 1044 +size: 1051 location: clients/tests/test-client.py:test_004()/286 cmd: $NMCLI --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 881 bytes +stdout: 888 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m:[2mcon-vpn-1[0m:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32munknown[0m:[32munknown[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m:[32mcon-vpn-1[0m:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m:[2m[0m:[2m[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m:[2m[0m:[2m[0m:[2m[0m <<< -size: 4547 +size: 4544 location: clients/tests/test-client.py:test_004()/287 cmd: $NMCLI --terse --color yes dev show lang: C returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -19025,7 +19025,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -19051,7 +19051,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -19132,18 +19132,18 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 4557 +size: 4554 location: clients/tests/test-client.py:test_004()/288 cmd: $NMCLI --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -19171,7 +19171,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -19197,7 +19197,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -19278,12 +19278,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13299 +size: 13319 location: clients/tests/test-client.py:test_004()/289 cmd: $NMCLI --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 13146 bytes +stdout: 13166 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -19296,13 +19296,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19314,7 +19314,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -19404,7 +19404,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19422,7 +19422,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -19472,7 +19472,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19490,7 +19490,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -19547,7 +19547,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19643,7 +19643,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19702,12 +19702,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13345 +size: 13365 location: clients/tests/test-client.py:test_004()/290 cmd: $NMCLI --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13182 bytes +stdout: 13202 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -19720,13 +19720,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19738,7 +19738,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -19828,7 +19828,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19846,7 +19846,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -19896,7 +19896,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -19914,7 +19914,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -19971,7 +19971,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20067,7 +20067,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20126,18 +20126,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 889 +size: 888 location: clients/tests/test-client.py:test_004()/291 cmd: $NMCLI --terse --color yes dev show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -20159,18 +20159,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 899 +size: 898 location: clients/tests/test-client.py:test_004()/292 cmd: $NMCLI --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -20192,12 +20192,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3238 +size: 3242 location: clients/tests/test-client.py:test_004()/293 cmd: $NMCLI --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3080 bytes +stdout: 3084 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20210,13 +20210,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20228,7 +20228,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -20302,12 +20302,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3275 +size: 3279 location: clients/tests/test-client.py:test_004()/294 cmd: $NMCLI --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3107 bytes +stdout: 3111 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20320,13 +20320,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20338,7 +20338,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -20412,12 +20412,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1324 +size: 1328 location: clients/tests/test-client.py:test_004()/295 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20430,13 +20430,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20461,12 +20461,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1334 +size: 1338 location: clients/tests/test-client.py:test_004()/296 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20479,13 +20479,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20510,12 +20510,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1324 +size: 1328 location: clients/tests/test-client.py:test_004()/297 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20528,13 +20528,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20559,12 +20559,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1334 +size: 1338 location: clients/tests/test-client.py:test_004()/298 cmd: $NMCLI --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20577,13 +20577,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20608,28 +20608,28 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 555 +size: 558 location: clients/tests/test-client.py:test_004()/299 cmd: $NMCLI --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 391 bytes +stdout: 394 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m:[32mwifi[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 565 +size: 568 location: clients/tests/test-client.py:test_004()/300 cmd: $NMCLI --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 391 bytes +stdout: 394 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m:[32mwifi[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -20798,12 +20798,12 @@ stdout: 422 bytes <<< -size: 3241 +size: 3245 location: clients/tests/test-client.py:test_004()/313 cmd: $NMCLI --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3080 bytes +stdout: 3084 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20816,13 +20816,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20834,7 +20834,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -20908,12 +20908,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3278 +size: 3282 location: clients/tests/test-client.py:test_004()/314 cmd: $NMCLI --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3107 bytes +stdout: 3111 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -20926,13 +20926,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -20944,7 +20944,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -21018,18 +21018,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 902 +size: 901 location: clients/tests/test-client.py:test_004()/315 cmd: $NMCLI --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -21051,18 +21051,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 912 +size: 911 location: clients/tests/test-client.py:test_004()/316 cmd: $NMCLI --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -21084,12 +21084,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3300 +size: 3304 location: clients/tests/test-client.py:test_004()/317 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: 3001 bytes +stdout: 3005 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21102,13 +21102,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -21120,7 +21120,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -21191,12 +21191,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3337 +size: 3341 location: clients/tests/test-client.py:test_004()/318 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: 3028 bytes +stdout: 3032 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -21209,13 +21209,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -21227,7 +21227,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -21429,7 +21429,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 @@ -21458,7 +21458,7 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — PoÅ‚Ä…czono z VPN key1 = val1 | key2 = val2 | key3 = val3 @@ -21487,7 +21487,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 @@ -21516,7 +21516,7 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — PoÅ‚Ä…czono z VPN key1 = val1 | key2 = val2 | key3 = val3 @@ -21600,7 +21600,7 @@ returncode: 0 stdout: 502 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 671 @@ -21611,7 +21611,7 @@ returncode: 0 stdout: 504 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 394 @@ -21622,22 +21622,22 @@ returncode: 0 stdout: 258 bytes >>> DEVICE TYPE STATE CONNECTION -wlan0 wifi unavailable con-vpn-1 +wlan0 wifi connected con-vpn-1 eth0 ethernet unavailable -- eth1 ethernet unavailable -- wlan1 wifi unavailable -- wlan1 wifi unavailable -- <<< -size: 409 +size: 410 location: clients/tests/test-client.py:test_004()/334 cmd: $NMCLI --mode tabular dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 263 bytes +stdout: 264 bytes >>> DEVICE TYPE STATE CONNECTION -wlan0 wifi niedostÄ™pne con-vpn-1 +wlan0 wifi poÅ‚Ä…czono con-vpn-1 eth0 ethernet niedostÄ™pne -- eth1 ethernet niedostÄ™pne -- wlan1 wifi niedostÄ™pne -- @@ -21652,34 +21652,34 @@ returncode: 0 stdout: 1272 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -wlan0 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi connected unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 1436 +size: 1437 location: clients/tests/test-client.py:test_004()/336 cmd: $NMCLI --mode tabular -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1277 bytes +stdout: 1278 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -wlan0 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 6356 +size: 6354 location: clients/tests/test-client.py:test_004()/337 cmd: $NMCLI --mode tabular dev show lang: C returncode: 0 -stdout: 6216 bytes +stdout: 6214 bytes >>> DEVICE wlan0 @@ -21693,8 +21693,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -21730,7 +21730,7 @@ CON-PATH -- NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -21760,7 +21760,7 @@ CON-PATH -- NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -21823,12 +21823,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: 6383 +size: 6378 location: clients/tests/test-client.py:test_004()/338 cmd: $NMCLI --mode tabular dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 6233 bytes +stdout: 6228 bytes >>> DEVICE wlan0 @@ -21842,8 +21842,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -21878,8 +21878,8 @@ CONNECTION CON-PATH -- -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -21908,8 +21908,8 @@ CONNECTION CON-PATH -- -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -21972,18 +21972,18 @@ 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: 15978 +size: 15976 location: clients/tests/test-client.py:test_004()/339 cmd: $NMCLI --mode tabular -f all dev show lang: C returncode: 0 -stdout: 15830 bytes +stdout: 15828 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -22012,7 +22012,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -22021,7 +22021,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -22039,7 +22039,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- eth1 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -22048,7 +22048,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -22066,7 +22066,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no unknown no no @@ -22096,7 +22096,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no unknown no no @@ -22125,18 +22125,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 16137 +size: 16132 location: clients/tests/test-client.py:test_004()/340 cmd: $NMCLI --mode tabular -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 15979 bytes +stdout: 15974 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -22165,7 +22165,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -22173,8 +22173,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -22192,7 +22192,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- eth1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -22200,8 +22200,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -22219,7 +22219,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie nieznane nie nie @@ -22249,7 +22249,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie nieznane nie nie @@ -22278,12 +22278,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1125 +size: 1123 location: clients/tests/test-client.py:test_004()/341 cmd: $NMCLI --mode tabular dev show wlan0 lang: C returncode: 0 -stdout: 980 bytes +stdout: 978 bytes >>> DEVICE wlan0 @@ -22297,8 +22297,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -22313,12 +22313,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: 1136 +size: 1135 location: clients/tests/test-client.py:test_004()/342 cmd: $NMCLI --mode tabular dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 981 bytes +stdout: 980 bytes >>> DEVICE wlan0 @@ -22332,8 +22332,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -22348,18 +22348,18 @@ 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: 3296 +size: 3294 location: clients/tests/test-client.py:test_004()/343 cmd: $NMCLI --mode tabular -f all dev show wlan0 lang: C returncode: 0 -stdout: 3143 bytes +stdout: 3141 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -22388,18 +22388,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3359 +size: 3358 location: clients/tests/test-client.py:test_004()/344 cmd: $NMCLI --mode tabular -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3196 bytes +stdout: 3195 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -22428,15 +22428,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1376 +size: 1374 location: clients/tests/test-client.py:test_004()/345 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1188 bytes +stdout: 1186 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR 13:E0:74:85:7C:D9 @@ -22445,15 +22445,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 1403 +size: 1402 location: clients/tests/test-client.py:test_004()/346 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1205 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR 13:E0:74:85:7C:D9 @@ -22462,15 +22462,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 1376 +size: 1374 location: clients/tests/test-client.py:test_004()/347 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1188 bytes +stdout: 1186 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR 13:E0:74:85:7C:D9 @@ -22479,15 +22479,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 1403 +size: 1402 location: clients/tests/test-client.py:test_004()/348 cmd: $NMCLI --mode tabular -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1205 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR 13:E0:74:85:7C:D9 @@ -22712,18 +22712,18 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 3299 +size: 3297 location: clients/tests/test-client.py:test_004()/363 cmd: $NMCLI --mode tabular -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3143 bytes +stdout: 3141 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -22752,18 +22752,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3362 +size: 3361 location: clients/tests/test-client.py:test_004()/364 cmd: $NMCLI --mode tabular -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3196 bytes +stdout: 3195 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -22792,12 +22792,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1138 +size: 1136 location: clients/tests/test-client.py:test_004()/365 cmd: $NMCLI --mode tabular -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 980 bytes +stdout: 978 bytes >>> DEVICE wlan0 @@ -22811,8 +22811,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -22827,12 +22827,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: 1149 +size: 1148 location: clients/tests/test-client.py:test_004()/366 cmd: $NMCLI --mode tabular -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 981 bytes +stdout: 980 bytes >>> DEVICE wlan0 @@ -22846,8 +22846,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -22862,18 +22862,18 @@ 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: 3354 +size: 3352 location: clients/tests/test-client.py:test_004()/367 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: 3060 bytes +stdout: 3058 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +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 @@ -22899,18 +22899,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3417 +size: 3416 location: clients/tests/test-client.py:test_004()/368 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: 3113 bytes +stdout: 3112 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +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 @@ -23083,7 +23083,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 @@ -23112,7 +23112,7 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — PoÅ‚Ä…czono z VPN key1 = val1 | key2 = val2 | key3 = val3 @@ -23141,7 +23141,7 @@ name method browser-only pac-url pac-script proxy none no -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 - VPN connected key1 = val1 | key2 = val2 | key3 = val3 @@ -23170,7 +23170,7 @@ name method browser-only pac-url pac-script proxy none nie -- -- GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG VPN openvpn -- -- *** VPN connection con-vpn-1 *** 5 — PoÅ‚Ä…czono z VPN key1 = val1 | key2 = val2 | key3 = val3 @@ -23254,7 +23254,7 @@ returncode: 0 stdout: 502 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 683 @@ -23265,75 +23265,75 @@ returncode: 0 stdout: 504 bytes >>> GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< -size: 566 +size: 570 location: clients/tests/test-client.py:test_004()/383 cmd: $NMCLI --mode tabular --color yes dev s lang: C returncode: 0 -stdout: 418 bytes +stdout: 422 bytes >>> DEVICE TYPE STATE CONNECTION -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m <<< -size: 581 +size: 586 location: clients/tests/test-client.py:test_004()/384 cmd: $NMCLI --mode tabular --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 423 bytes +stdout: 428 bytes >>> DEVICE TYPE STATE CONNECTION -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m <<< -size: 1793 +size: 1802 location: clients/tests/test-client.py:test_004()/385 cmd: $NMCLI --mode tabular --color yes -f all dev status lang: C returncode: 0 -stdout: 1632 bytes +stdout: 1641 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32munknown[0m [32munknown[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 1808 +size: 1818 location: clients/tests/test-client.py:test_004()/386 cmd: $NMCLI --mode tabular --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1637 bytes +stdout: 1647 bytes >>> DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mnieznane[0m [32mnieznane[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 6368 +size: 6366 location: clients/tests/test-client.py:test_004()/387 cmd: $NMCLI --mode tabular --color yes dev show lang: C returncode: 0 -stdout: 6216 bytes +stdout: 6214 bytes >>> DEVICE wlan0 @@ -23347,8 +23347,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -23384,7 +23384,7 @@ CON-PATH -- NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -23414,7 +23414,7 @@ CON-PATH -- NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -23477,12 +23477,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: 6395 +size: 6390 location: clients/tests/test-client.py:test_004()/388 cmd: $NMCLI --mode tabular --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 6233 bytes +stdout: 6228 bytes >>> DEVICE wlan0 @@ -23496,8 +23496,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -23532,8 +23532,8 @@ CONNECTION CON-PATH -- -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -23562,8 +23562,8 @@ CONNECTION CON-PATH -- -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -23626,18 +23626,18 @@ 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: 16350 +size: 16348 location: clients/tests/test-client.py:test_004()/389 cmd: $NMCLI --mode tabular --color yes -f all dev show lang: C returncode: 0 -stdout: 16190 bytes +stdout: 16188 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -23666,7 +23666,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -23675,7 +23675,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -23693,7 +23693,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- eth1 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no 100 Mb/s no no @@ -23702,7 +23702,7 @@ NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -23720,7 +23720,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no unknown no no @@ -23750,7 +23750,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES no unknown no no @@ -23779,18 +23779,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 16509 +size: 16504 location: clients/tests/test-client.py:test_004()/390 cmd: $NMCLI --mode tabular --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 16339 bytes +stdout: 16334 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -23819,7 +23819,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -23827,8 +23827,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.49.34/22 | 192.168.135.86/19 -- -- 192.168.45.230 | 192.168.180.201 | 192.168.253.2 sear4.foo2.bar | sear4.foo1.bar 192.168.163.23 | 192.168.151.246 @@ -23846,7 +23846,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- eth1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie 100 Mb/s nie nie @@ -23854,8 +23854,8 @@ CAPABILITIES nie 100 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS IP4 192.168.127.210/25 192.168.88.4 dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583 192.168.16.144 | 192.168.79.53 | 192.168.237.155 sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar 192.168.211.91 | 192.168.58.182 | 192.168.114.97 @@ -23873,7 +23873,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie nieznane nie nie @@ -23903,7 +23903,7 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV CAPABILITIES nie nieznane nie nie @@ -23932,12 +23932,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1137 +size: 1135 location: clients/tests/test-client.py:test_004()/391 cmd: $NMCLI --mode tabular --color yes dev show wlan0 lang: C returncode: 0 -stdout: 980 bytes +stdout: 978 bytes >>> DEVICE wlan0 @@ -23951,8 +23951,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -23967,12 +23967,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: 1148 +size: 1147 location: clients/tests/test-client.py:test_004()/392 cmd: $NMCLI --mode tabular --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 981 bytes +stdout: 980 bytes >>> DEVICE wlan0 @@ -23986,8 +23986,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -24002,18 +24002,18 @@ 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: 3578 +size: 3576 location: clients/tests/test-client.py:test_004()/393 cmd: $NMCLI --mode tabular --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3413 bytes +stdout: 3411 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -24042,18 +24042,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3641 +size: 3640 location: clients/tests/test-client.py:test_004()/394 cmd: $NMCLI --mode tabular --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3466 bytes +stdout: 3465 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -24082,15 +24082,15 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1388 +size: 1386 location: clients/tests/test-client.py:test_004()/395 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1188 bytes +stdout: 1186 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR 13:E0:74:85:7C:D9 @@ -24099,15 +24099,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 1415 +size: 1414 location: clients/tests/test-client.py:test_004()/396 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1205 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR 13:E0:74:85:7C:D9 @@ -24116,15 +24116,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 1388 +size: 1386 location: clients/tests/test-client.py:test_004()/397 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1188 bytes +stdout: 1186 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR 13:E0:74:85:7C:D9 @@ -24133,15 +24133,15 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 1415 +size: 1414 location: clients/tests/test-client.py:test_004()/398 cmd: $NMCLI --mode tabular --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1205 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR 13:E0:74:85:7C:D9 @@ -24150,30 +24150,30 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 657 +size: 660 location: clients/tests/test-client.py:test_004()/399 cmd: $NMCLI --mode tabular --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 486 bytes +stdout: 489 bytes >>> DEVICE TYPE DBUS-PATH -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 667 +size: 670 location: clients/tests/test-client.py:test_004()/400 cmd: $NMCLI --mode tabular --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 486 bytes +stdout: 489 bytes >>> DEVICE TYPE DBUS-PATH -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -24366,18 +24366,18 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 3581 +size: 3579 location: clients/tests/test-client.py:test_004()/413 cmd: $NMCLI --mode tabular --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3413 bytes +stdout: 3411 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER INTERFACE-FLAGS yes yes no @@ -24406,18 +24406,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3644 +size: 3643 location: clients/tests/test-client.py:test_004()/414 cmd: $NMCLI --mode tabular --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3466 bytes +stdout: 3465 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER INTERFACE-FLAGS tak tak nie @@ -24446,12 +24446,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1150 +size: 1148 location: clients/tests/test-client.py:test_004()/415 cmd: $NMCLI --mode tabular --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 980 bytes +stdout: 978 bytes >>> DEVICE wlan0 @@ -24465,8 +24465,8 @@ HWADDR MTU 0 -STATE -20 (unavailable) +STATE +100 (connected) CONNECTION con-vpn-1 @@ -24481,12 +24481,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: 1161 +size: 1160 location: clients/tests/test-client.py:test_004()/416 cmd: $NMCLI --mode tabular --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 981 bytes +stdout: 980 bytes >>> DEVICE wlan0 @@ -24500,8 +24500,8 @@ HWADDR MTU 0 -STATE -20 (niedostÄ™pne) +STATE +100 (poÅ‚Ä…czono) CONNECTION con-vpn-1 @@ -24516,18 +24516,18 @@ 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: 3636 +size: 3634 location: clients/tests/test-client.py:test_004()/417 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: 3330 bytes +stdout: 3328 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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES no unknown no no +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 @@ -24553,18 +24553,18 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3699 +size: 3698 location: clients/tests/test-client.py:test_004()/418 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: 3383 bytes +stdout: 3382 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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV -CAPABILITIES nie nieznane nie nie +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 @@ -24749,7 +24749,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG -------------------------------------------------------------------------------------------------------------------------------- @@ -24791,7 +24791,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG ---------------------------------------------------------------------------------------------------------------------------------- @@ -24833,7 +24833,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG -------------------------------------------------------------------------------------------------------------------------------- @@ -24875,7 +24875,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG ---------------------------------------------------------------------------------------------------------------------------------- @@ -24988,7 +24988,7 @@ stdout: 965 bytes ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 1163 @@ -25003,7 +25003,7 @@ stdout: 987 bytes =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 532 @@ -25018,26 +25018,26 @@ stdout: 387 bytes ===================== DEVICE TYPE STATE CONNECTION ---------------------------------------------------------------- -wlan0 wifi unavailable con-vpn-1 +wlan0 wifi connected con-vpn-1 eth0 ethernet unavailable -- eth1 ethernet unavailable -- wlan1 wifi unavailable -- wlan1 wifi unavailable -- <<< -size: 540 +size: 541 location: clients/tests/test-client.py:test_004()/434 cmd: $NMCLI --mode tabular --pretty dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 385 bytes +stdout: 386 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE CONNECTION -------------------------------------------------------------- -wlan0 wifi niedostÄ™pne con-vpn-1 +wlan0 wifi poÅ‚Ä…czono con-vpn-1 eth0 ethernet niedostÄ™pne -- eth1 ethernet niedostÄ™pne -- wlan1 wifi niedostÄ™pne -- @@ -25056,38 +25056,38 @@ stdout: 1570 bytes ===================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -wlan0 wifi unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi connected unknown unknown /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet unavailable unknown unknown /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 1736 +size: 1737 location: clients/tests/test-client.py:test_004()/436 cmd: $NMCLI --mode tabular --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1568 bytes +stdout: 1569 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -wlan0 wifi niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0 wifi poÅ‚Ä…czono nieznane nieznane /org/freedesktop/NetworkManager/Devices/3 con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 eth0 ethernet niedostÄ™pne nieznane nieznane /org/freedesktop/NetworkManager/Devices/1 -- -- -- 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: 9886 +size: 9883 location: clients/tests/test-client.py:test_004()/437 cmd: $NMCLI --mode tabular --pretty dev show lang: C returncode: 0 -stdout: 9737 bytes +stdout: 9734 bytes >>> ========================== Device details (wlan0) @@ -25108,9 +25108,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -25161,7 +25161,7 @@ CON-PATH NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25204,7 +25204,7 @@ CON-PATH NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25293,12 +25293,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: 10062 +size: 10054 location: clients/tests/test-client.py:test_004()/438 cmd: $NMCLI --mode tabular --pretty dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 9903 bytes +stdout: 9895 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -25319,9 +25319,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -25370,9 +25370,9 @@ CON-PATH ---------- -- -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25413,9 +25413,9 @@ CON-PATH ---------- -- -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25504,23 +25504,23 @@ 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: 24255 +size: 24252 location: clients/tests/test-client.py:test_004()/439 cmd: $NMCLI --mode tabular --pretty -f all dev show lang: C returncode: 0 -stdout: 24098 bytes +stdout: 24095 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -25561,7 +25561,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ========================= 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25573,7 +25573,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25600,7 +25600,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ========================= 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- eth1 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25612,7 +25612,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25639,7 +25639,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ========================== 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- @@ -25682,7 +25682,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ========================== 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- @@ -25720,23 +25720,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 24616 +size: 24607 location: clients/tests/test-client.py:test_004()/440 cmd: $NMCLI --mode tabular --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 24449 bytes +stdout: 24440 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -25777,7 +25777,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ================================== 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25787,9 +25787,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25816,7 +25816,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ================================== 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- eth1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25826,9 +25826,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -25855,7 +25855,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 =================================== 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25898,7 +25898,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x =================================== 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -25936,12 +25936,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1709 +size: 1706 location: clients/tests/test-client.py:test_004()/441 cmd: $NMCLI --mode tabular --pretty dev show wlan0 lang: C returncode: 0 -stdout: 1554 bytes +stdout: 1551 bytes >>> ========================== Device details (wlan0) @@ -25962,9 +25962,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -25983,12 +25983,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: 1749 +size: 1747 location: clients/tests/test-client.py:test_004()/442 cmd: $NMCLI --mode tabular --pretty dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1584 bytes +stdout: 1582 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -26009,9 +26009,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -26030,23 +26030,23 @@ 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: 4866 +size: 4863 location: clients/tests/test-client.py:test_004()/443 cmd: $NMCLI --mode tabular --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 4704 bytes +stdout: 4701 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -26083,23 +26083,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 4974 +size: 4971 location: clients/tests/test-client.py:test_004()/444 cmd: $NMCLI --mode tabular --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4802 bytes +stdout: 4799 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -26136,19 +26136,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2060 +size: 2057 location: clients/tests/test-client.py:test_004()/445 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1863 bytes +stdout: 1860 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR ------------------- @@ -26159,19 +26159,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 2124 +size: 2122 location: clients/tests/test-client.py:test_004()/446 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1917 bytes +stdout: 1915 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR ------------------- @@ -26182,19 +26182,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 2060 +size: 2057 location: clients/tests/test-client.py:test_004()/447 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1863 bytes +stdout: 1860 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR ------------------- @@ -26205,19 +26205,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 2124 +size: 2122 location: clients/tests/test-client.py:test_004()/448 cmd: $NMCLI --mode tabular --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1917 bytes +stdout: 1915 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR ------------------- @@ -26548,23 +26548,23 @@ AP[1] wlan0-ap-2 776C616E302D61702D32 C0:E2:BE:E8:EF:B6 Infrastruktura 1 <<< -size: 4869 +size: 4866 location: clients/tests/test-client.py:test_004()/463 cmd: $NMCLI --mode tabular --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 4704 bytes +stdout: 4701 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -26601,23 +26601,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 4977 +size: 4974 location: clients/tests/test-client.py:test_004()/464 cmd: $NMCLI --mode tabular --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 4802 bytes +stdout: 4799 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -26654,12 +26654,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1722 +size: 1719 location: clients/tests/test-client.py:test_004()/465 cmd: $NMCLI --mode tabular --pretty -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1554 bytes +stdout: 1551 bytes >>> ========================== Device details (wlan0) @@ -26680,9 +26680,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -26701,12 +26701,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: 1762 +size: 1760 location: clients/tests/test-client.py:test_004()/466 cmd: $NMCLI --mode tabular --pretty -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1584 bytes +stdout: 1582 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -26727,9 +26727,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -26748,23 +26748,23 @@ 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: 4882 +size: 4879 location: clients/tests/test-client.py:test_004()/467 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: 4579 bytes +stdout: 4576 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ------------------------------------------------------------------------------------------- @@ -26797,23 +26797,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 4990 +size: 4987 location: clients/tests/test-client.py:test_004()/468 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: 4677 bytes +stdout: 4674 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +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 --------------------------------------------------------------------------------------------- @@ -27057,7 +27057,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG -------------------------------------------------------------------------------------------------------------------------------- @@ -27099,7 +27099,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG ---------------------------------------------------------------------------------------------------------------------------------- @@ -27141,7 +27141,7 @@ proxy none no -- -- ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG -------------------------------------------------------------------------------------------------------------------------------- @@ -27183,7 +27183,7 @@ proxy none nie -- -- =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- NAME TYPE USERNAME GATEWAY BANNER VPN-STATE CFG ---------------------------------------------------------------------------------------------------------------------------------- @@ -27296,7 +27296,7 @@ stdout: 965 bytes ====================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 activated no no -- yes /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< size: 1175 @@ -27311,91 +27311,91 @@ stdout: 987 bytes =========================================================================== GROUP NAME UUID DEVICES IP-IFACE STATE DEFAULT DEFAULT6 SPEC-OBJECT VPN DBUS-PATH CON-PATH ZONE MASTER-PATH ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 -- aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- +GENERAL con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP wlan0 wlan0 aktywowano nie nie -- tak /org/freedesktop/NetworkManager/ActiveConnection/2 /org/freedesktop/NetworkManager/Settings/Connection/3 -- -- <<< -size: 704 +size: 708 location: clients/tests/test-client.py:test_004()/483 cmd: $NMCLI --mode tabular --pretty --color yes dev s lang: C returncode: 0 -stdout: 547 bytes +stdout: 551 bytes >>> ===================== Status of devices ===================== DEVICE TYPE STATE CONNECTION ---------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2m--[0m <<< -size: 712 +size: 717 location: clients/tests/test-client.py:test_004()/484 cmd: $NMCLI --mode tabular --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 545 bytes +stdout: 550 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE CONNECTION -------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mcon-vpn-1[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mcon-vpn-1[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2m--[0m <<< -size: 2100 +size: 2109 location: clients/tests/test-client.py:test_004()/485 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev status lang: C returncode: 0 -stdout: 1930 bytes +stdout: 1939 bytes >>> ===================== Status of devices ===================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mconnected[0m [32munknown[0m [32munknown[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2munavailable[0m [2munknown[0m [2munknown[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 2108 +size: 2118 location: clients/tests/test-client.py:test_004()/486 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1928 bytes +stdout: 1938 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE STATE IP4-CONNECTIVITY IP6-CONNECTIVITY DBUS-PATH CONNECTION CON-UUID CON-PATH --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m [2mcon-vpn-1[0m [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m [32mwifi[0m [32mpoÅ‚Ä…czono[0m [32mnieznane[0m [32mnieznane[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [32mcon-vpn-1[0m [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2m--[0m [2m--[0m [2m--[0m [2meth1[0m [2methernet[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2m--[0m [2m--[0m [2m--[0m [2mwlan1[0m [2mwifi[0m [2mniedostÄ™pne[0m [2mnieznane[0m [2mnieznane[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m [2m--[0m [2m--[0m [2m--[0m <<< -size: 9898 +size: 9895 location: clients/tests/test-client.py:test_004()/487 cmd: $NMCLI --mode tabular --pretty --color yes dev show lang: C returncode: 0 -stdout: 9737 bytes +stdout: 9734 bytes >>> ========================== Device details (wlan0) @@ -27416,9 +27416,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -27469,7 +27469,7 @@ CON-PATH NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27512,7 +27512,7 @@ CON-PATH NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27601,12 +27601,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: 10074 +size: 10066 location: clients/tests/test-client.py:test_004()/488 cmd: $NMCLI --mode tabular --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 9903 bytes +stdout: 9895 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -27627,9 +27627,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -27678,9 +27678,9 @@ CON-PATH ---------- -- -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27721,9 +27721,9 @@ CON-PATH ---------- -- -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27812,23 +27812,23 @@ 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: 24627 +size: 24624 location: clients/tests/test-client.py:test_004()/489 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 24458 bytes +stdout: 24455 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -27869,7 +27869,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ========================= 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth0 -- eth0 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -27881,7 +27881,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27908,7 +27908,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ========================= 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- -- no yes yes no no -- -- -- -- unknown +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/eth1 -- eth1 no yes yes no no -- -- -- -- unknown NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -27920,7 +27920,7 @@ INTERFACE-FLAGS yes yes no NAME CARRIER S390-SUBCHANNELS --------------------------------------------- -WIRED-PROPERTIES off -- +WIRED-PROPERTIES on -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -27947,7 +27947,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ========================== 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- @@ -27990,7 +27990,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ========================== 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 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 -- -- no yes yes no no -- -- -- -- unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- @@ -28028,23 +28028,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 24988 +size: 24979 location: clients/tests/test-client.py:test_004()/490 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 24809 bytes +stdout: 24800 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -28085,7 +28085,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x ================================== 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 eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth0 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/1 -- -- virtual -- -- AB:B7:BF:E2:48:E8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth0 -- eth0 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -28095,9 +28095,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -28124,7 +28124,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 ================================== 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 eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL eth1 ethernet NMDeviceEthernet /org/freedesktop/NetworkManager/Devices/2 -- -- virtual -- -- E7:78:B1:93:2B:22 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/eth1 -- eth1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -28134,9 +28134,9 @@ NAME UP LOWER-UP CARRIER ----------------------------------------- INTERFACE-FLAGS tak tak nie -NAME CARRIER S390-SUBCHANNELS ------------------------------------------------ -WIRED-PROPERTIES wyÅ‚Ä…czone -- +NAME CARRIER S390-SUBCHANNELS +---------------------------------------------- +WIRED-PROPERTIES wÅ‚Ä…czone -- GROUP ADDRESS GATEWAY ROUTE DNS DOMAIN WINS --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -28163,7 +28163,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{1} 5fcfd6d7-1 =================================== 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/4 -- -- virtual -- -- 21:E9:64:81:8C:A8 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -28206,7 +28206,7 @@ CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-x =================================== 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 wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- -- nie tak tak nie nie -- -- -- -- nieznane +GENERAL wlan1 wifi NMDeviceWifi /org/freedesktop/NetworkManager/Devices/5 -- -- virtual -- -- 71:52:AD:63:5C:7C 0 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan1 -- wlan1 nie tak tak nie nie -- -- -- -- nieznane NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------ @@ -28244,12 +28244,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1721 +size: 1718 location: clients/tests/test-client.py:test_004()/491 cmd: $NMCLI --mode tabular --pretty --color yes dev show wlan0 lang: C returncode: 0 -stdout: 1554 bytes +stdout: 1551 bytes >>> ========================== Device details (wlan0) @@ -28270,9 +28270,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -28291,12 +28291,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: 1761 +size: 1759 location: clients/tests/test-client.py:test_004()/492 cmd: $NMCLI --mode tabular --pretty --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1584 bytes +stdout: 1582 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -28317,9 +28317,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -28338,23 +28338,23 @@ 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: 5148 +size: 5145 location: clients/tests/test-client.py:test_004()/493 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 4974 bytes +stdout: 4971 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -28391,23 +28391,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5256 +size: 5253 location: clients/tests/test-client.py:test_004()/494 cmd: $NMCLI --mode tabular --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5072 bytes +stdout: 5069 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -28444,19 +28444,19 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2072 +size: 2069 location: clients/tests/test-client.py:test_004()/495 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1863 bytes +stdout: 1860 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR ------------------- @@ -28467,19 +28467,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 2136 +size: 2134 location: clients/tests/test-client.py:test_004()/496 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1917 bytes +stdout: 1915 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR ------------------- @@ -28490,19 +28490,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 2072 +size: 2069 location: clients/tests/test-client.py:test_004()/497 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1863 bytes +stdout: 1860 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 HWADDR ------------------- @@ -28513,19 +28513,19 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH WIFI-PROPERTIES yes yes yes yes yes yes yes unknown unknown no no <<< -size: 2136 +size: 2134 location: clients/tests/test-client.py:test_004()/498 cmd: $NMCLI --mode tabular --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1917 bytes +stdout: 1915 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 HWADDR ------------------- @@ -28536,38 +28536,38 @@ NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MES WIFI-PROPERTIES tak tak tak tak tak tak tak nieznane nieznane nie nie <<< -size: 813 +size: 816 location: clients/tests/test-client.py:test_004()/499 cmd: $NMCLI --mode tabular --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 633 bytes +stdout: 636 bytes >>> ===================== Status of devices ===================== DEVICE TYPE DBUS-PATH ---------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 816 +size: 819 location: clients/tests/test-client.py:test_004()/500 cmd: $NMCLI --mode tabular --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 626 bytes +stdout: 629 bytes >>> =================== Stan urzÄ…dzenia =================== DEVICE TYPE DBUS-PATH -------------------------------------------------------------------------------- -[2mwlan0[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m [32mwifi[0m [32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m [2methernet[0m [2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m [2mwifi[0m [2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -28856,23 +28856,23 @@ NAME SSID SSID-HEX BSSID MODE CHAN <<< -size: 5151 +size: 5148 location: clients/tests/test-client.py:test_004()/513 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 4974 bytes +stdout: 4971 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -28909,23 +28909,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5259 +size: 5256 location: clients/tests/test-client.py:test_004()/514 cmd: $NMCLI --mode tabular --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5072 bytes +stdout: 5069 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV +----------------------------------------------------------- +CAPABILITIES nie 21 Mb/s nie nie NAME UP LOWER-UP CARRIER ----------------------------------------- @@ -28962,12 +28962,12 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1734 +size: 1731 location: clients/tests/test-client.py:test_004()/515 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1554 bytes +stdout: 1551 bytes >>> ========================== Device details (wlan0) @@ -28988,9 +28988,9 @@ MTU ----- 0 -STATE ------------------- -20 (unavailable) +STATE +----------------- +100 (connected) CONNECTION ------------ @@ -29009,12 +29009,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: 1774 +size: 1772 location: clients/tests/test-client.py:test_004()/516 cmd: $NMCLI --mode tabular --pretty --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1584 bytes +stdout: 1582 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) @@ -29035,9 +29035,9 @@ MTU ----- 0 -STATE ------------------- -20 (niedostÄ™pne) +STATE +----------------- +100 (poÅ‚Ä…czono) CONNECTION ------------ @@ -29056,23 +29056,23 @@ 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: 5164 +size: 5161 location: clients/tests/test-client.py:test_004()/517 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: 4849 bytes +stdout: 4846 bytes >>> ========================== Device details (wlan0) ========================== -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 20 (unavailable) 0 (No reason given) 0 (unknown) 0 (unknown) /sys/devices/virtual/wlan0 -- -- no yes yes no no -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 unknown +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 NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ----------------------------------------------------------- -CAPABILITIES no unknown no no +CAPABILITIES no 21 Mb/s no no NAME WEP WPA WPA2 TKIP CCMP AP ADHOC 2GHZ 5GHZ MESH IBSS-RSN ------------------------------------------------------------------------------------------- @@ -29105,23 +29105,23 @@ NAME AVAILABLE-CONNECTION-PATHS AVAILABLE- CONNECTIONS /org/freedesktop/NetworkManager/Settings/Connection/{2} UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5272 +size: 5269 location: clients/tests/test-client.py:test_004()/518 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: 4947 bytes +stdout: 4944 bytes >>> =================================== Informacje o urzÄ…dzeniu (wlan0) =================================== -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 20 (niedostÄ™pne) 0 (Nie podano przyczyny) 0 (nieznane) 0 (nieznane) /sys/devices/virtual/wlan0 -- -- nie tak tak nie nie -- con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP /org/freedesktop/NetworkManager/ActiveConnection/2 nieznane +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 -NAME CARRIER-DETECT SPEED IS-SOFTWARE SRIOV ------------------------------------------------------------- -CAPABILITIES nie nieznane nie nie +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 --------------------------------------------------------------------------------------------- @@ -29330,67 +29330,67 @@ interface-name <<< -size: 806 +size: 811 location: clients/tests/test-client.py:test_004()/523 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 816 +size: 821 location: clients/tests/test-client.py:test_004()/524 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 806 +size: 811 location: clients/tests/test-client.py:test_004()/525 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 816 +size: 821 location: clients/tests/test-client.py:test_004()/526 cmd: $NMCLI --mode tabular --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< @@ -29442,94 +29442,94 @@ stdout: 96 bytes vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 <<< -size: 355 +size: 360 location: clients/tests/test-client.py:test_004()/531 cmd: $NMCLI --mode tabular --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 190 bytes +stdout: 195 bytes >>> -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: <<< -size: 365 +size: 370 location: clients/tests/test-client.py:test_004()/532 cmd: $NMCLI --mode tabular --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 190 bytes +stdout: 195 bytes >>> -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: <<< -size: 279 +size: 277 location: clients/tests/test-client.py:test_004()/533 cmd: $NMCLI --mode tabular --terse dev s lang: C returncode: 0 -stdout: 135 bytes +stdout: 133 bytes >>> -wlan0:wifi:unavailable:con-vpn-1 +wlan0:wifi:connected:con-vpn-1 eth0:ethernet:unavailable: eth1:ethernet:unavailable: wlan1:wifi:unavailable: wlan1:wifi:unavailable: <<< -size: 289 +size: 287 location: clients/tests/test-client.py:test_004()/534 cmd: $NMCLI --mode tabular --terse dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 135 bytes +stdout: 133 bytes >>> -wlan0:wifi:unavailable:con-vpn-1 +wlan0:wifi:connected:con-vpn-1 eth0:ethernet:unavailable: eth1:ethernet:unavailable: wlan1:wifi:unavailable: wlan1:wifi:unavailable: <<< -size: 677 +size: 675 location: clients/tests/test-client.py:test_004()/535 cmd: $NMCLI --mode tabular --terse -f all dev status lang: C returncode: 0 -stdout: 521 bytes +stdout: 519 bytes >>> -wlan0:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0:wifi:connected:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 eth0:ethernet:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/1::: 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: 687 +size: 685 location: clients/tests/test-client.py:test_004()/536 cmd: $NMCLI --mode tabular --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 521 bytes +stdout: 519 bytes >>> -wlan0:wifi:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 +wlan0:wifi:connected:unknown:unknown:/org/freedesktop/NetworkManager/Devices/3:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2 eth0:ethernet:unavailable:unknown:unknown:/org/freedesktop/NetworkManager/Devices/1::: 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: 3091 +size: 3088 location: clients/tests/test-client.py:test_004()/537 cmd: $NMCLI --mode tabular --terse dev show lang: C returncode: 0 -stdout: 2943 bytes +stdout: 2940 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 @@ -29542,7 +29542,7 @@ AB\:B7\:BF\:E2\:48\:E8 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar @@ -29553,7 +29553,7 @@ E7\:78\:B1\:93\:2B\:22 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar @@ -29578,18 +29578,18 @@ 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: 3101 +size: 3098 location: clients/tests/test-client.py:test_004()/538 cmd: $NMCLI --mode tabular --terse dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 2943 bytes +stdout: 2940 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 @@ -29602,7 +29602,7 @@ AB\:B7\:BF\:E2\:48\:E8 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar @@ -29613,7 +29613,7 @@ E7\:78\:B1\:93\:2B\:22 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar @@ -29638,15 +29638,15 @@ 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: 6770 +size: 6790 location: clients/tests/test-client.py:test_004()/539 cmd: $NMCLI --mode tabular --terse -f all dev show lang: C returncode: 0 -stdout: 6615 bytes +stdout: 6635 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 @@ -29658,27 +29658,27 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no:::::unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 DHCP4:dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1:::no:yes:yes:no:no:::::unknown +GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1::eth1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-3 = val-3 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-5 = val-5 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -29689,7 +29689,7 @@ IP6:2001\:a\:\:fa05\:2ab4\:9300\:e8fe/116 | 2001\:a\:\:e9cf\:bd3\:caba\:99b3/86 DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | 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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -29700,15 +29700,15 @@ 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: 6816 +size: 6836 location: clients/tests/test-client.py:test_004()/540 cmd: $NMCLI --mode tabular --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 6651 bytes +stdout: 6671 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 @@ -29720,27 +29720,27 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no:::::unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 DHCP4:dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1:::no:yes:yes:no:no:::::unknown +GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1::eth1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-3 = val-3 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-5 = val-5 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -29751,7 +29751,7 @@ IP6:2001\:a\:\:fa05\:2ab4\:9300\:e8fe/116 | 2001\:a\:\:e9cf\:bd3\:caba\:99b3/86 DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | 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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -29762,51 +29762,51 @@ 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: 599 +size: 598 location: clients/tests/test-client.py:test_004()/541 cmd: $NMCLI --mode tabular --terse dev show wlan0 lang: C returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 609 +size: 608 location: clients/tests/test-client.py:test_004()/542 cmd: $NMCLI --mode tabular --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 1495 +size: 1499 location: clients/tests/test-client.py:test_004()/543 cmd: $NMCLI --mode tabular --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 1334 bytes +stdout: 1338 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 @@ -29819,15 +29819,15 @@ 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: 1532 +size: 1536 location: clients/tests/test-client.py:test_004()/544 cmd: $NMCLI --mode tabular --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1361 bytes +stdout: 1365 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 @@ -29840,50 +29840,50 @@ 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: 609 +size: 613 location: clients/tests/test-client.py:test_004()/545 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 619 +size: 623 location: clients/tests/test-client.py:test_004()/546 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 609 +size: 613 location: clients/tests/test-client.py:test_004()/547 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 619 +size: 623 location: clients/tests/test-client.py:test_004()/548 cmd: $NMCLI --mode tabular --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 @@ -30078,15 +30078,15 @@ AP[1]:wlan0-ap-2:776C616E302D61702D32:C0\:E2\:BE\:E8\:EF\:B6:Infrastruktura:1:24 <<< -size: 1498 +size: 1502 location: clients/tests/test-client.py:test_004()/563 cmd: $NMCLI --mode tabular --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 1334 bytes +stdout: 1338 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infra:1:54 Mbit/s:92:****:WPA1 WPA2 @@ -30099,15 +30099,15 @@ 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: 1535 +size: 1539 location: clients/tests/test-client.py:test_004()/564 cmd: $NMCLI --mode tabular --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1361 bytes +stdout: 1365 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no AP[1]: :C0\:E2\:BE\:E8\:EF\:B6:wlan0-ap-2:Infrastruktura:1:54 Mb/s:92:****:WPA1 WPA2 @@ -30120,51 +30120,51 @@ 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: 612 +size: 611 location: clients/tests/test-client.py:test_004()/565 cmd: $NMCLI --mode tabular --terse -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 622 +size: 621 location: clients/tests/test-client.py:test_004()/566 cmd: $NMCLI --mode tabular --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 1609 +size: 1613 location: clients/tests/test-client.py:test_004()/567 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: 1307 bytes +stdout: 1311 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 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 @@ -30176,15 +30176,15 @@ 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: 1646 +size: 1650 location: clients/tests/test-client.py:test_004()/568 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: 1334 bytes +stdout: 1338 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 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 @@ -30268,67 +30268,67 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 818 +size: 823 location: clients/tests/test-client.py:test_004()/573 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 828 +size: 833 location: clients/tests/test-client.py:test_004()/574 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 818 +size: 823 location: clients/tests/test-client.py:test_004()/575 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< -size: 828 +size: 833 location: clients/tests/test-client.py:test_004()/576 cmd: $NMCLI --mode tabular --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 652 bytes +stdout: 657 bytes >>> connection:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP::vpn::yes:0:-1:0:-1:0:no:::::-1::0:unknown:default:-1:-1:-1 ipv4:auto::::0::::-1:0::no:no:::0:yes:::0x0:no:yes:-1:: ipv6:auto::::0::::-1:0::no:no:no:yes:-1:stable-privacy:0:::0:yes::0x0: vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 proxy:none:no:: -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: VPN:openvpn:::*** VPN connection con-vpn-1 ***:5 - VPN connected:key1 = val1 | key2 = val2 | key3 = val3 <<< @@ -30380,94 +30380,94 @@ stdout: 96 bytes vpn:org.freedesktop.NetworkManager.openvpn::key1 = val1, key2 = val2, key3 = val3:<hidden>:no:0 <<< -size: 367 +size: 372 location: clients/tests/test-client.py:test_004()/581 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 190 bytes +stdout: 195 bytes >>> -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: <<< -size: 377 +size: 382 location: clients/tests/test-client.py:test_004()/582 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 190 bytes +stdout: 195 bytes >>> -GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0::activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: +GENERAL:con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:wlan0:wlan0:activated:no:no::yes:/org/freedesktop/NetworkManager/ActiveConnection/2:/org/freedesktop/NetworkManager/Settings/Connection/3:: <<< -size: 451 +size: 453 location: clients/tests/test-client.py:test_004()/583 cmd: $NMCLI --mode tabular --terse --color yes dev s lang: C returncode: 0 -stdout: 295 bytes +stdout: 297 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2mcon-vpn-1[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32mcon-vpn-1[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m <<< -size: 461 +size: 463 location: clients/tests/test-client.py:test_004()/584 cmd: $NMCLI --mode tabular --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 295 bytes +stdout: 297 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2mcon-vpn-1[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32mcon-vpn-1[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2m[0m <<< -size: 1049 +size: 1056 location: clients/tests/test-client.py:test_004()/585 cmd: $NMCLI --mode tabular --terse --color yes -f all dev status lang: C returncode: 0 -stdout: 881 bytes +stdout: 888 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m:[2mcon-vpn-1[0m:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32munknown[0m:[32munknown[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m:[32mcon-vpn-1[0m:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m:[2m[0m:[2m[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m:[2m[0m:[2m[0m:[2m[0m <<< -size: 1059 +size: 1066 location: clients/tests/test-client.py:test_004()/586 cmd: $NMCLI --mode tabular --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 881 bytes +stdout: 888 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m:[2mcon-vpn-1[0m:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +[32mwlan0[0m:[32mwifi[0m:[32mconnected[0m:[32munknown[0m:[32munknown[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m:[32mcon-vpn-1[0m:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m [2meth0[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m:[2m[0m:[2m[0m:[2m[0m [2meth1[0m:[2methernet[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m:[2m[0m:[2m[0m:[2m[0m [2mwlan1[0m:[2mwifi[0m:[2munavailable[0m:[2munknown[0m:[2munknown[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m:[2m[0m:[2m[0m:[2m[0m <<< -size: 3103 +size: 3100 location: clients/tests/test-client.py:test_004()/587 cmd: $NMCLI --mode tabular --terse --color yes dev show lang: C returncode: 0 -stdout: 2943 bytes +stdout: 2940 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 @@ -30480,7 +30480,7 @@ AB\:B7\:BF\:E2\:48\:E8 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar @@ -30491,7 +30491,7 @@ E7\:78\:B1\:93\:2B\:22 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar @@ -30516,18 +30516,18 @@ 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: 3113 +size: 3110 location: clients/tests/test-client.py:test_004()/588 cmd: $NMCLI --mode tabular --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 2943 bytes +stdout: 2940 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 @@ -30540,7 +30540,7 @@ AB\:B7\:BF\:E2\:48\:E8 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar @@ -30551,7 +30551,7 @@ E7\:78\:B1\:93\:2B\:22 20 (unavailable) -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar @@ -30576,15 +30576,15 @@ 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: 7142 +size: 7162 location: clients/tests/test-client.py:test_004()/589 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 6975 bytes +stdout: 6995 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -30596,27 +30596,27 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no:::::unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 DHCP4:dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1:::no:yes:yes:no:no:::::unknown +GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1::eth1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-3 = val-3 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-5 = val-5 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -30627,7 +30627,7 @@ IP6:2001\:a\:\:fa05\:2ab4\:9300\:e8fe/116 | 2001\:a\:\:e9cf\:bd3\:caba\:99b3/86 DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | 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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -30638,15 +30638,15 @@ 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: 7188 +size: 7208 location: clients/tests/test-client.py:test_004()/590 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7011 bytes +stdout: 7031 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -30658,27 +30658,27 @@ IP6:::dst = 2001\:a\:\:dd5b\:aa7b\:b4a2\:e42/102, nh = \:\:, mt = 2504159086::se DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 -GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0:::no:yes:yes:no:no:::::unknown +GENERAL:eth0:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/1:::virtual:::AB\:B7\:BF\:E2\:48\:E8:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::eth0:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.49.34/22 | 192.168.135.86/19:::192.168.45.230 | 192.168.180.201 | 192.168.253.2:sear4.foo2.bar | sear4.foo1.bar:192.168.163.23 | 192.168.151.246 DHCP4:dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:ed81\:3d7\:c2e9\:df82/99:::2001\:a\:\:2703\:f06\:9619\:d89f | 2001\:a\:\:3a75\:3682\:c683\:8541 | 2001\:a\:\:584e\:912\:d5ee\:c74f:sear6.foo4.bar | sear6.fo.o.bar DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1:::no:yes:yes:no:no:::::unknown +GENERAL:eth1:ethernet:NMDeviceEthernet:/org/freedesktop/NetworkManager/Devices/2:::virtual:::E7\:78\:B1\:93\:2B\:22:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth1::eth1:no:yes:yes:no:no:::::unknown CAPABILITIES:no:100 Mb/s:no:no INTERFACE-FLAGS:yes:yes:no -WIRED-PROPERTIES:off: +WIRED-PROPERTIES:on: IP4:192.168.127.210/25:192.168.88.4:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 | dst = 192.168.135.81/32, nh = 192.168.32.11, mt = 1316413247 | dst = 192.168.24.65/26, nh = 192.168.23.163, mt = 3855574583:192.168.16.144 | 192.168.79.53 | 192.168.237.155:sear4.foo4.bar | sear4.foo3.bar | sear4.foo1.bar:192.168.211.91 | 192.168.58.182 | 192.168.114.97 DHCP4:dhcp-4-opt-0 = val-0 | dhcp-4-opt-1 = val-1 | dhcp-4-opt-2 = val-2 | dhcp-4-opt-3 = val-3 | dhcp-4-opt-4 = val-4 | dhcp-4-opt-5 = val-5 | dhcp-4-opt-7 = val-7 | dhcp-4-opt-8 = val-8 | dhcp-4-opt-9 = val-9 IP6:2001\:a\:\:1c1\:c178\:169f\:2b80/93 | 2001\:a\:\:1f79\:e0fb\:87b9\:3cc6/123::dst = 2001\:a\:\:3166\:7ed1\:e4ae\:7612/123, nh = \:\::2001\:a\:\:edda\:955\:dcf4\:23d4 | 2001\:a\:\:109f\:aa0f\:fb4a\:9d5a | 2001\:a\:\:61cf\:7c82\:e9c0\:c952:sear6.foo1.bar DHCP6:dhcp-6-opt-2 = val-2 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-8 = val-8 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 -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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -30689,7 +30689,7 @@ IP6:2001\:a\:\:fa05\:2ab4\:9300\:e8fe/116 | 2001\:a\:\:e9cf\:bd3\:caba\:99b3/86 DHCP6:dhcp-6-opt-0 = val-0 | dhcp-6-opt-1 = val-1 | dhcp-6-opt-2 = val-2 | dhcp-6-opt-3 = val-3 | dhcp-6-opt-4 = val-4 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-6-opt-7 = val-7 | dhcp-6-opt-9 = val-9 CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{2}:UUID-con-xx1-REPLACED-REPLACED-REPLA | 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:::no:yes:yes:no:no:::::unknown +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes:unknown:unknown:no:no @@ -30700,51 +30700,51 @@ 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: 611 +size: 610 location: clients/tests/test-client.py:test_004()/591 cmd: $NMCLI --mode tabular --terse --color yes dev show wlan0 lang: C returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 621 +size: 620 location: clients/tests/test-client.py:test_004()/592 cmd: $NMCLI --mode tabular --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 1777 +size: 1781 location: clients/tests/test-client.py:test_004()/593 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 1604 bytes +stdout: 1608 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -30757,15 +30757,15 @@ 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: 1814 +size: 1818 location: clients/tests/test-client.py:test_004()/594 cmd: $NMCLI --mode tabular --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1631 bytes +stdout: 1635 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -30778,76 +30778,76 @@ 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: 621 +size: 625 location: clients/tests/test-client.py:test_004()/595 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 631 +size: 635 location: clients/tests/test-client.py:test_004()/596 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 621 +size: 625 location: clients/tests/test-client.py:test_004()/597 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 631 +size: 635 location: clients/tests/test-client.py:test_004()/598 cmd: $NMCLI --mode tabular --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 414 bytes +stdout: 418 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown +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 <<< -size: 570 +size: 573 location: clients/tests/test-client.py:test_004()/599 cmd: $NMCLI --mode tabular --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 391 bytes +stdout: 394 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m:[32mwifi[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 580 +size: 583 location: clients/tests/test-client.py:test_004()/600 cmd: $NMCLI --mode tabular --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 391 bytes +stdout: 394 bytes >>> -[2mwlan0[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/3[0m +[32mwlan0[0m:[32mwifi[0m:[32m/org/freedesktop/NetworkManager/Devices/3[0m [2meth0[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/1[0m [2meth1[0m:[2methernet[0m:[2m/org/freedesktop/NetworkManager/Devices/2[0m [2mwlan1[0m:[2mwifi[0m:[2m/org/freedesktop/NetworkManager/Devices/4[0m @@ -31016,15 +31016,15 @@ stdout: 422 bytes <<< -size: 1780 +size: 1784 location: clients/tests/test-client.py:test_004()/613 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 1604 bytes +stdout: 1608 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -31037,15 +31037,15 @@ 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: 1817 +size: 1821 location: clients/tests/test-client.py:test_004()/614 cmd: $NMCLI --mode tabular --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1631 bytes +stdout: 1635 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 WIFI-PROPERTIES:yes:yes:yes:yes:yes:yes:yes: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 @@ -31058,51 +31058,51 @@ 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: 624 +size: 623 location: clients/tests/test-client.py:test_004()/615 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 634 +size: 633 location: clients/tests/test-client.py:test_004()/616 cmd: $NMCLI --mode tabular --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 446 bytes +stdout: 445 bytes >>> wlan0 wifi 13\:E0\:74\:85\:7C\:D9 0 -20 (unavailable) +100 (connected) con-vpn-1 /org/freedesktop/NetworkManager/ActiveConnection/2 IP4:192.168.228.18/32 | 192.168.209.179/25:192.168.41.120:::sear4.foo2.bar | sear4.fo.x.y | sear4.foo1.bar | sear4.foo4.bar | sear4.fo.o.bar:192.168.120.79 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: 1891 +size: 1895 location: clients/tests/test-client.py:test_004()/617 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: 1577 bytes +stdout: 1581 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 [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 @@ -31114,15 +31114,15 @@ 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: 1928 +size: 1932 location: clients/tests/test-client.py:test_004()/618 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: 1604 bytes +stdout: 1608 bytes >>> -GENERAL:wlan0:wifi:NMDeviceWifi:/org/freedesktop/NetworkManager/Devices/3:::virtual:::13\:E0\:74\:85\:7C\:D9:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/wlan0:::no:yes:yes:no:no::con-vpn-1:UUID-con-vpn-1-REPLACED-REPLACED-REP:/org/freedesktop/NetworkManager/ActiveConnection/2:unknown -CAPABILITIES:no:unknown:no:no +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 [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 @@ -31206,12 +31206,12 @@ UUID-con-xx1-REPLACED-REPLACED-REPLA <<< -size: 5166 +size: 5169 location: clients/tests/test-client.py:test_004()/623 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31300,7 +31300,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -31320,12 +31320,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5196 +size: 5199 location: clients/tests/test-client.py:test_004()/624 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31414,7 +31414,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -31434,12 +31434,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5166 +size: 5169 location: clients/tests/test-client.py:test_004()/625 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31528,7 +31528,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -31548,12 +31548,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5196 +size: 5199 location: clients/tests/test-client.py:test_004()/626 cmd: $NMCLI --mode multiline con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -31642,7 +31642,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -31878,17 +31878,17 @@ vpn.persistent: nie vpn.timeout: 0 <<< -size: 869 +size: 872 location: clients/tests/test-client.py:test_004()/631 cmd: $NMCLI --mode multiline -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 713 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -31900,17 +31900,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 882 +size: 885 location: clients/tests/test-client.py:test_004()/632 cmd: $NMCLI --mode multiline -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 713 bytes +stdout: 716 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -31922,16 +31922,16 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 1081 +size: 1079 location: clients/tests/test-client.py:test_004()/633 cmd: $NMCLI --mode multiline dev s lang: C returncode: 0 -stdout: 943 bytes +stdout: 941 bytes >>> DEVICE: wlan0 TYPE: wifi -STATE: unavailable +STATE: connected CONNECTION: con-vpn-1 DEVICE: eth0 TYPE: ethernet @@ -31951,16 +31951,16 @@ STATE: unavailable CONNECTION: -- <<< -size: 1096 +size: 1095 location: clients/tests/test-client.py:test_004()/634 cmd: $NMCLI --mode multiline dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 948 bytes +stdout: 947 bytes >>> DEVICE: wlan0 TYPE: wifi -STATE: niedostÄ™pne +STATE: poÅ‚Ä…czono CONNECTION: con-vpn-1 DEVICE: eth0 TYPE: ethernet @@ -31980,16 +31980,16 @@ STATE: niedostÄ™pne CONNECTION: -- <<< -size: 2496 +size: 2494 location: clients/tests/test-client.py:test_004()/635 cmd: $NMCLI --mode multiline -f all dev status lang: C returncode: 0 -stdout: 2345 bytes +stdout: 2343 bytes >>> DEVICE: wlan0 TYPE: wifi -STATE: unavailable +STATE: connected IP4-CONNECTIVITY: unknown IP6-CONNECTIVITY: unknown DBUS-PATH: /org/freedesktop/NetworkManager/Devices/3 @@ -32034,16 +32034,16 @@ CON-UUID: -- CON-PATH: -- <<< -size: 2521 +size: 2520 location: clients/tests/test-client.py:test_004()/636 cmd: $NMCLI --mode multiline -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 2360 bytes +stdout: 2359 bytes >>> DEVICE: wlan0 TYPE: wifi -STATE: niedostÄ™pne +STATE: poÅ‚Ä…czono IP4-CONNECTIVITY: nieznane IP6-CONNECTIVITY: nieznane DBUS-PATH: /org/freedesktop/NetworkManager/Devices/3 @@ -32088,18 +32088,18 @@ CON-UUID: -- CON-PATH: -- <<< -size: 8060 +size: 8057 location: clients/tests/test-client.py:test_004()/637 cmd: $NMCLI --mode multiline dev show lang: C returncode: 0 -stdout: 7918 bytes +stdout: 7915 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -32127,7 +32127,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -32153,7 +32153,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -32234,18 +32234,18 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 8091 +size: 8089 location: clients/tests/test-client.py:test_004()/638 cmd: $NMCLI --mode multiline dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7939 bytes +stdout: 7937 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -32273,7 +32273,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -32299,7 +32299,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -32380,12 +32380,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22443 +size: 22453 location: clients/tests/test-client.py:test_004()/639 cmd: $NMCLI --mode multiline -f all dev show lang: C returncode: 0 -stdout: 22293 bytes +stdout: 22303 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -32398,13 +32398,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -32416,7 +32416,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -32506,7 +32506,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -32524,7 +32524,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -32574,7 +32574,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -32592,7 +32592,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -32649,7 +32649,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -32745,7 +32745,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -32804,12 +32804,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22604 +size: 22616 location: clients/tests/test-client.py:test_004()/640 cmd: $NMCLI --mode multiline -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22444 bytes +stdout: 22456 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -32822,13 +32822,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -32840,7 +32840,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -32930,7 +32930,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -32948,7 +32948,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -32998,7 +32998,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -33016,7 +33016,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -33073,7 +33073,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -33169,7 +33169,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -33228,18 +33228,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1511 +size: 1510 location: clients/tests/test-client.py:test_004()/641 cmd: $NMCLI --mode multiline dev show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -33272,7 +33272,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -33294,12 +33294,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5376 +size: 5378 location: clients/tests/test-client.py:test_004()/643 cmd: $NMCLI --mode multiline -f all dev show wlan0 lang: C returncode: 0 -stdout: 5221 bytes +stdout: 5223 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33312,13 +33312,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -33330,7 +33330,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -33404,12 +33404,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5434 +size: 5438 location: clients/tests/test-client.py:test_004()/644 cmd: $NMCLI --mode multiline -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5269 bytes +stdout: 5273 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33422,13 +33422,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -33440,7 +33440,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -33514,12 +33514,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2184 +size: 2186 location: clients/tests/test-client.py:test_004()/645 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33532,13 +33532,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -33563,12 +33563,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2210 +size: 2213 location: clients/tests/test-client.py:test_004()/646 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33581,13 +33581,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -33612,12 +33612,12 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2184 +size: 2186 location: clients/tests/test-client.py:test_004()/647 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33630,13 +33630,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -33661,12 +33661,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2210 +size: 2213 location: clients/tests/test-client.py:test_004()/648 cmd: $NMCLI --mode multiline -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -33679,13 +33679,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -34320,12 +34320,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 5379 +size: 5381 location: clients/tests/test-client.py:test_004()/663 cmd: $NMCLI --mode multiline -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5221 bytes +stdout: 5223 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34338,13 +34338,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -34356,7 +34356,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -34430,12 +34430,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5437 +size: 5441 location: clients/tests/test-client.py:test_004()/664 cmd: $NMCLI --mode multiline -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5269 bytes +stdout: 5273 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34448,13 +34448,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -34466,7 +34466,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -34540,18 +34540,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1524 +size: 1523 location: clients/tests/test-client.py:test_004()/665 cmd: $NMCLI --mode multiline -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -34584,7 +34584,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -34606,12 +34606,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5386 +size: 5388 location: clients/tests/test-client.py:test_004()/667 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: 5090 bytes +stdout: 5092 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34624,13 +34624,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -34642,7 +34642,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no WIFI-PROPERTIES.WEP: yes @@ -34713,12 +34713,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5443 +size: 5447 location: clients/tests/test-client.py:test_004()/668 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: 5137 bytes +stdout: 5141 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -34731,13 +34731,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -34749,7 +34749,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie WIFI-PROPERTIES.WEP: tak @@ -34928,12 +34928,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 5178 +size: 5181 location: clients/tests/test-client.py:test_004()/673 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35022,7 +35022,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -35042,12 +35042,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5208 +size: 5211 location: clients/tests/test-client.py:test_004()/674 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35136,7 +35136,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -35156,12 +35156,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5178 +size: 5181 location: clients/tests/test-client.py:test_004()/675 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 5017 bytes +stdout: 5020 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35250,7 +35250,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -35270,12 +35270,12 @@ VPN.CFG[2]: key2 = val2 VPN.CFG[3]: key3 = val3 <<< -size: 5208 +size: 5211 location: clients/tests/test-client.py:test_004()/676 cmd: $NMCLI --mode multiline --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5037 bytes +stdout: 5040 bytes >>> connection.id: con-vpn-1 connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -35364,7 +35364,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -35600,17 +35600,17 @@ vpn.persistent: nie vpn.timeout: 0 <<< -size: 881 +size: 884 location: clients/tests/test-client.py:test_004()/681 cmd: $NMCLI --mode multiline --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 710 bytes +stdout: 713 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -35622,17 +35622,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 894 +size: 897 location: clients/tests/test-client.py:test_004()/682 cmd: $NMCLI --mode multiline --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 713 bytes +stdout: 716 bytes >>> GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -35644,17 +35644,17 @@ GENERAL.ZONE: -- GENERAL.MASTER-PATH: -- <<< -size: 1254 +size: 1256 location: clients/tests/test-client.py:test_004()/683 cmd: $NMCLI --mode multiline --color yes dev s lang: C returncode: 0 -stdout: 1103 bytes +stdout: 1105 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2munavailable[0m -CONNECTION: [2mcon-vpn-1[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mconnected[0m +CONNECTION: [32mcon-vpn-1[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m STATE: [2munavailable[0m @@ -35673,17 +35673,17 @@ STATE: [2munavailable[0m CONNECTION: [2m--[0m <<< -size: 1269 +size: 1272 location: clients/tests/test-client.py:test_004()/684 cmd: $NMCLI --mode multiline --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 1108 bytes +stdout: 1111 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2mniedostÄ™pne[0m -CONNECTION: [2mcon-vpn-1[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mpoÅ‚Ä…czono[0m +CONNECTION: [32mcon-vpn-1[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m STATE: [2mniedostÄ™pne[0m @@ -35702,22 +35702,22 @@ STATE: [2mniedostÄ™pne[0m CONNECTION: [2m--[0m <<< -size: 2868 +size: 2875 location: clients/tests/test-client.py:test_004()/685 cmd: $NMCLI --mode multiline --color yes -f all dev status lang: C returncode: 0 -stdout: 2705 bytes +stdout: 2712 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2munavailable[0m -IP4-CONNECTIVITY: [2munknown[0m -IP6-CONNECTIVITY: [2munknown[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION: [2mcon-vpn-1[0m -CON-UUID: [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH: [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mconnected[0m +IP4-CONNECTIVITY: [32munknown[0m +IP6-CONNECTIVITY: [32munknown[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION: [32mcon-vpn-1[0m +CON-UUID: [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH: [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m STATE: [2munavailable[0m @@ -35756,22 +35756,22 @@ CON-UUID: [2m--[0m CON-PATH: [2m--[0m <<< -size: 2893 +size: 2901 location: clients/tests/test-client.py:test_004()/686 cmd: $NMCLI --mode multiline --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 2720 bytes +stdout: 2728 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2mniedostÄ™pne[0m -IP4-CONNECTIVITY: [2mnieznane[0m -IP6-CONNECTIVITY: [2mnieznane[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION: [2mcon-vpn-1[0m -CON-UUID: [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH: [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mpoÅ‚Ä…czono[0m +IP4-CONNECTIVITY: [32mnieznane[0m +IP6-CONNECTIVITY: [32mnieznane[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION: [32mcon-vpn-1[0m +CON-UUID: [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH: [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m STATE: [2mniedostÄ™pne[0m @@ -35810,18 +35810,18 @@ CON-UUID: [2m--[0m CON-PATH: [2m--[0m <<< -size: 8072 +size: 8069 location: clients/tests/test-client.py:test_004()/687 cmd: $NMCLI --mode multiline --color yes dev show lang: C returncode: 0 -stdout: 7918 bytes +stdout: 7915 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -35849,7 +35849,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -35875,7 +35875,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (unavailable) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -35956,18 +35956,18 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 8103 +size: 8101 location: clients/tests/test-client.py:test_004()/688 cmd: $NMCLI --mode multiline --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 7939 bytes +stdout: 7937 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -35995,7 +35995,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -36021,7 +36021,7 @@ GENERAL.MTU: 0 GENERAL.STATE: 20 (niedostÄ™pne) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -36102,12 +36102,12 @@ IP6.DNS[1]: 2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]: sear6.fo.x.y <<< -size: 22779 +size: 22789 location: clients/tests/test-client.py:test_004()/689 cmd: $NMCLI --mode multiline --color yes -f all dev show lang: C returncode: 0 -stdout: 22617 bytes +stdout: 22627 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -36120,13 +36120,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -36138,7 +36138,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -36228,7 +36228,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -36246,7 +36246,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -36296,7 +36296,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -36314,7 +36314,7 @@ CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -36371,7 +36371,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -36467,7 +36467,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -36526,12 +36526,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 22940 +size: 22952 location: clients/tests/test-client.py:test_004()/690 cmd: $NMCLI --mode multiline --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 22768 bytes +stdout: 22780 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -36544,13 +36544,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -36562,7 +36562,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -36652,7 +36652,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -36670,7 +36670,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 IP4.GATEWAY: -- @@ -36720,7 +36720,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -36738,7 +36738,7 @@ CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 IP4.ROUTE[1]: dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -36795,7 +36795,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -36891,7 +36891,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -36950,18 +36950,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1523 +size: 1522 location: clients/tests/test-client.py:test_004()/691 cmd: $NMCLI --mode multiline --color yes dev show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -36994,7 +36994,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -37016,12 +37016,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5631 +size: 5633 location: clients/tests/test-client.py:test_004()/693 cmd: $NMCLI --mode multiline --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 5464 bytes +stdout: 5466 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37034,13 +37034,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -37052,7 +37052,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -37126,12 +37126,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5689 +size: 5693 location: clients/tests/test-client.py:test_004()/694 cmd: $NMCLI --mode multiline --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5512 bytes +stdout: 5516 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37144,13 +37144,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -37162,7 +37162,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -37236,12 +37236,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 2196 +size: 2198 location: clients/tests/test-client.py:test_004()/695 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37254,13 +37254,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -37285,12 +37285,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2222 +size: 2225 location: clients/tests/test-client.py:test_004()/696 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37303,13 +37303,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -37334,12 +37334,12 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 2196 +size: 2198 location: clients/tests/test-client.py:test_004()/697 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1994 bytes +stdout: 1996 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37352,13 +37352,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -37383,12 +37383,12 @@ WIFI-PROPERTIES.MESH: no WIFI-PROPERTIES.IBSS-RSN: no <<< -size: 2222 +size: 2225 location: clients/tests/test-client.py:test_004()/698 cmd: $NMCLI --mode multiline --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2010 bytes +stdout: 2013 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -37401,13 +37401,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -37432,16 +37432,16 @@ WIFI-PROPERTIES.MESH: nie WIFI-PROPERTIES.IBSS-RSN: nie <<< -size: 1164 +size: 1167 location: clients/tests/test-client.py:test_004()/699 cmd: $NMCLI --mode multiline --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 991 bytes +stdout: 994 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/1[0m @@ -37456,16 +37456,16 @@ TYPE: [2mwifi[0m DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 1174 +size: 1177 location: clients/tests/test-client.py:test_004()/700 cmd: $NMCLI --mode multiline --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 991 bytes +stdout: 994 bytes >>> -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m DEVICE: [2meth0[0m TYPE: [2methernet[0m DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/1[0m @@ -38042,12 +38042,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 5634 +size: 5636 location: clients/tests/test-client.py:test_004()/713 cmd: $NMCLI --mode multiline --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 5464 bytes +stdout: 5466 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38060,13 +38060,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -38078,7 +38078,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no INTERFACE-FLAGS.UP: yes @@ -38152,12 +38152,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5692 +size: 5696 location: clients/tests/test-client.py:test_004()/714 cmd: $NMCLI --mode multiline --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 5512 bytes +stdout: 5516 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38170,13 +38170,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -38188,7 +38188,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie INTERFACE-FLAGS.UP: tak @@ -38262,18 +38262,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1536 +size: 1535 location: clients/tests/test-client.py:test_004()/715 cmd: $NMCLI --mode multiline --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 1363 bytes +stdout: 1362 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -38306,7 +38306,7 @@ GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.CONNECTION: con-vpn-1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]: 192.168.228.18/32 @@ -38328,12 +38328,12 @@ IP6.DOMAIN[5]: sear6.foo3.bar IP6.DOMAIN[6]: sear6.foo4.bar <<< -size: 5641 +size: 5643 location: clients/tests/test-client.py:test_004()/717 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: 5333 bytes +stdout: 5335 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38346,13 +38346,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -38364,7 +38364,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: unknown CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no WIFI-PROPERTIES.WEP: yes @@ -38435,12 +38435,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 5698 +size: 5702 location: clients/tests/test-client.py:test_004()/718 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: 5380 bytes +stdout: 5384 bytes >>> GENERAL.DEVICE: wlan0 GENERAL.TYPE: wifi @@ -38453,13 +38453,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -38471,7 +38471,7 @@ GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED: nieznane CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie WIFI-PROPERTIES.WEP: tak @@ -38650,12 +38650,12 @@ connection.type: 802-11-wireless connection.interface-name: -- <<< -size: 6187 +size: 6190 location: clients/tests/test-client.py:test_004()/723 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -38755,7 +38755,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -38777,12 +38777,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6229 +size: 6232 location: clients/tests/test-client.py:test_004()/724 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -38882,7 +38882,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -38904,12 +38904,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6187 +size: 6190 location: clients/tests/test-client.py:test_004()/725 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -39009,7 +39009,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -39031,12 +39031,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6229 +size: 6232 location: clients/tests/test-client.py:test_004()/726 cmd: $NMCLI --mode multiline --pretty con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -39136,7 +39136,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -39398,12 +39398,12 @@ vpn.timeout: 0 ------------------------------------------------------------------------------- <<< -size: 1192 +size: 1195 location: clients/tests/test-client.py:test_004()/731 cmd: $NMCLI --mode multiline --pretty -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 1023 bytes +stdout: 1026 bytes >>> =============================================================================== Activate connection details (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -39411,7 +39411,7 @@ stdout: 1023 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -39424,12 +39424,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1212 +size: 1215 location: clients/tests/test-client.py:test_004()/732 cmd: $NMCLI --mode multiline --pretty -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1033 bytes +stdout: 1036 bytes >>> =============================================================================== Szczegóły aktywowania poÅ‚Ä…czenia (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -39437,7 +39437,7 @@ stdout: 1033 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -39450,19 +39450,19 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1700 +size: 1698 location: clients/tests/test-client.py:test_004()/733 cmd: $NMCLI --mode multiline --pretty dev s lang: C returncode: 0 -stdout: 1552 bytes +stdout: 1550 bytes >>> =============================================================================== Status of devices =============================================================================== DEVICE: wlan0 TYPE: wifi -STATE: unavailable +STATE: connected CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- DEVICE: eth0 @@ -39487,19 +39487,19 @@ CONNECTION: -- ------------------------------------------------------------------------------- <<< -size: 1715 +size: 1714 location: clients/tests/test-client.py:test_004()/734 cmd: $NMCLI --mode multiline --pretty dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 1557 bytes +stdout: 1556 bytes >>> =============================================================================== Stan urzÄ…dzenia =============================================================================== DEVICE: wlan0 TYPE: wifi -STATE: niedostÄ™pne +STATE: poÅ‚Ä…czono CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- DEVICE: eth0 @@ -39524,19 +39524,19 @@ CONNECTION: -- ------------------------------------------------------------------------------- <<< -size: 3114 +size: 3112 location: clients/tests/test-client.py:test_004()/735 cmd: $NMCLI --mode multiline --pretty -f all dev status lang: C returncode: 0 -stdout: 2954 bytes +stdout: 2952 bytes >>> =============================================================================== Status of devices =============================================================================== DEVICE: wlan0 TYPE: wifi -STATE: unavailable +STATE: connected IP4-CONNECTIVITY: unknown IP6-CONNECTIVITY: unknown DBUS-PATH: /org/freedesktop/NetworkManager/Devices/3 @@ -39586,19 +39586,19 @@ CON-PATH: -- ------------------------------------------------------------------------------- <<< -size: 3139 +size: 3138 location: clients/tests/test-client.py:test_004()/736 cmd: $NMCLI --mode multiline --pretty -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 2969 bytes +stdout: 2968 bytes >>> =============================================================================== Stan urzÄ…dzenia =============================================================================== DEVICE: wlan0 TYPE: wifi -STATE: niedostÄ™pne +STATE: poÅ‚Ä…czono IP4-CONNECTIVITY: nieznane IP6-CONNECTIVITY: nieznane DBUS-PATH: /org/freedesktop/NetworkManager/Devices/3 @@ -39648,12 +39648,12 @@ CON-PATH: -- ------------------------------------------------------------------------------- <<< -size: 12885 +size: 12882 location: clients/tests/test-client.py:test_004()/737 cmd: $NMCLI --mode multiline --pretty dev show lang: C returncode: 0 -stdout: 12733 bytes +stdout: 12730 bytes >>> =============================================================================== Device details (wlan0) @@ -39666,7 +39666,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -39709,7 +39709,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -39748,7 +39748,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -39856,12 +39856,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 12949 +size: 12947 location: clients/tests/test-client.py:test_004()/738 cmd: $NMCLI --mode multiline --pretty dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12787 bytes +stdout: 12785 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -39874,7 +39874,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -39917,7 +39917,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -39956,7 +39956,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -40064,12 +40064,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27427 +size: 27437 location: clients/tests/test-client.py:test_004()/739 cmd: $NMCLI --mode multiline --pretty -f all dev show lang: C returncode: 0 -stdout: 27268 bytes +stdout: 27278 bytes >>> =============================================================================== Device details (wlan0) @@ -40085,13 +40085,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -40104,7 +40104,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -40208,7 +40208,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -40229,7 +40229,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -40288,7 +40288,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -40309,7 +40309,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -40375,7 +40375,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -40484,7 +40484,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -40552,12 +40552,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27621 +size: 27633 location: clients/tests/test-client.py:test_004()/740 cmd: $NMCLI --mode multiline --pretty -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27452 bytes +stdout: 27464 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -40573,13 +40573,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -40592,7 +40592,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -40696,7 +40696,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -40717,7 +40717,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -40776,7 +40776,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -40797,7 +40797,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -40863,7 +40863,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -40972,7 +40972,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -41040,12 +41040,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2451 +size: 2450 location: clients/tests/test-client.py:test_004()/741 cmd: $NMCLI --mode multiline --pretty dev show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -41058,7 +41058,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -41103,7 +41103,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -41130,12 +41130,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6556 +size: 6558 location: clients/tests/test-client.py:test_004()/743 cmd: $NMCLI --mode multiline --pretty -f all dev show wlan0 lang: C returncode: 0 -stdout: 6392 bytes +stdout: 6394 bytes >>> =============================================================================== Device details (wlan0) @@ -41151,13 +41151,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -41170,7 +41170,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -41255,12 +41255,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6621 +size: 6625 location: clients/tests/test-client.py:test_004()/744 cmd: $NMCLI --mode multiline --pretty -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6447 bytes +stdout: 6451 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -41276,13 +41276,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -41295,7 +41295,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -41380,12 +41380,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2644 +size: 2646 location: clients/tests/test-client.py:test_004()/745 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -41401,13 +41401,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -41435,12 +41435,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2677 +size: 2680 location: clients/tests/test-client.py:test_004()/746 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -41456,13 +41456,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -41490,12 +41490,12 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2644 +size: 2646 location: clients/tests/test-client.py:test_004()/747 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -41511,13 +41511,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -41545,12 +41545,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2677 +size: 2680 location: clients/tests/test-client.py:test_004()/748 cmd: $NMCLI --mode multiline --pretty -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -41566,13 +41566,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -42328,12 +42328,12 @@ DBUS-PATH: /org/freedesktop/NetworkManager/AccessPo <<< -size: 6559 +size: 6561 location: clients/tests/test-client.py:test_004()/763 cmd: $NMCLI --mode multiline --pretty -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6392 bytes +stdout: 6394 bytes >>> =============================================================================== Device details (wlan0) @@ -42349,13 +42349,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -42368,7 +42368,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -42453,12 +42453,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6624 +size: 6628 location: clients/tests/test-client.py:test_004()/764 cmd: $NMCLI --mode multiline --pretty -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6447 bytes +stdout: 6451 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -42474,13 +42474,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -42493,7 +42493,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -42578,12 +42578,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2464 +size: 2463 location: clients/tests/test-client.py:test_004()/765 cmd: $NMCLI --mode multiline --pretty -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -42596,7 +42596,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -42641,7 +42641,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -42668,12 +42668,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6486 +size: 6488 location: clients/tests/test-client.py:test_004()/767 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: 6181 bytes +stdout: 6183 bytes >>> =============================================================================== Device details (wlan0) @@ -42689,13 +42689,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -42708,7 +42708,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -42789,12 +42789,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6550 +size: 6554 location: clients/tests/test-client.py:test_004()/768 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: 6235 bytes +stdout: 6239 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -42810,13 +42810,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -42829,7 +42829,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -43074,12 +43074,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 6199 +size: 6202 location: clients/tests/test-client.py:test_004()/773 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -43179,7 +43179,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -43201,12 +43201,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6241 +size: 6244 location: clients/tests/test-client.py:test_004()/774 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -43306,7 +43306,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -43328,12 +43328,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6199 +size: 6202 location: clients/tests/test-client.py:test_004()/775 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 6029 bytes +stdout: 6032 bytes >>> =============================================================================== Connection profile details (con-vpn-1) @@ -43433,7 +43433,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -43455,12 +43455,12 @@ VPN.CFG[3]: key3 = val3 ------------------------------------------------------------------------------- <<< -size: 6241 +size: 6244 location: clients/tests/test-client.py:test_004()/776 cmd: $NMCLI --mode multiline --pretty --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6061 bytes +stdout: 6064 bytes >>> =============================================================================== Szczegóły profilu poÅ‚Ä…czenia (con-vpn-1) @@ -43560,7 +43560,7 @@ proxy.pac-script: -- GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -43822,12 +43822,12 @@ vpn.timeout: 0 ------------------------------------------------------------------------------- <<< -size: 1204 +size: 1207 location: clients/tests/test-client.py:test_004()/781 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 1023 bytes +stdout: 1026 bytes >>> =============================================================================== Activate connection details (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -43835,7 +43835,7 @@ stdout: 1023 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no @@ -43848,12 +43848,12 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1224 +size: 1227 location: clients/tests/test-client.py:test_004()/782 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1033 bytes +stdout: 1036 bytes >>> =============================================================================== Szczegóły aktywowania poÅ‚Ä…czenia (UUID-con-vpn-1-REPLACED-REPLACED-REP) @@ -43861,7 +43861,7 @@ stdout: 1033 bytes GENERAL.NAME: con-vpn-1 GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES: wlan0 -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.STATE: aktywowano GENERAL.DEFAULT: nie GENERAL.DEFAULT6: nie @@ -43874,20 +43874,20 @@ GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- <<< -size: 1872 +size: 1874 location: clients/tests/test-client.py:test_004()/783 cmd: $NMCLI --mode multiline --pretty --color yes dev s lang: C returncode: 0 -stdout: 1712 bytes +stdout: 1714 bytes >>> =============================================================================== Status of devices =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2munavailable[0m -CONNECTION: [2mcon-vpn-1[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mconnected[0m +CONNECTION: [32mcon-vpn-1[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -43911,20 +43911,20 @@ CONNECTION: [2m--[0m ------------------------------------------------------------------------------- <<< -size: 1887 +size: 1890 location: clients/tests/test-client.py:test_004()/784 cmd: $NMCLI --mode multiline --pretty --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 1717 bytes +stdout: 1720 bytes >>> =============================================================================== Stan urzÄ…dzenia =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2mniedostÄ™pne[0m -CONNECTION: [2mcon-vpn-1[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mpoÅ‚Ä…czono[0m +CONNECTION: [32mcon-vpn-1[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -43948,25 +43948,25 @@ CONNECTION: [2m--[0m ------------------------------------------------------------------------------- <<< -size: 3486 +size: 3493 location: clients/tests/test-client.py:test_004()/785 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev status lang: C returncode: 0 -stdout: 3314 bytes +stdout: 3321 bytes >>> =============================================================================== Status of devices =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2munavailable[0m -IP4-CONNECTIVITY: [2munknown[0m -IP6-CONNECTIVITY: [2munknown[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION: [2mcon-vpn-1[0m -CON-UUID: [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH: [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mconnected[0m +IP4-CONNECTIVITY: [32munknown[0m +IP6-CONNECTIVITY: [32munknown[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION: [32mcon-vpn-1[0m +CON-UUID: [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH: [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -44010,25 +44010,25 @@ CON-PATH: [2m--[0m ------------------------------------------------------------------------------- <<< -size: 3511 +size: 3519 location: clients/tests/test-client.py:test_004()/786 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 3329 bytes +stdout: 3337 bytes >>> =============================================================================== Stan urzÄ…dzenia =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -STATE: [2mniedostÄ™pne[0m -IP4-CONNECTIVITY: [2mnieznane[0m -IP6-CONNECTIVITY: [2mnieznane[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION: [2mcon-vpn-1[0m -CON-UUID: [2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH: [2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +STATE: [32mpoÅ‚Ä…czono[0m +IP4-CONNECTIVITY: [32mnieznane[0m +IP6-CONNECTIVITY: [32mnieznane[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION: [32mcon-vpn-1[0m +CON-UUID: [32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH: [32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -44072,12 +44072,12 @@ CON-PATH: [2m--[0m ------------------------------------------------------------------------------- <<< -size: 12897 +size: 12894 location: clients/tests/test-client.py:test_004()/787 cmd: $NMCLI --mode multiline --pretty --color yes dev show lang: C returncode: 0 -stdout: 12733 bytes +stdout: 12730 bytes >>> =============================================================================== Device details (wlan0) @@ -44090,7 +44090,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -44133,7 +44133,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -44172,7 +44172,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -44280,12 +44280,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 12961 +size: 12959 location: clients/tests/test-client.py:test_004()/788 cmd: $NMCLI --mode multiline --pretty --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12787 bytes +stdout: 12785 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -44298,7 +44298,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -44341,7 +44341,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -44380,7 +44380,7 @@ GENERAL.CONNECTION: -- ------------------------------------------------------------------------------- GENERAL.CON-PATH: -- ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -44488,12 +44488,12 @@ IP6.DOMAIN[1]: sear6.fo.x.y ------------------------------------------------------------------------------- <<< -size: 27763 +size: 27773 location: clients/tests/test-client.py:test_004()/789 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show lang: C returncode: 0 -stdout: 27592 bytes +stdout: 27602 bytes >>> =============================================================================== Device details (wlan0) @@ -44509,13 +44509,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -44528,7 +44528,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -44632,7 +44632,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -44653,7 +44653,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -44712,7 +44712,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -44733,7 +44733,7 @@ INTERFACE-FLAGS.UP: yes INTERFACE-FLAGS.LOWER-UP: yes INTERFACE-FLAGS.CARRIER: no ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: off +WIRED-PROPERTIES.CARRIER: on ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -44799,7 +44799,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -44908,7 +44908,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -44976,12 +44976,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 27957 +size: 27969 location: clients/tests/test-client.py:test_004()/790 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 27776 bytes +stdout: 27788 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -44997,13 +44997,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45016,7 +45016,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -45120,7 +45120,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45141,7 +45141,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.49.34/22 IP4.ADDRESS[2]: 192.168.135.86/19 @@ -45200,7 +45200,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/eth1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: eth1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45221,7 +45221,7 @@ INTERFACE-FLAGS.UP: tak INTERFACE-FLAGS.LOWER-UP: tak INTERFACE-FLAGS.CARRIER: nie ------------------------------------------------------------------------------- -WIRED-PROPERTIES.CARRIER: wyÅ‚Ä…czone +WIRED-PROPERTIES.CARRIER: wÅ‚Ä…czone ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.127.210/25 IP4.GATEWAY: 192.168.88.4 @@ -45287,7 +45287,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45396,7 +45396,7 @@ GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan1 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan1 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45464,12 +45464,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2463 +size: 2462 location: clients/tests/test-client.py:test_004()/791 cmd: $NMCLI --mode multiline --pretty --color yes dev show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -45482,7 +45482,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -45527,7 +45527,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -45554,12 +45554,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6811 +size: 6813 location: clients/tests/test-client.py:test_004()/793 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 6635 bytes +stdout: 6637 bytes >>> =============================================================================== Device details (wlan0) @@ -45575,13 +45575,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -45594,7 +45594,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -45679,12 +45679,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6876 +size: 6880 location: clients/tests/test-client.py:test_004()/794 cmd: $NMCLI --mode multiline --pretty --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6690 bytes +stdout: 6694 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -45700,13 +45700,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45719,7 +45719,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -45804,12 +45804,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2656 +size: 2658 location: clients/tests/test-client.py:test_004()/795 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -45825,13 +45825,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -45859,12 +45859,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2689 +size: 2692 location: clients/tests/test-client.py:test_004()/796 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -45880,13 +45880,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -45914,12 +45914,12 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 2656 +size: 2658 location: clients/tests/test-client.py:test_004()/797 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 2445 bytes +stdout: 2447 bytes >>> =============================================================================== Device details (wlan0) @@ -45935,13 +45935,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -45969,12 +45969,12 @@ WIFI-PROPERTIES.IBSS-RSN: no ------------------------------------------------------------------------------- <<< -size: 2689 +size: 2692 location: clients/tests/test-client.py:test_004()/798 cmd: $NMCLI --mode multiline --pretty --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2468 bytes +stdout: 2471 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -45990,13 +45990,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -46024,19 +46024,19 @@ WIFI-PROPERTIES.IBSS-RSN: nie ------------------------------------------------------------------------------- <<< -size: 1783 +size: 1786 location: clients/tests/test-client.py:test_004()/799 cmd: $NMCLI --mode multiline --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 1600 bytes +stdout: 1603 bytes >>> =============================================================================== Status of devices =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -46056,19 +46056,19 @@ DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devi ------------------------------------------------------------------------------- <<< -size: 1793 +size: 1796 location: clients/tests/test-client.py:test_004()/800 cmd: $NMCLI --mode multiline --pretty --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 1600 bytes +stdout: 1603 bytes >>> =============================================================================== Stan urzÄ…dzenia =============================================================================== -DEVICE: [2mwlan0[0m -TYPE: [2mwifi[0m -DBUS-PATH: [2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE: [32mwlan0[0m +TYPE: [32mwifi[0m +DBUS-PATH: [32m/org/freedesktop/NetworkManager/Devices/3[0m ------------------------------------------------------------------------------- DEVICE: [2meth0[0m TYPE: [2methernet[0m @@ -46752,12 +46752,12 @@ DBUS-PATH: [32m/org/freedesktop/NetworkManager/Acc <<< -size: 6814 +size: 6816 location: clients/tests/test-client.py:test_004()/813 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 6635 bytes +stdout: 6637 bytes >>> =============================================================================== Device details (wlan0) @@ -46773,13 +46773,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -46792,7 +46792,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -46877,12 +46877,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6879 +size: 6883 location: clients/tests/test-client.py:test_004()/814 cmd: $NMCLI --mode multiline --pretty --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 6690 bytes +stdout: 6694 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -46898,13 +46898,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -46917,7 +46917,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -47002,12 +47002,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 2476 +size: 2475 location: clients/tests/test-client.py:test_004()/815 cmd: $NMCLI --mode multiline --pretty --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 2294 bytes +stdout: 2293 bytes >>> =============================================================================== Device details (wlan0) @@ -47020,7 +47020,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -47065,7 +47065,7 @@ GENERAL.HWADDR: 13:E0:74:85:7C:D9 ------------------------------------------------------------------------------- GENERAL.MTU: 0 ------------------------------------------------------------------------------- -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) ------------------------------------------------------------------------------- GENERAL.CONNECTION: con-vpn-1 ------------------------------------------------------------------------------- @@ -47092,12 +47092,12 @@ IP6.DOMAIN[6]: sear6.foo4.bar ------------------------------------------------------------------------------- <<< -size: 6741 +size: 6743 location: clients/tests/test-client.py:test_004()/817 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: 6424 bytes +stdout: 6426 bytes >>> =============================================================================== Device details (wlan0) @@ -47113,13 +47113,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (unavailable) +GENERAL.STATE: 100 (connected) GENERAL.REASON: 0 (No reason given) GENERAL.IP4-CONNECTIVITY: 0 (unknown) GENERAL.IP6-CONNECTIVITY: 0 (unknown) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: no GENERAL.NM-MANAGED: yes GENERAL.AUTOCONNECT: yes @@ -47132,7 +47132,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: unknown ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: no -CAPABILITIES.SPEED: unknown +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: no CAPABILITIES.SRIOV: no ------------------------------------------------------------------------------- @@ -47213,12 +47213,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[1]: UUID-con-xx1-REPLACED-REPLACED-REPLA | c ------------------------------------------------------------------------------- <<< -size: 6805 +size: 6809 location: clients/tests/test-client.py:test_004()/818 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: 6478 bytes +stdout: 6482 bytes >>> =============================================================================== Informacje o urzÄ…dzeniu (wlan0) @@ -47234,13 +47234,13 @@ GENERAL.DRIVER-VERSION: -- GENERAL.FIRMWARE-VERSION: -- GENERAL.HWADDR: 13:E0:74:85:7C:D9 GENERAL.MTU: 0 -GENERAL.STATE: 20 (niedostÄ™pne) +GENERAL.STATE: 100 (poÅ‚Ä…czono) GENERAL.REASON: 0 (Nie podano przyczyny) GENERAL.IP4-CONNECTIVITY: 0 (nieznane) GENERAL.IP6-CONNECTIVITY: 0 (nieznane) GENERAL.UDI: /sys/devices/virtual/wlan0 GENERAL.PATH: -- -GENERAL.IP-IFACE: -- +GENERAL.IP-IFACE: wlan0 GENERAL.IS-SOFTWARE: nie GENERAL.NM-MANAGED: tak GENERAL.AUTOCONNECT: tak @@ -47253,7 +47253,7 @@ GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveCo GENERAL.METERED: nieznane ------------------------------------------------------------------------------- CAPABILITIES.CARRIER-DETECT: nie -CAPABILITIES.SPEED: nieznane +CAPABILITIES.SPEED: 21 Mb/s CAPABILITIES.IS-SOFTWARE: nie CAPABILITIES.SRIOV: nie ------------------------------------------------------------------------------- @@ -47498,12 +47498,12 @@ connection.interface-name: -- ------------------------------------------------------------------------------- <<< -size: 2614 +size: 2619 location: clients/tests/test-client.py:test_004()/823 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47592,7 +47592,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -47612,12 +47612,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2624 +size: 2629 location: clients/tests/test-client.py:test_004()/824 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47706,7 +47706,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -47726,12 +47726,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2614 +size: 2619 location: clients/tests/test-client.py:test_004()/825 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47820,7 +47820,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -47840,12 +47840,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2624 +size: 2629 location: clients/tests/test-client.py:test_004()/826 cmd: $NMCLI --mode multiline --terse con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -47934,7 +47934,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -48170,17 +48170,17 @@ vpn.persistent:no vpn.timeout:0 <<< -size: 555 +size: 560 location: clients/tests/test-client.py:test_004()/831 cmd: $NMCLI --mode multiline --terse -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -48192,17 +48192,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 565 +size: 570 location: clients/tests/test-client.py:test_004()/832 cmd: $NMCLI --mode multiline --terse -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -48214,16 +48214,16 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 426 +size: 424 location: clients/tests/test-client.py:test_004()/833 cmd: $NMCLI --mode multiline --terse dev s lang: C returncode: 0 -stdout: 280 bytes +stdout: 278 bytes >>> DEVICE:wlan0 TYPE:wifi -STATE:unavailable +STATE:connected CONNECTION:con-vpn-1 DEVICE:eth0 TYPE:ethernet @@ -48243,16 +48243,16 @@ STATE:unavailable CONNECTION: <<< -size: 436 +size: 434 location: clients/tests/test-client.py:test_004()/834 cmd: $NMCLI --mode multiline --terse dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 280 bytes +stdout: 278 bytes >>> DEVICE:wlan0 TYPE:wifi -STATE:unavailable +STATE:connected CONNECTION:con-vpn-1 DEVICE:eth0 TYPE:ethernet @@ -48272,16 +48272,16 @@ STATE:unavailable CONNECTION: <<< -size: 1134 +size: 1132 location: clients/tests/test-client.py:test_004()/835 cmd: $NMCLI --mode multiline --terse -f all dev status lang: C returncode: 0 -stdout: 976 bytes +stdout: 974 bytes >>> DEVICE:wlan0 TYPE:wifi -STATE:unavailable +STATE:connected IP4-CONNECTIVITY:unknown IP6-CONNECTIVITY:unknown DBUS-PATH:/org/freedesktop/NetworkManager/Devices/3 @@ -48326,16 +48326,16 @@ CON-UUID: CON-PATH: <<< -size: 1144 +size: 1142 location: clients/tests/test-client.py:test_004()/836 cmd: $NMCLI --mode multiline --terse -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 976 bytes +stdout: 974 bytes >>> DEVICE:wlan0 TYPE:wifi -STATE:unavailable +STATE:connected IP4-CONNECTIVITY:unknown IP6-CONNECTIVITY:unknown DBUS-PATH:/org/freedesktop/NetworkManager/Devices/3 @@ -48380,18 +48380,18 @@ CON-UUID: CON-PATH: <<< -size: 4552 +size: 4549 location: clients/tests/test-client.py:test_004()/837 cmd: $NMCLI --mode multiline --terse dev show lang: C returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -48419,7 +48419,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -48445,7 +48445,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -48526,18 +48526,18 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 4562 +size: 4559 location: clients/tests/test-client.py:test_004()/838 cmd: $NMCLI --mode multiline --terse dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -48565,7 +48565,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -48591,7 +48591,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -48672,12 +48672,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 12980 +size: 13000 location: clients/tests/test-client.py:test_004()/839 cmd: $NMCLI --mode multiline --terse -f all dev show lang: C returncode: 0 -stdout: 12822 bytes +stdout: 12842 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -48690,13 +48690,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -48708,7 +48708,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -48798,7 +48798,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -48816,7 +48816,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -48866,7 +48866,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -48884,7 +48884,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -48941,7 +48941,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49037,7 +49037,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49096,12 +49096,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13026 +size: 13046 location: clients/tests/test-client.py:test_004()/840 cmd: $NMCLI --mode multiline --terse -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 12858 bytes +stdout: 12878 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49114,13 +49114,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49132,7 +49132,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -49222,7 +49222,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49240,7 +49240,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -49290,7 +49290,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49308,7 +49308,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -49365,7 +49365,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49461,7 +49461,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49520,18 +49520,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 894 +size: 893 location: clients/tests/test-client.py:test_004()/841 cmd: $NMCLI --mode multiline --terse dev show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -49553,18 +49553,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 904 +size: 903 location: clients/tests/test-client.py:test_004()/842 cmd: $NMCLI --mode multiline --terse dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -49586,12 +49586,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3000 +size: 3004 location: clients/tests/test-client.py:test_004()/843 cmd: $NMCLI --mode multiline --terse -f all dev show wlan0 lang: C returncode: 0 -stdout: 2837 bytes +stdout: 2841 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49604,13 +49604,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49622,7 +49622,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -49696,12 +49696,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3037 +size: 3041 location: clients/tests/test-client.py:test_004()/844 cmd: $NMCLI --mode multiline --terse -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2864 bytes +stdout: 2868 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49714,13 +49714,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49732,7 +49732,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -49806,12 +49806,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1329 +size: 1333 location: clients/tests/test-client.py:test_004()/845 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49824,13 +49824,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49855,12 +49855,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1339 +size: 1343 location: clients/tests/test-client.py:test_004()/846 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49873,13 +49873,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49904,12 +49904,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1329 +size: 1333 location: clients/tests/test-client.py:test_004()/847 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49922,13 +49922,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -49953,12 +49953,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1339 +size: 1343 location: clients/tests/test-client.py:test_004()/848 cmd: $NMCLI --mode multiline --terse -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -49971,13 +49971,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -50612,12 +50612,12 @@ DBUS-PATH:/org/freedesktop/NetworkManager/AccessPoint/2 <<< -size: 3003 +size: 3007 location: clients/tests/test-client.py:test_004()/863 cmd: $NMCLI --mode multiline --terse -f ALL device show wlan0 lang: C returncode: 0 -stdout: 2837 bytes +stdout: 2841 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50630,13 +50630,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -50648,7 +50648,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -50722,12 +50722,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3040 +size: 3044 location: clients/tests/test-client.py:test_004()/864 cmd: $NMCLI --mode multiline --terse -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2864 bytes +stdout: 2868 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50740,13 +50740,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -50758,7 +50758,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -50832,18 +50832,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 907 +size: 906 location: clients/tests/test-client.py:test_004()/865 cmd: $NMCLI --mode multiline --terse -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -50865,18 +50865,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 917 +size: 916 location: clients/tests/test-client.py:test_004()/866 cmd: $NMCLI --mode multiline --terse -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -50898,12 +50898,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3062 +size: 3066 location: clients/tests/test-client.py:test_004()/867 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: 2758 bytes +stdout: 2762 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -50916,13 +50916,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -50934,7 +50934,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -51005,12 +51005,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3099 +size: 3103 location: clients/tests/test-client.py:test_004()/868 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: 2785 bytes +stdout: 2789 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -51023,13 +51023,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -51041,7 +51041,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -51220,12 +51220,12 @@ connection.type:802-11-wireless connection.interface-name: <<< -size: 2626 +size: 2631 location: clients/tests/test-client.py:test_004()/873 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -51314,7 +51314,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51334,12 +51334,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2636 +size: 2641 location: clients/tests/test-client.py:test_004()/874 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -51428,7 +51428,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51448,12 +51448,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2626 +size: 2631 location: clients/tests/test-client.py:test_004()/875 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: C returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -51542,7 +51542,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51562,12 +51562,12 @@ VPN.CFG[2]:key2 = val2 VPN.CFG[3]:key3 = val3 <<< -size: 2636 +size: 2641 location: clients/tests/test-client.py:test_004()/876 cmd: $NMCLI --mode multiline --terse --color yes con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 2457 bytes +stdout: 2462 bytes >>> connection.id:con-vpn-1 connection.uuid:UUID-con-vpn-1-REPLACED-REPLACED-REP @@ -51656,7 +51656,7 @@ proxy.pac-script: GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51892,17 +51892,17 @@ vpn.persistent:no vpn.timeout:0 <<< -size: 567 +size: 572 location: clients/tests/test-client.py:test_004()/881 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL con s con-vpn-1 lang: C returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51914,17 +51914,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 577 +size: 582 location: clients/tests/test-client.py:test_004()/882 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL con s con-vpn-1 lang: pl_PL.UTF-8 returncode: 0 -stdout: 388 bytes +stdout: 393 bytes >>> GENERAL.NAME:con-vpn-1 GENERAL.UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.DEVICES:wlan0 -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.STATE:activated GENERAL.DEFAULT:no GENERAL.DEFAULT6:no @@ -51936,17 +51936,17 @@ GENERAL.ZONE: GENERAL.MASTER-PATH: <<< -size: 598 +size: 600 location: clients/tests/test-client.py:test_004()/883 cmd: $NMCLI --mode multiline --terse --color yes dev s lang: C returncode: 0 -stdout: 440 bytes +stdout: 442 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -STATE:[2munavailable[0m -CONNECTION:[2mcon-vpn-1[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +STATE:[32mconnected[0m +CONNECTION:[32mcon-vpn-1[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m STATE:[2munavailable[0m @@ -51965,17 +51965,17 @@ STATE:[2munavailable[0m CONNECTION:[2m[0m <<< -size: 608 +size: 610 location: clients/tests/test-client.py:test_004()/884 cmd: $NMCLI --mode multiline --terse --color yes dev s lang: pl_PL.UTF-8 returncode: 0 -stdout: 440 bytes +stdout: 442 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -STATE:[2munavailable[0m -CONNECTION:[2mcon-vpn-1[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +STATE:[32mconnected[0m +CONNECTION:[32mcon-vpn-1[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m STATE:[2munavailable[0m @@ -51994,22 +51994,22 @@ STATE:[2munavailable[0m CONNECTION:[2m[0m <<< -size: 1507 +size: 1514 location: clients/tests/test-client.py:test_004()/885 cmd: $NMCLI --mode multiline --terse --color yes -f all dev status lang: C returncode: 0 -stdout: 1336 bytes +stdout: 1343 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -STATE:[2munavailable[0m -IP4-CONNECTIVITY:[2munknown[0m -IP6-CONNECTIVITY:[2munknown[0m -DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION:[2mcon-vpn-1[0m -CON-UUID:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +STATE:[32mconnected[0m +IP4-CONNECTIVITY:[32munknown[0m +IP6-CONNECTIVITY:[32munknown[0m +DBUS-PATH:[32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION:[32mcon-vpn-1[0m +CON-UUID:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m STATE:[2munavailable[0m @@ -52048,22 +52048,22 @@ CON-UUID:[2m[0m CON-PATH:[2m[0m <<< -size: 1517 +size: 1524 location: clients/tests/test-client.py:test_004()/886 cmd: $NMCLI --mode multiline --terse --color yes -f all dev status lang: pl_PL.UTF-8 returncode: 0 -stdout: 1336 bytes +stdout: 1343 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -STATE:[2munavailable[0m -IP4-CONNECTIVITY:[2munknown[0m -IP6-CONNECTIVITY:[2munknown[0m -DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/3[0m -CONNECTION:[2mcon-vpn-1[0m -CON-UUID:[2mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m -CON-PATH:[2m/org/freedesktop/NetworkManager/ActiveConnection/2[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +STATE:[32mconnected[0m +IP4-CONNECTIVITY:[32munknown[0m +IP6-CONNECTIVITY:[32munknown[0m +DBUS-PATH:[32m/org/freedesktop/NetworkManager/Devices/3[0m +CONNECTION:[32mcon-vpn-1[0m +CON-UUID:[32mUUID-con-vpn-1-REPLACED-REPLACED-REP[0m +CON-PATH:[32m/org/freedesktop/NetworkManager/ActiveConnection/2[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m STATE:[2munavailable[0m @@ -52102,18 +52102,18 @@ CON-UUID:[2m[0m CON-PATH:[2m[0m <<< -size: 4564 +size: 4561 location: clients/tests/test-client.py:test_004()/887 cmd: $NMCLI --mode multiline --terse --color yes dev show lang: C returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -52141,7 +52141,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -52167,7 +52167,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -52248,18 +52248,18 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 4574 +size: 4571 location: clients/tests/test-client.py:test_004()/888 cmd: $NMCLI --mode multiline --terse --color yes dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 4402 bytes +stdout: 4399 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -52287,7 +52287,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -52313,7 +52313,7 @@ GENERAL.MTU:0 GENERAL.STATE:20 (unavailable) GENERAL.CONNECTION: GENERAL.CON-PATH: -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -52394,12 +52394,12 @@ IP6.DNS[1]:2001:a::2934:bd66:550d:ec19 IP6.DOMAIN[1]:sear6.fo.x.y <<< -size: 13316 +size: 13336 location: clients/tests/test-client.py:test_004()/889 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show lang: C returncode: 0 -stdout: 13146 bytes +stdout: 13166 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -52412,13 +52412,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52430,7 +52430,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -52520,7 +52520,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52538,7 +52538,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -52588,7 +52588,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52606,7 +52606,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -52663,7 +52663,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52759,7 +52759,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52818,12 +52818,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 13362 +size: 13382 location: clients/tests/test-client.py:test_004()/890 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show lang: pl_PL.UTF-8 returncode: 0 -stdout: 13182 bytes +stdout: 13202 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -52836,13 +52836,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52854,7 +52854,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -52944,7 +52944,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -52962,7 +52962,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.49.34/22 IP4.ADDRESS[2]:192.168.135.86/19 IP4.GATEWAY: @@ -53012,7 +53012,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/eth1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:eth1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53030,7 +53030,7 @@ CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes INTERFACE-FLAGS.LOWER-UP:yes INTERFACE-FLAGS.CARRIER:no -WIRED-PROPERTIES.CARRIER:off +WIRED-PROPERTIES.CARRIER:on IP4.ADDRESS[1]:192.168.127.210/25 IP4.GATEWAY:192.168.88.4 IP4.ROUTE[1]:dst = 192.168.222.35/19, nh = 192.168.170.142, mt = 3609264321 @@ -53087,7 +53087,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53183,7 +53183,7 @@ GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan1 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan1 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53242,18 +53242,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 906 +size: 905 location: clients/tests/test-client.py:test_004()/891 cmd: $NMCLI --mode multiline --terse --color yes dev show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -53275,18 +53275,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 916 +size: 915 location: clients/tests/test-client.py:test_004()/892 cmd: $NMCLI --mode multiline --terse --color yes dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -53308,12 +53308,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3255 +size: 3259 location: clients/tests/test-client.py:test_004()/893 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show wlan0 lang: C returncode: 0 -stdout: 3080 bytes +stdout: 3084 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53326,13 +53326,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53344,7 +53344,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -53418,12 +53418,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3292 +size: 3296 location: clients/tests/test-client.py:test_004()/894 cmd: $NMCLI --mode multiline --terse --color yes -f all dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3107 bytes +stdout: 3111 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53436,13 +53436,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53454,7 +53454,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -53528,12 +53528,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 1341 +size: 1345 location: clients/tests/test-client.py:test_004()/895 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53546,13 +53546,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53577,12 +53577,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1351 +size: 1355 location: clients/tests/test-client.py:test_004()/896 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53595,13 +53595,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53626,12 +53626,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1341 +size: 1345 location: clients/tests/test-client.py:test_004()/897 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: C returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53644,13 +53644,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53675,12 +53675,12 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 1351 +size: 1355 location: clients/tests/test-client.py:test_004()/898 cmd: $NMCLI --mode multiline --terse --color yes -f GENERAL,GENERAL.HWADDR,WIFI-PROPERTIES dev show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 1131 bytes +stdout: 1135 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -53693,13 +53693,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -53724,16 +53724,16 @@ WIFI-PROPERTIES.MESH:no WIFI-PROPERTIES.IBSS-RSN:no <<< -size: 682 +size: 685 location: clients/tests/test-client.py:test_004()/899 cmd: $NMCLI --mode multiline --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: C returncode: 0 -stdout: 501 bytes +stdout: 504 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +DBUS-PATH:[32m/org/freedesktop/NetworkManager/Devices/3[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/1[0m @@ -53748,16 +53748,16 @@ TYPE:[2mwifi[0m DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/5[0m <<< -size: 692 +size: 695 location: clients/tests/test-client.py:test_004()/900 cmd: $NMCLI --mode multiline --terse --color yes -f DEVICE,TYPE,DBUS-PATH dev lang: pl_PL.UTF-8 returncode: 0 -stdout: 501 bytes +stdout: 504 bytes >>> -DEVICE:[2mwlan0[0m -TYPE:[2mwifi[0m -DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/3[0m +DEVICE:[32mwlan0[0m +TYPE:[32mwifi[0m +DBUS-PATH:[32m/org/freedesktop/NetworkManager/Devices/3[0m DEVICE:[2meth0[0m TYPE:[2methernet[0m DBUS-PATH:[2m/org/freedesktop/NetworkManager/Devices/1[0m @@ -54334,12 +54334,12 @@ DBUS-PATH:[32m/org/freedesktop/NetworkManager/AccessPoint/2[0m <<< -size: 3258 +size: 3262 location: clients/tests/test-client.py:test_004()/913 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device show wlan0 lang: C returncode: 0 -stdout: 3080 bytes +stdout: 3084 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54352,13 +54352,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -54370,7 +54370,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -54444,12 +54444,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3295 +size: 3299 location: clients/tests/test-client.py:test_004()/914 cmd: $NMCLI --mode multiline --terse --color yes -f ALL device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 3107 bytes +stdout: 3111 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54462,13 +54462,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -54480,7 +54480,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no INTERFACE-FLAGS.UP:yes @@ -54554,18 +54554,18 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 919 +size: 918 location: clients/tests/test-client.py:test_004()/915 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device show wlan0 lang: C returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -54587,18 +54587,18 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 929 +size: 928 location: clients/tests/test-client.py:test_004()/916 cmd: $NMCLI --mode multiline --terse --color yes -f COMMON device show wlan0 lang: pl_PL.UTF-8 returncode: 0 -stdout: 739 bytes +stdout: 738 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.CONNECTION:con-vpn-1 GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 IP4.ADDRESS[1]:192.168.228.18/32 @@ -54620,12 +54620,12 @@ IP6.DOMAIN[5]:sear6.foo3.bar IP6.DOMAIN[6]:sear6.foo4.bar <<< -size: 3317 +size: 3321 location: clients/tests/test-client.py:test_004()/917 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: 3001 bytes +stdout: 3005 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54638,13 +54638,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -54656,7 +54656,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes @@ -54727,12 +54727,12 @@ CONNECTIONS.AVAILABLE-CONNECTION-PATHS:/org/freedesktop/NetworkManager/Settings/ CONNECTIONS.AVAILABLE-CONNECTIONS[1]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 <<< -size: 3354 +size: 3358 location: clients/tests/test-client.py:test_004()/918 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: 3028 bytes +stdout: 3032 bytes >>> GENERAL.DEVICE:wlan0 GENERAL.TYPE:wifi @@ -54745,13 +54745,13 @@ GENERAL.DRIVER-VERSION: GENERAL.FIRMWARE-VERSION: GENERAL.HWADDR:13:E0:74:85:7C:D9 GENERAL.MTU:0 -GENERAL.STATE:20 (unavailable) +GENERAL.STATE:100 (connected) GENERAL.REASON:0 (No reason given) GENERAL.IP4-CONNECTIVITY:0 (unknown) GENERAL.IP6-CONNECTIVITY:0 (unknown) GENERAL.UDI:/sys/devices/virtual/wlan0 GENERAL.PATH: -GENERAL.IP-IFACE: +GENERAL.IP-IFACE:wlan0 GENERAL.IS-SOFTWARE:no GENERAL.NM-MANAGED:yes GENERAL.AUTOCONNECT:yes @@ -54763,7 +54763,7 @@ GENERAL.CON-UUID:UUID-con-vpn-1-REPLACED-REPLACED-REP GENERAL.CON-PATH:/org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.METERED:unknown CAPABILITIES.CARRIER-DETECT:no -CAPABILITIES.SPEED:unknown +CAPABILITIES.SPEED:21 Mb/s CAPABILITIES.IS-SOFTWARE:no CAPABILITIES.SRIOV:no WIFI-PROPERTIES.WEP:yes diff --git a/clients/tests/test-client.py b/clients/tests/test-client.py index 062fc9f354..01d50e1af6 100755 --- a/clients/tests/test-client.py +++ b/clients/tests/test-client.py @@ -562,9 +562,7 @@ class NMStubServer: def setProperty(self, path, propname, value, iface_name=None): if iface_name is None: iface_name = "" - self.op_SetProperties( - [(path, [(iface_name, [(propname, value),]),]),] - ) + self.op_SetProperties([(path, [(iface_name, [(propname, value)])])]) ############################################################################### @@ -1161,7 +1159,7 @@ class TestNmcli(NmTestBase): self.srv.op_AddObj("WifiAp", device="wlan1") self.srv.addConnection( - {"connection": {"type": "802-3-ethernet", "id": "con-1",},} + {"connection": {"type": "802-3-ethernet", "id": "con-1"}} ) @nm_test diff --git a/configure.ac b/configure.ac index 8483dd7f98..f86cda69ac 100644 --- a/configure.ac +++ b/configure.ac @@ -7,8 +7,8 @@ dnl - add corresponding NM_VERSION_x_y_z macros in dnl "shared/nm-version-macros.h.in" dnl - update number in meson.build m4_define([nm_major_version], [1]) -m4_define([nm_minor_version], [28]) -m4_define([nm_micro_version], [0]) +m4_define([nm_minor_version], [29]) +m4_define([nm_micro_version], [5]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) diff --git a/contrib/debian/REQUIRED_PACKAGES b/contrib/debian/REQUIRED_PACKAGES index 3ed6350c56..65807d0d4b 100755 --- a/contrib/debian/REQUIRED_PACKAGES +++ b/contrib/debian/REQUIRED_PACKAGES @@ -35,6 +35,7 @@ install \ intltool \ iproute2 \ iptables \ + libaudit-dev \ libcurl4-gnutls-dev \ libdbus-1-dev \ libgcrypt11-dev \ @@ -65,10 +66,13 @@ install \ ppp-dev \ python-dbus \ python-gi \ + python-setuptools \ python-software-properties \ python3-dbus \ python3-gi \ python3-pip \ + python3-setuptools \ + udev \ uuid-dev \ valgrind \ \ diff --git a/contrib/fedora/REQUIRED_PACKAGES b/contrib/fedora/REQUIRED_PACKAGES index 18ba364199..54793c86e0 100755 --- a/contrib/fedora/REQUIRED_PACKAGES +++ b/contrib/fedora/REQUIRED_PACKAGES @@ -40,10 +40,12 @@ else fi install \ + /usr/bin/xargs \ ModemManager-devel \ ModemManager-glib-devel \ audit-libs-devel \ bluez-libs-devel \ + clang \ dbus-devel \ dbus-x11 \ dhclient \ @@ -85,6 +87,7 @@ install \ # some packages don't exist in certain distributions. Install them one-by-one, and ignore errors. install_ignore_missing \ + black \ dbus-python \ iproute-tc \ libasan \ diff --git a/contrib/fedora/rpm/NetworkManager.conf b/contrib/fedora/rpm/NetworkManager.conf index 6ee4797d4e..b362fd0a82 100644 --- a/contrib/fedora/rpm/NetworkManager.conf +++ b/contrib/fedora/rpm/NetworkManager.conf @@ -22,7 +22,7 @@ # the previous one. [main] -#plugins=ifcfg-rh +#plugins=keyfile,ifcfg-rh [logging] diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 8e866a8e5a..c5d3696eac 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -46,6 +46,22 @@ ############################################################################### +%if "x__BCOND_DEFAULT_DEBUG__" == "x1" || "x__BCOND_DEFAULT_DEBUG__" == "x0" +%global bcond_default_debug __BCOND_DEFAULT_DEBUG__ +%else +%global bcond_default_debug 0 +%endif + +%if "x__BCOND_DEFAULT_TEST__" == "x1" || "x__BCOND_DEFAULT_TEST__" == "x0" +%global bcond_default_test __BCOND_DEFAULT_TEST__ +%else +%if 0%{?rhel} >= 9 +%global bcond_default_test 1 +%else +%global bcond_default_test 0 +%endif +%endif + %bcond_with meson %bcond_without adsl %bcond_without bluetooth @@ -57,8 +73,16 @@ %bcond_without nmtui %bcond_without nm_cloud_setup %bcond_without regen_docs +%if %{bcond_default_debug} +%bcond_without debug +%else %bcond_with debug +%endif +%if %{bcond_default_test} +%bcond_without test +%else %bcond_with test +%endif %if 0%{?fedora} >= 33 || 0%{?rhel} >= 9 %bcond_without lto %else diff --git a/contrib/fedora/rpm/build.sh b/contrib/fedora/rpm/build.sh index d84dc44729..0e3b82c7e6 100755 --- a/contrib/fedora/rpm/build.sh +++ b/contrib/fedora/rpm/build.sh @@ -23,6 +23,8 @@ # SOURCE_SYSCTL_RP_FILTER_REDHAT= # SIGN_SOURCE= # DO_RELEASE= +# BCOND_DEFAULT_DEBUG= +# BCOND_DEFAULT_TEST= die() { echo "$*" >&2 @@ -48,6 +50,15 @@ coerce_bool() { esac } +in_set() { + local v="$1" + shift + for v2; do + test "$v" == "$v2" && return 0 + done + return 1 +} + abs_path() { local F="$1" @@ -157,10 +168,15 @@ LOG "SOURCE_CONFIG_CONNECTIVITY_REDHAT=$SOURCE_CONFIG_CONNECTIVITY_REDHAT" LOG "SOURCE_SYSCTL_RP_FILTER_REDHAT=$SOURCE_SYSCTL_RP_FILTER_REDHAT" LOG "BUILDTYPE=$BUILDTYPE" LOG "NM_RPMBUILD_ARGS=$NM_RPMBUILD_ARGS" +LOG "BCOND_DEFAULT_DEBUG=$BCOND_DEFAULT_DEBUG" +LOG "BCOND_DEFAULT_TEST=$BCOND_DEFAULT_TEST" LOG "" LOG "UUID=$UUID" LOG "BASEDIR=$TEMP" +in_set "$BCOND_DEFAULT_DEBUG" "" 0 1 || die "Invalid value for \$BCOND_DEFAULT_DEBUG: \"$BCOND_DEFAULT_DEBUG\"" +in_set "$BCOND_DEFAULT_TEST" "" 0 1 || die "Invalid value for \$BCOND_DEFAULT_TEST: \"$BCOND_DEFAULT_TEST\"" + ln -snf "$TEMPBASE" ./latest0 ln "$BUILDLOG" "$TEMPBASE/build.log" rm -f "$BUILDLOG" @@ -186,6 +202,8 @@ sed -e "s/__VERSION__/$VERSION/g" \ -e "s/__COMMIT_FULL__/$COMMIT_FULL/g" \ -e "s/__SNAPSHOT__/$SNAPSHOT/g" \ -e "s/__SOURCE1__/$(basename "$SOURCE")/g" \ + -e "s/__BCOND_DEFAULT_DEBUG__/$BCOND_DEFAULT_DEBUG/g" \ + -e "s/__BCOND_DEFAULT_TEST__/$BCOND_DEFAULT_TEST/g" \ "$SPECFILE" | sed -e "/^__CHANGELOG__$/ \ { diff --git a/contrib/fedora/rpm/build_clean.sh b/contrib/fedora/rpm/build_clean.sh index e7afdb4f24..b26316be22 100755 --- a/contrib/fedora/rpm/build_clean.sh +++ b/contrib/fedora/rpm/build_clean.sh @@ -25,8 +25,18 @@ usage() { echo " -W|--without \$OPTION: pass --without \$OPTION to rpmbuild. For example --without debug" echo " -s|--snapshot TEXT: use TEXT as the snapshot version for the new package (overwrites \$NM_BUILD_SNAPSHOT environment)" echo " -r|--release: built a release tarball (this option must be alone)" + echo " --default-for-debug \$OPTION: set the default for "debug" option in the generated spec file" + echo " --default-for-test \$OPTION: set the default for "test" option in the generated spec file" } +in_set() { + local v="$1" + shift + for v2; do + test "$v" == "$v2" && return 0 + done + return 1 +} ORIGDIR="$(readlink -f "$PWD")" SCRIPTDIR="$(dirname "$(readlink -f "$0")")" @@ -45,6 +55,8 @@ WITH_LIST=() SOURCE_FROM_GIT=0 SNAPSHOT="$NM_BUILD_SNAPSHOT" DO_RELEASE=0 +unset BCOND_DEFAULT_DEBUG +unset BCOND_DEFAULT_TEST ADD_WITH_TEST=1 @@ -94,17 +106,49 @@ while [[ $# -gt 0 ]]; do -w|--with) [[ $# -gt 0 ]] || die "Missing argument to $A" WITH_LIST=("${WITH_LIST[@]}" "--with" "$1") - if [[ "$1" == test ]]; then - ADD_WITH_TEST=0 - fi + case "$1" in + debug) + [[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=1 + ;; + test) + ADD_WITH_TEST=0 + [[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=1 + ;; + esac shift ;; -W|--without) [[ $# -gt 0 ]] || die "Missing argument to $A" WITH_LIST=("${WITH_LIST[@]}" "--without" "$1") - if [[ "$1" == test ]]; then - ADD_WITH_TEST=0 - fi + case "$1" in + debug) + [[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=0 + ;; + test) + ADD_WITH_TEST=0 + [[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=0 + ;; + esac + shift + ;; + --no-auto-with-test) + # by default, the script adds "-w test" (unless the command line contains + # "-w test" or "-W test"). This flags allows to suppress that automatism. + # It's really only useful to test the spec file's internal default for the + # "test" option. Otherwise, you can always just explicitly select "-w test" + # or "-W test". + ADD_WITH_TEST=0 + ;; + --default-for-debug) + [[ $# -gt 0 ]] || die "Missing argument to $A" + in_set "$1" "" 0 1 || die "invalid argument $A \"$1\"" + BCOND_DEFAULT_DEBUG="$1" + shift + ;; + --default-for-test) + [[ $# -gt 0 ]] || die "Missing argument to $A" + in_set "$1" "" 0 1 || die "invalid argument $A \"$1\"" + BCOND_DEFAULT_TEST="$1" shift ;; *) @@ -176,6 +220,8 @@ export BUILDTYPE export NM_RPMBUILD_ARGS="${WITH_LIST[@]}" export SNAPSHOT export DO_RELEASE +export BCOND_DEFAULT_DEBUG="$BCOND_DEFAULT_DEBUG" +export BCOND_DEFAULT_TEST="$BCOND_DEFAULT_TEST" "$SCRIPTDIR"/build.sh diff --git a/contrib/fedora/rpm/release.sh b/contrib/fedora/rpm/release.sh index e049ecbe8c..2dd0845288 100755 --- a/contrib/fedora/rpm/release.sh +++ b/contrib/fedora/rpm/release.sh @@ -6,17 +6,20 @@ # # There are 6 modes: # -# - "devel" : on master branch to tag "1.25.2-dev" +# - "devel" : on master branch to tag a devel release (e.g. "1.25.2-dev"). # - "rc1" : the first release candidate on "master" branch which branches off -# "nm-1-26" branch. The tag is "1.26-rc1" with version number 1.25.90. -# - "rc" : further release candidates on RC branch "nm-1-26". For example -# "1.26-rc2" with version number 1.25.91. -# - "major" : on stable branch nm-1-26 to release 1.26.0 followed by 1.26.1-dev. -# You should do a "major-post" release right after. +# a new "nm-1-X" branch (e.g. tag "1.26-rc1" (1.25.90) and branch +# off "nm-1-26"). On master this also bumps the version number +# and creates a new devel release (e.g. "1.27.0-dev"). +# - "rc" : further release candidates on RC branch (e.g. from "nm-1-26" branch +# tag "1.26-rc2" with version number 1.25.91). +# - "major" : on stable branch do a major release (e.g. on "nm-1-26" branch +# release "1.26.0", followed by "1.26.1-dev"). +# You should do a "major-post" release right a "major" release. # - "major-post": after a "major" release, merge the release branch with master and -# do another devel snapshot on master. -# - "minor" : on a stable branch nm-1-26 to do minor release 1.26.4 and bump -# to "1.26.5-dev". +# do another devel snapshot on master (e.g. do "1.27.1-dev" release). +# - "minor" : on a stable branch do a minor release (e.g. "1.26.4" on "nm-1-26" +# branch and bump to "1.26.5-dev"). # # Requisites: # @@ -25,7 +28,7 @@ # * Run in a "clean" environment, i.e. no unusual environment variables set, on a recent # Fedora, with suitable dependencies installed. # -# * First, ensure that you have ssh keys for master.gnome.org installed (and ssh-agent running) +# * First, ensure that you have ssh keys for "master.gnome.org" installed (and ssh-agent running). # Also, ensure you have a GPG key that you want to use for signing. Also, have gpg-agent running # and possibly configure `git config --get user.signingkey` for the proper key. # @@ -52,7 +55,7 @@ echo_color() { print_usage() { echo "Usage:" - echo " $BASH_SOURCE [devel|rc1|rc|major|major-post|minor] [--no-test] [--no-find-backports] [--no-cleanup] [--allow-local-branches]" + echo " $BASH_SOURCE [devel|rc1|rc|major|major-post|minor] [--no-test] [--no-find-backports] [--no-cleanup] [--allow-local-branches] [--no-check-gitlab] [--no-check-news]" } die_help() { @@ -88,7 +91,7 @@ parse_version() { local MIN="$(sed -n '1,20 s/^m4_define(\[nm_minor_version\], \[\([0-9]\+\)\])$/\1/p' ./configure.ac)" local MIC="$(sed -n '1,20 s/^m4_define(\[nm_micro_version\], \[\([0-9]\+\)\])$/\1/p' ./configure.ac)" - re='^[0-9][1-9]* [0-9][1-9]* [0-9][1-9]*$' + re='^(0|[1-9][0-9]*) (0|[1-9][0-9]*) (0|[1-9][0-9]*)$' [[ "$MAJ $MIN $MIC" =~ $re ]] || return 1 echo "$MAJ $MIN $MIC" } @@ -109,6 +112,31 @@ git_same_ref() { [ "$a" = "$b" ] } +check_gitlab_pipeline() { + local BRANCH="$1" + local SHA="$2" + local PIPELINE_ID + + PIPELINE_ID="$(curl --no-progress-meter "https://gitlab.freedesktop.org/api/v4/projects/411/pipelines?ref=$BRANCH&sha=$SHA&order_by=id" 2>/dev/null | jq '.[0].id')" + if ! [[ $PIPELINE_ID =~ [0-9]+ ]] ; then + echo "Cannot find pipeline for branch $BRANCH. Check \"https://gitlab.freedesktop.org/NetworkManager/NetworkManager/pipelines?page=1&scope=branches&ref=$BRANCH\"" + return 1 + fi + + PIPELINE_STATUSES="$(curl --no-progress-meter "https://gitlab.freedesktop.org/api/v4/projects/411/pipelines/$PIPELINE_ID/jobs" 2>/dev/null | jq '.[].status')" + + if ! echo "$PIPELINE_STATUSES" | grep -q '^"success"$' ; then + echo "Cannot find successful jobs for branch $BRANCH. Check \"https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/pipelines/$PIPELINE_ID\"" + return 1 + fi + if echo "$PIPELINE_STATUSES" | grep -q -v '^"success"$' ; then + echo "Seems not all jobs for $BRANCH ran (or were successfull). Check \"https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/pipelines/$PIPELINE_ID\"" + return 1 + fi + + return 0 +} + set_version_number_autotools() { sed -i \ -e '1,20 s/^m4_define(\[nm_major_version\], \[\([0-9]\+\)\])$/m4_define([nm_major_version], ['"$1"'])/' \ @@ -128,6 +156,23 @@ set_version_number() { set_version_number_meson "$@" } +check_news() { + local mode="$1" + shift + local ver_arr=("$@") + + case "$mode" in + major|minor) + if git grep -q 'NOT RECOMMENDED FOR PRODUCTION USE' -- ./NEWS ; then + return 1 + fi + ;; + *) + ;; + esac + return 0 +} + DO_CLEANUP=1 CLEANUP_CHECKOUT_BRANCH= CLEANUP_REFS=() @@ -157,6 +202,8 @@ DRY_RUN=1 FIND_BACKPORTS=1 ALLOW_LOCAL_BRANCHES=0 HELP_AND_EXIT=1 +CHECK_GITLAB=1 +CHECK_NEWS=1 while [ "$#" -ge 1 ]; do A="$1" shift @@ -177,6 +224,12 @@ while [ "$#" -ge 1 ]; do # that differ from upstream. Set this flag to override that check. ALLOW_LOCAL_BRANCHES=1 ;; + --no-check-gitlab) + CHECK_GITLAB=0 + ;; + --no-check-news) + CHECK_NEWS=0 + ;; --help|-h) die_help ;; @@ -207,6 +260,7 @@ TMP="$(LANG=C git clean -ndx)" || die "git clean -ndx failed" test -z "$TMP" || die "git working directory is not clean? (git clean -ndx)" CUR_BRANCH="$(git rev-parse --abbrev-ref HEAD)" +CUR_HEAD="$(git rev-parse HEAD)" TMP_BRANCH=release-branch if [ "$CUR_BRANCH" = master ]; then @@ -269,7 +323,7 @@ git fetch "$ORIGIN" || die "git fetch failed" if [ "$ALLOW_LOCAL_BRANCHES" != 1 ]; then git_same_ref "$CUR_BRANCH" "refs/heads/$CUR_BRANCH" || die "Current branch $CUR_BRANCH is not a branch??" - git_same_ref "$CUR_BRANCH" "refs/remotes/$ORIGIN/$CUR_BRANCH" || die "Current branch $CUR_BRANCH seems not up to date with refs/remotes/$ORIGIN/$CUR_BRANCH. Git pull?" + git_same_ref "$CUR_BRANCH" "refs/remotes/$ORIGIN/$CUR_BRANCH" || die "Current branch $CUR_BRANCH seems not up to date with refs/remotes/$ORIGIN/$CUR_BRANCH. Git pull or --allow-local-branches?" fi NEWER_BRANCHES=() @@ -284,14 +338,14 @@ if [ "$CUR_BRANCH" != master ]; then fi if [ "$ALLOW_LOCAL_BRANCHES" != 1 ]; then git_same_ref "$b" "refs/heads/$b" || die "branch $b is not a branch??" - git_same_ref "$b" "refs/remotes/$ORIGIN/$b" || die "branch $b seems not up to date with refs/remotes/$ORIGIN/$b. Git pull?" + git_same_ref "$b" "refs/remotes/$ORIGIN/$b" || die "branch $b seems not up to date with refs/remotes/$ORIGIN/$b. Git pull or --allow-local-branches?" fi NEWER_BRANCHES+=("refs/heads/$b") done b=master if [ "$ALLOW_LOCAL_BRANCHES" != 1 ]; then git_same_ref "$b" "refs/heads/$b" || die "branch $b is not a branch??" - git_same_ref "$b" "refs/remotes/$ORIGIN/$b" || die "branch $b seems not up to date with refs/remotes/$ORIGIN/$b. Git pull?" + git_same_ref "$b" "refs/remotes/$ORIGIN/$b" || die "branch $b seems not up to date with refs/remotes/$ORIGIN/$b. Git pull or --allow-local-branches?" fi fi @@ -304,15 +358,29 @@ if [ "$ALLOW_LOCAL_BRANCHES" != 1 ]; then cmp <(git show origin/master:contrib/fedora/rpm/release.sh) "$BASH_SOURCE" || die "$BASH_SOURCE is not identical to \`git show origin/master:contrib/fedora/rpm/release.sh\`" fi +if ! check_news "$RELEASE_MODE" "@{VERSION_ARR[@]}" ; then + if [ "$CHECK_NEWS" == 1 ]; then + die "NEWS file needs update to mention stable release (skip check with --no-check-news)" + fi + echo "WARNING: NEWS file needs update to mention stable release (test skipped with --no-check-news)" +fi + if [ $FIND_BACKPORTS = 1 ]; then - git show "$ORIGIN/automation:contrib/rh-utils/find-backports" > ./.git/nm-find-backports \ + git show "$ORIGIN/master:contrib/scripts/find-backports" > ./.git/nm-find-backports \ && chmod +x ./.git/nm-find-backports \ - || die "cannot get contrib/rh-utils/find-backports" + || die "cannot get contrib/scripts/find-backports" TMP="$(./.git/nm-find-backports "$CUR_BRANCH" master "${NEWER_BRANCHES[@]}" 2>/dev/null)" || die "nm-find-backports failed" test -z "$TMP" || die "nm-find-backports returned patches that need to be backported (ignore with --no-find-backports): ./.git/nm-find-backports \"$CUR_BRANCH\" master ${NEWER_BRANCHES[@]}" fi +if [ $CHECK_GITLAB = 1 ]; then + if ! check_gitlab_pipeline "$CUR_BRANCH" "$CUR_HEAD" ; then + echo "Check the pipelines for branch \"$CUR_BRANCH\" at https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/pipelines/" + die "It seems not all gitlab-ci jobs were running/succeeding. Skip this check with --no-check-gitlab" + fi +fi + BRANCHES=() BUILD_TAG= @@ -469,14 +537,26 @@ if [ "$RELEASE_MODE" = rc1 ]; then git checkout -B "$CUR_BRANCH" "$TMP_BRANCH" || die "cannot checkout $CUR_BRANCH" fi -do_command git push "$ORIGIN" "${BRANCHES[@]}" || die "failed to to push branches ${BRANCHES[@]} to $ORIGIN" +if ! [ "$DRY_RUN" = 0 ]; then + ssh master.gnome.org true || die "failed to \`ssh master.gnome.org\`" +fi for r in "${RELEASE_FILES[@]}"; do do_command rsync -va --append-verify -P "/tmp/$r" master.gnome.org: || die "failed to rsync \"/tmp/$r\"" +done + +do_command git push "$ORIGIN" "${BRANCHES[@]}" || die "failed to to push branches ${BRANCHES[@]} to $ORIGIN" + +for r in "${RELEASE_FILES[@]}"; do do_command ssh master.gnome.org ftpadmin install --unattended "$r" || die "ftpadmin install failed" done +CLEANUP_CHECKOUT_BRANCH= if [ "$DRY_RUN" = 0 ]; then CLEANUP_REFS=() - CLEANUP_CHECKOUT_BRANCH= + git branch -D "$TMP_BRANCH" +else + H="$(git rev-parse "$CUR_BRANCH")" + git checkout -B "$CUR_BRANCH" "$CUR_HEAD" || die "cannot reset $CUR_BRANCH to $CUR_HEAD" + echo "delete reference. Restore with $(echo_color 36 -n git checkout -B "\"$CUR_BRANCH\"" "$H")" fi diff --git a/contrib/scripts/checkpatch-feature-branch.sh b/contrib/scripts/checkpatch-feature-branch.sh index 72e5903dae..c46fcd4b5a 100755 --- a/contrib/scripts/checkpatch-feature-branch.sh +++ b/contrib/scripts/checkpatch-feature-branch.sh @@ -13,19 +13,26 @@ if printf '%s' "$HEAD" | grep -q '\.\.'; then # Check the explicitly specified range from the argument. REFS=( $(git log --reverse --format='%H' "$HEAD") ) || die "not a valid range (HEAD is $HEAD)" else - BASE_REF="refs/remotes/origin/" + BASE_REF="refs/remotes/origin" + NM_UPSTREAM_REMOTE= if [ "$NM_CHECKPATCH_FETCH_UPSTREAM" == 1 ]; then - git remote add nm-upstream https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git - git fetch nm-upstream || die "failure to fetch from https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git" - BASE_REF="refs/remotes/nm-upstream/" + NM_UPSTREAM_REMOTE="nm-upstream-$(date '+%Y%m%d-%H%M%S')-$RANDOM" + git remote add "$NM_UPSTREAM_REMOTE" https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git + BASE_REF="refs/remotes/$NM_UPSTREAM_REMOTE" + git fetch origin "$(git rev-parse "$HEAD")" --no-tags --unshallow + git fetch "$NM_UPSTREAM_REMOTE" \ + --no-tags \ + "refs/heads/master:$BASE_REF/master" \ + "refs/heads/nm-*:$BASE_REF/nm-*" \ + || die "failure to fetch from https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git" fi # the argument is only a single ref (or the default "HEAD"). # Find all commits that branch off one of the stable branches or master # and lead to $HEAD. These are the commits of the feature branch. - RANGES=( $(git show-ref | sed 's#^\(.*\) '"$BASE_REF"'\(master\|nm-1-[0-9]\+\)$#\1..'"$HEAD"'#p' -n) ) + RANGES=( $(git show-ref | sed 's#^\(.*\) '"$BASE_REF/"'\(master\|nm-1-[0-9]\+\)$#\1..'"$HEAD"'#p' -n) ) [ "${#RANGES[@]}" != 0 ] || die "cannot detect git-ranges (HEAD is $(git rev-parse "$HEAD"))" @@ -36,6 +43,10 @@ else # stable nm-1-* branches. Just check the patch itself. REFS=( "$HEAD" ) fi + + if [ -n "$NM_UPSTREAM_REMOTE" ]; then + git remote remove "$NM_UPSTREAM_REMOTE" + fi fi SUCCESS=0 diff --git a/contrib/scripts/checkpatch.pl b/contrib/scripts/checkpatch.pl index 40518c8e72..c702810e22 100755 --- a/contrib/scripts/checkpatch.pl +++ b/contrib/scripts/checkpatch.pl @@ -137,7 +137,7 @@ if ($is_patch) { $check_line = 1; $line = $_; /^---$/ and $is_commit_message = 0; - /^Fixes: *(.*)/ and check_commit ($1, 1); + /^(Reverts|Fixes): *(.*)/ and check_commit ($2, 1); /This reverts commit/ and next; /cherry picked from/ and next; /\bcommit (.*)/ and check_commit ($1, 0); @@ -188,7 +188,7 @@ complain ("Don't use space inside elvis operator ?:") if $line =~ /\?[\t ]+:/; complain ("Don't add Emacs editor formatting hints to source files") if $line_no == 1 and $line =~ /-\*-.+-\*-/; complain ("XXX marker are reserved for development while work-in-progress. Use TODO or FIXME comment instead?") if $line =~ /\bXXX\b/; complain ("This gtk-doc annotation looks wrong") if $line =~ /\*.*\( *(transfer-(none|container|full)|allow none) *\) *(:|\()/; -complain ("Prefer nm_assert() or g_return*() to g_assert*()") if $line =~ /g_assert/ and not $filename =~ /\/tests\//; +complain ("Prefer nm_assert() or g_return*() to g_assert*()") if $line =~ /g_assert/ and (not $filename =~ /\/tests\//) and (not $filename =~ /\/nm-test-/); complain ("Use gs_free_error with GError variables") if $line =~ /\bgs_free\b +GError *\*/; #complain ("Use spaces instead of tabs") if $line =~ /\t/; diff --git a/contrib/scripts/find-backports b/contrib/scripts/find-backports new file mode 100755 index 0000000000..7f1b8ab8dd --- /dev/null +++ b/contrib/scripts/find-backports @@ -0,0 +1,336 @@ +#!/usr/bin/env python3 + +import subprocess +import collections +import os +import sys +import re +import pprint + + +FNULL = open(os.devnull, "w") +pp = pprint.PrettyPrinter(indent=4) + + +def print_err(s): + print(s, file=sys.stderr) + + +def die(s): + print_err(s) + sys.exit(1) + + +def memoize(f): + memo = {} + + def helper(x): + if x not in memo: + memo[x] = f(x) + return memo[x] + + return helper + + +def re_bin(r): + return r.encode("utf8") + + +def _keys_to_dict(itr): + d = collections.OrderedDict() + for c in itr: + d[c] = None + return d + + +@memoize +def git_ref_exists(ref): + try: + out = subprocess.check_output( + ["git", "rev-parse", "--verify", str(ref) + "^{commit}"], stderr=FNULL + ) + except subprocess.CalledProcessError: + return None + try: + o = out.decode("ascii").strip() + if len(o) == 40: + return o + except Exception: + pass + raise Exception("git-rev-parse for '%s' returned unexpected output %s" % (ref, out)) + + +@memoize +def git_get_head_name(ref): + out = subprocess.check_output( + ["git", "rev-parse", "--symbolic-full-name", str(ref)], stderr=FNULL + ) + return out.decode("utf-8").strip() + + +def git_merge_base(a, b): + out = subprocess.check_output(["git", "merge-base", str(a), str(b)], stderr=FNULL) + out = out.decode("ascii").strip() + assert git_ref_exists(out) + return out + + +def git_all_commits_grep(rnge, grep=None): + if grep: + grep = ["--grep=%s" % (str(grep))] + notes = ["-c", "notes.displayref=refs/notes/bugs"] + else: + grep = [] + notes = [] + out = subprocess.check_output( + ["git"] + + notes + + ["log", "--pretty=%H", "--notes", "--reverse"] + + grep + + [str(rnge)], + stderr=FNULL, + ) + return list([x for x in out.decode("ascii").split("\n") if x]) + + +def git_logg(commits): + commits = list(commits) + if not commits: + return "" + out = subprocess.check_output( + [ + "git", + "log", + "--no-show-signature", + "--no-walk", + "--pretty=format:%Cred%h%Creset - %Cgreen(%ci)%Creset [%C(yellow)%an%Creset] %s%C(yellow)%d%Creset", + "--abbrev-commit", + "--date=local", + ] + + list([str(c) for c in commits]), + stderr=FNULL, + ) + return out.decode("utf-8").strip() + + +@memoize +def git_all_commits(rnge): + return git_all_commits_grep(rnge) + + +def git_commit_sorted(commits): + commits = list(commits) + if not commits: + return [] + out = subprocess.check_output( + ["git", "log", "--no-walk", "--pretty=%H", "--reverse"] + + list([str(x) for x in commits]), + stderr=FNULL, + ) + out = out.decode("ascii") + return list([x for x in out.split("\n") if x]) + + +@memoize +def git_ref_commit_body(ref): + return subprocess.check_output( + [ + "git", + "-c", + "notes.displayref=refs/notes/bugs", + "log", + "-n1", + "--pretty=%B%n%N", + str(ref), + ], + stderr=FNULL, + ) + + +@memoize +def git_ref_commit_body_get_fixes(ref): + body = git_ref_commit_body(ref) + result = [] + for mo in re.finditer(re_bin("\\b[fF]ixes: *([0-9a-z]+)\\b"), body): + c = mo.group(1).decode("ascii") + h = git_ref_exists(c) + if h: + result.append(h) + return result + + +@memoize +def git_ref_commit_body_get_cherry_picked_one(ref): + ref = git_ref_exists(ref) + if not ref: + return None + body = git_ref_commit_body(ref) + result = None + for r in [ + re_bin("\(cherry picked from commit ([0-9a-z]+)\)"), + re_bin("\\bIgnore-Backport: *([0-9a-z]+)\\b"), + ]: + for mo in re.finditer(r, body): + c = mo.group(1).decode("ascii") + h = git_ref_exists(c) + if h: + if not result: + result = [h] + else: + result.append(h) + return result + + +@memoize +def git_ref_commit_body_get_cherry_picked_recurse(ref): + ref = git_ref_exists(ref) + if not ref: + return None + + def do_recurse(result, ref): + result2 = git_ref_commit_body_get_cherry_picked_one(ref) + if result2: + extra = list([h2 for h2 in result2 if h2 not in result]) + if extra: + result.extend(extra) + for h2 in extra: + do_recurse(result, h2) + + result = [] + do_recurse(result, ref) + return result + + +def git_commits_annotate_fixes(rnge): + commits = git_all_commits(rnge) + c_dict = _keys_to_dict(commits) + for c in git_all_commits_grep(rnge, grep="[Ff]ixes:"): + ff = git_ref_commit_body_get_fixes(c) + if ff: + c_dict[c] = ff + return c_dict + + +def git_commits_annotate_cherry_picked(rnge): + commits = git_all_commits(rnge) + c_dict = _keys_to_dict(commits) + for c in git_all_commits_grep(ref_head, grep="cherry picked from commit"): + ff = git_ref_commit_body_get_cherry_picked_recurse(c) + if ff: + c_dict[c] = ff + return c_dict + + +if __name__ == "__main__": + if len(sys.argv) <= 1: + ref_head0 = "HEAD" + else: + ref_head0 = sys.argv[1] + + ref_head = git_ref_exists(ref_head0) + if not ref_head: + die('Ref "%s" does not exist' % (ref_head0)) + + ref_upstreams = [] + if len(sys.argv) <= 2: + head_name = git_get_head_name(ref_head0) + match = False + if head_name: + match = re.match("^refs/(heads|remotes/[^/]*)/nm-1-([0-9]+)$", head_name) + if match: + i = int(match.group(2)) + while True: + i += 2 + r = "nm-1-" + str(i) + if not git_ref_exists(r): + r = "refs/remotes/origin/nm-1-" + str(i) + if not git_ref_exists(r): + break + ref_upstreams.append(r) + ref_upstreams.append("master") + + if not ref_upstreams: + if len(sys.argv) <= 2: + ref_upstreams = ["master"] + else: + ref_upstreams = list(sys.argv[2:]) + + for h in ref_upstreams: + if not git_ref_exists(h): + die('Upstream ref "%s" does not exist' % (h)) + + print_err("Check %s (%s)" % (ref_head0, ref_head)) + print_err("Upstream refs: %s" % (ref_upstreams)) + + print_err('Check patches of "%s"...' % (ref_head)) + own_commits_list = git_all_commits(ref_head) + own_commits_cherry_picked = git_commits_annotate_cherry_picked(ref_head) + + cherry_picks_all = collections.OrderedDict() + for c, cherry_picked in own_commits_cherry_picked.items(): + if cherry_picked: + for c2 in cherry_picked: + l = cherry_picks_all.get(c2) + if not l: + cherry_picks_all[c2] = [c] + else: + l.append(c) + + own_commits_cherry_picked_flat = set() + for c, p in own_commits_cherry_picked.items(): + own_commits_cherry_picked_flat.add(c) + if p: + own_commits_cherry_picked_flat.update(p) + + # print(">>> own_commits_cherry_picked") + # pp.pprint(own_commits_cherry_picked) + + # print(">>> cherry_picks_all") + # pp.pprint(cherry_picks_all) + + # find all commits on the upstream branches that fix another commit. + fixing_commits = {} + for ref_upstream in ref_upstreams: + ref_str = ref_head + ".." + ref_upstream + print_err('Check upstream patches "%s"...' % (ref_str)) + for c, fixes in git_commits_annotate_fixes(ref_str).items(): + # print(">>> test %s ==> %s" % (c, fixes)) + if not fixes: + # print(">>> test %s ==> SKIP" % (c)) + continue + if c in cherry_picks_all: + # commit 'c' is already backported. Skip it. + # print(">>> in cherry_picks_all") + continue + for f in fixes: + if f not in own_commits_cherry_picked_flat: + # commit "c" fixes commit "f", but this is not one of our own commits + # and not interesting. + # print(">>> fixes %s not in own_commits_cherry_picked" % (f)) + continue + # print(">>> take %s (fixes %s)" % (c, fixes)) + fixing_commits[c] = fixes + break + + extra = collections.OrderedDict( + [(c, git_ref_commit_body_get_cherry_picked_recurse(c)) for c in fixing_commits] + ) + extra2 = [] + for c in extra: + is_back = False + for e_v in extra.values(): + if c in e_v: + is_back = True + break + if not is_back: + extra2.append(c) + + commits_good = list(fixing_commits) + commits_good = extra2 + + commits_good = git_commit_sorted(commits_good) + + print_err(git_logg(commits_good)) + + for c in reversed(commits_good): + print("%s" % (c)) diff --git a/contrib/scripts/nm-ci-run.sh b/contrib/scripts/nm-ci-run.sh index 52dffe2672..4d46ddb018 100755 --- a/contrib/scripts/nm-ci-run.sh +++ b/contrib/scripts/nm-ci-run.sh @@ -67,12 +67,6 @@ case "$CI" in ""|"true"|"default"|"gitlab") CI=default ;; - "travis") - _WITH_WERROR=0 - _WITH_LIBTEAM="$_FALSE" - _WITH_DOCS="$_FALSE" - _WITH_SYSTEMD_LOGIND="$_FALSE" - ;; *) die "invalid \$CI \"$CI\"" ;; @@ -172,12 +166,6 @@ run_autotools() { export NM_TEST_CLIENT_CHECK_L10N=1 - if [ "$CI" == travis ]; then - # travis is known to generate the settings doc differently. - # Don't compare. - export NMTST_NO_CHECK_SETTINGS_DOCS=yes - fi - if ! make check -j 6 -k ; then _print_test_logs "first-test" diff --git a/data/NetworkManager-wait-online.service.in b/data/NetworkManager-wait-online.service.in index 26a8f25362..fda23916d5 100644 --- a/data/NetworkManager-wait-online.service.in +++ b/data/NetworkManager-wait-online.service.in @@ -26,7 +26,7 @@ RemainAfterExit=yes # gets delayed too long, then the solution is usually not to decrease # the timeout, but to fix your setup so that the connected state # gets reached earlier. -Environment=NM_ONLINE_TIMEOUT=30 +Environment=NM_ONLINE_TIMEOUT=60 [Install] WantedBy=network-online.target diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am index dfa3210c68..4f370449a2 100644 --- a/docs/api/Makefile.am +++ b/docs/api/Makefile.am @@ -126,9 +126,19 @@ setup-build.stamp: #################################### -EXTRA_DIST += version.xml.in settings-spec.xsl meson.build $(GENERATED_FILES) -CLEANFILES += html/* tmpl/* xml/* \ - NetworkManager-sections.txt \ - NetworkManager-overrides.txt +EXTRA_DIST += \ + version.xml.in \ + settings-spec.xsl \ + meson.build \ + $(GENERATED_FILES) \ + $(NULL) -CLEANFILES += settings-spec.xml +CLEANFILES += \ + html/* \ + tmpl/* \ + xml/* \ + NetworkManager-overrides.txt \ + NetworkManager-sections.txt \ + NetworkManager.actions \ + settings-spec.xml \ + $(NULL) diff --git a/docs/libnm/Makefile.am b/docs/libnm/Makefile.am index b637f79835..5328bd6586 100644 --- a/docs/libnm/Makefile.am +++ b/docs/libnm/Makefile.am @@ -100,16 +100,19 @@ GTKDOC_LIBS = \ # include common portion ... include $(top_srcdir)/gtk-doc.make -EXTRA_DIST += version.xml.in meson.build +EXTRA_DIST += \ + version.xml.in \ + meson.build \ + $(NULL) CLEANFILES += \ - libnm-sections.txt \ - libnm-overrides.txt \ html/* \ tmpl/* \ - xml/* - -DISTCLEANFILES = libnm.actions + xml/* \ + libnm-overrides.txt \ + libnm-sections.txt \ + libnm.actions \ + $(NULL) if GTK_DOC_BUILD_HTML check-local-gtk-doc-patch: diff --git a/docs/libnm/libnm-docs.xml b/docs/libnm/libnm-docs.xml index 47b1fa1c08..3ff07c37bf 100644 --- a/docs/libnm/libnm-docs.xml +++ b/docs/libnm/libnm-docs.xml @@ -324,6 +324,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in <xi:include href="xml/nm-setting-ethtool.xml"/> <xi:include href="xml/nm-setting-generic.xml"/> <xi:include href="xml/nm-setting-gsm.xml"/> + <xi:include href="xml/nm-setting-hostname.xml"/> <xi:include href="xml/nm-setting-infiniband.xml"/> <xi:include href="xml/nm-setting-ip4-config.xml"/> <xi:include href="xml/nm-setting-ip6-config.xml"/> @@ -338,6 +339,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in <xi:include href="xml/nm-setting-ovs-dpdk.xml"/> <xi:include href="xml/nm-setting-ovs-patch.xml"/> <xi:include href="xml/nm-setting-ovs-port.xml"/> + <xi:include href="xml/nm-setting-ovs-external-ids.xml"/> <xi:include href="xml/nm-setting-ppp.xml"/> <xi:include href="xml/nm-setting-pppoe.xml"/> <xi:include href="xml/nm-setting-proxy.xml"/> @@ -348,6 +350,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in <xi:include href="xml/nm-setting-team.xml"/> <xi:include href="xml/nm-setting-tun.xml"/> <xi:include href="xml/nm-setting-user.xml"/> + <xi:include href="xml/nm-setting-veth.xml"/> <xi:include href="xml/nm-setting-vlan.xml"/> <xi:include href="xml/nm-setting-vpn.xml"/> <xi:include href="xml/nm-setting-vrf.xml"/> @@ -386,6 +389,7 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in <xi:include href="xml/nm-device-ppp.xml"/> <xi:include href="xml/nm-device-team.xml"/> <xi:include href="xml/nm-device-tun.xml"/> + <xi:include href="xml/nm-device-veth.xml"/> <xi:include href="xml/nm-device-vlan.xml"/> <xi:include href="xml/nm-device-vrf.xml"/> <xi:include href="xml/nm-device-vxlan.xml"/> diff --git a/examples/python/dbus/add-wifi-psk-connection.py b/examples/python/dbus/add-wifi-psk-connection.py index 66d42e8204..ca8b03008e 100755 --- a/examples/python/dbus/add-wifi-psk-connection.py +++ b/examples/python/dbus/add-wifi-psk-connection.py @@ -11,11 +11,11 @@ s_con = dbus.Dictionary( ) s_wifi = dbus.Dictionary( - {"ssid": dbus.ByteArray("best-wifi".encode("utf-8")), "mode": "infrastructure",} + {"ssid": dbus.ByteArray("best-wifi".encode("utf-8")), "mode": "infrastructure"} ) s_wsec = dbus.Dictionary( - {"key-mgmt": "wpa-psk", "auth-alg": "open", "psk": "super-secret-password",} + {"key-mgmt": "wpa-psk", "auth-alg": "open", "psk": "super-secret-password"} ) s_ip4 = dbus.Dictionary({"method": "auto"}) diff --git a/examples/python/gi/nm-keyfile.py b/examples/python/gi/nm-keyfile.py new file mode 100755 index 0000000000..21d70e0bef --- /dev/null +++ b/examples/python/gi/nm-keyfile.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: LGPL-2.1+ + +import sys +import os + +import gi + +gi.require_version("NM", "1.0") +from gi.repository import NM, GLib + +############################################################################### + + +def kf_load_from_file(filename): + kf = GLib.KeyFile.new() + kf.load_from_file(filename, GLib.KeyFileFlags.NONE) + return kf + + +def kf_to_string(kf): + d, l = kf.to_data() + return d + + +def debug(message): + if os.getenv("DEBUG") == "1": + print(">>> %s" % (message)) + + +############################################################################### + +filename = sys.argv[1] +base_dir = os.path.dirname(os.path.realpath(filename)) + +kf = kf_load_from_file(filename) + +print('> keyfile "%s":' % (filename)) +print(">>\n%s\n<<" % (kf_to_string(kf))) + +############################################################################### + + +def kf_handler_read(keyfile, connection, handler_type, handler_data, user_data): + kf_handler_read_cnt = globals().get("kf_handler_read_cnt", 0) + 1 + globals()["kf_handler_read_cnt"] = kf_handler_read_cnt + + [kf_group, kf_key, cur_setting, cur_property] = handler_data.get_context() + + debug("kf_handler_read(%s): keyfile=%r" % (kf_handler_read_cnt, keyfile)) + debug("kf_handler_read(%s): connection=%r" % (kf_handler_read_cnt, connection)) + debug("kf_handler_read(%s): handler-type=%r" % (kf_handler_read_cnt, handler_type)) + debug("kf_handler_read(%s): handler-data=%r" % (kf_handler_read_cnt, handler_data)) + debug("kf_handler_read(%s): user-data=%r" % (kf_handler_read_cnt, user_data)) + debug("kf_handler_read(%s): kf-group=%r" % (kf_handler_read_cnt, kf_group)) + debug("kf_handler_read(%s): kf-key=%r" % (kf_handler_read_cnt, kf_key)) + debug("kf_handler_read(%s): kf-setting=%r" % (kf_handler_read_cnt, cur_setting)) + debug("kf_handler_read(%s): kf-property=%r" % (kf_handler_read_cnt, cur_property)) + + if handler_type == NM.KeyfileHandlerType.WARN: + [message, severity] = handler_data.warn_get() + debug('parse-warning: <%s> = "%s"' % (severity, message)) + print("> warning: %s" % (message)) + return False + + if handler_type == NM.KeyfileHandlerType.WRITE_CERT: + # just to show how to abort the parsing. This event won't happen + # for read. + handler_data.fail_with_error( + GLib.GError.new_literal( + NM.ConnectionError.quark(), "hallo1", NM.ConnectionError.MISSINGPROPERTY + ) + ) + + # don't handle unknown handler types. + return False + + +try: + print("parse keyfile...") + c = NM.keyfile_read(kf, base_dir, NM.KeyfileHandlerFlags.NONE, kf_handler_read, 42) +except Exception as e: + print("parsing failed: %r" % (e)) + raise + +verify_failure = None +try: + c.verify() +except Exception as e: + verify_failure = e.message + +print( + 'parsing succeeded: "%s" (%s)%s' + % ( + c.get_id(), + c.get_uuid(), + " (invalid: " + verify_failure + ")" if verify_failure is not None else "", + ) +) + + +############################################################################### + + +def kf_handler_write(connection, keyfile, handler_type, handler_data, user_data): + kf_handler_write_cnt = globals().get("kf_handler_write_cnt", 0) + 1 + globals()["kf_handler_write_cnt"] = kf_handler_write_cnt + + [kf_group, kf_key, cur_setting, cur_property] = handler_data.get_context() + + debug("kf_handler_write(%s): keyfile=%r" % (kf_handler_write_cnt, keyfile)) + debug("kf_handler_write(%s): connection=%r" % (kf_handler_write_cnt, connection)) + debug( + "kf_handler_write(%s): handler-type=%r" % (kf_handler_write_cnt, handler_type) + ) + debug( + "kf_handler_write(%s): handler-data=%r" % (kf_handler_write_cnt, handler_data) + ) + debug("kf_handler_write(%s): user-data=%r" % (kf_handler_write_cnt, user_data)) + debug("kf_handler_write(%s): kf-group=%r" % (kf_handler_write_cnt, kf_group)) + debug("kf_handler_write(%s): kf-key=%r" % (kf_handler_write_cnt, kf_key)) + debug("kf_handler_write(%s): kf-setting=%r" % (kf_handler_write_cnt, cur_setting)) + debug("kf_handler_write(%s): kf-property=%r" % (kf_handler_write_cnt, cur_property)) + + if handler_type == NM.KeyfileHandlerType.WRITE_CERT: + return False + return False + + +try: + print("") + print("write keyfile...") + kf2 = NM.keyfile_write(c, NM.KeyfileHandlerFlags.NONE, kf_handler_write, 43) +except Exception as e: + print("write failed: %r" % (e)) + raise + +print("persisted again:") +print(">>\n%s\n<<" % (kf_to_string(kf2))) diff --git a/examples/python/gi/ovs-external-ids.py b/examples/python/gi/ovs-external-ids.py new file mode 100755 index 0000000000..12c3d294fc --- /dev/null +++ b/examples/python/gi/ovs-external-ids.py @@ -0,0 +1,663 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (C) 2017, 2020 Red Hat, Inc. +# + +# +# set and show OVS external-ids for a connection: +# + +import sys +import os +import re +import pprint +import subprocess + +import gi + +gi.require_version("NM", "1.0") +from gi.repository import GLib, NM + +############################################################################### + +MODE_GET = "get" +MODE_SET = "set" +MODE_APPLY = "apply" + + +def memoize0(f): + result = [] + + def helper(): + if len(result) == 0: + result.append(f()) + return result[0] + + return helper + + +def memoize(f): + memo = {} + + def helper(x): + if x not in memo: + memo[x] = f(x) + return memo[x] + + return helper + + +def pr(v): + pprint.pprint(v, indent=4, depth=5, width=60) + + +@memoize0 +def is_libnm_debug(): + return os.getenv("LIBNM_CLIENT_DEBUG") is not None + + +@memoize0 +def can_sudo(): + try: + return ( + subprocess.run( + ["sudo", "-n", "true"], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ).returncode + == 0 + ) + except: + return False + + +def _print(msg=""): + if is_libnm_debug(): + # we want to use the same logging mechanism as libnm's debug + # logging with "LIBNM_CLIENT_DEBUG=trace,stdout". + NM.utils_print(0, msg + "\n") + return + print(msg) + + +def mainloop_run(timeout_msec=0, mainloop=None): + if mainloop is None: + mainloop = GLib.MainLoop() + + timeout_id = None + timeout_reached = [] + + if timeout_msec > 0: + + def _timeout_cb(unused): + # it can happen that the caller already quit the mainloop + # otherwise. In that case, we don't want to signal a timeout. + if mainloop.is_running(): + timeout_reached.append(1) + mainloop.quit() + return True + + timeout_id = GLib.timeout_add(timeout_msec, _timeout_cb, None) + + mainloop.run() + if timeout_id: + GLib.source_remove(timeout_id) + return not timeout_reached + + +############################################################################### + + +def connection_update2(remote_connection, connection): + + mainloop = GLib.MainLoop() + result_error = [] + + def cb(c, result): + try: + c.update2_finish(result) + except Exception as e: + result_error.append(e) + mainloop.quit() + + remote_connection.update2( + connection.to_dbus(NM.ConnectionSerializationFlags.ALL), + NM.SettingsUpdate2Flags.NO_REAPPLY, + None, + None, + cb, + ) + + mainloop_run(mainloop=mainloop) + + if result_error: + raise result_error[0] + + +def device_get_applied_connection(device): + mainloop = GLib.MainLoop() + rr = [] + + def cb(c, result): + try: + con, version_id = c.get_applied_connection_finish(result) + except Exception as e: + rr.append(e) + else: + rr.append(con) + rr.append(version_id) + mainloop.quit() + + device.get_applied_connection_async(0, None, cb) + + mainloop_run(mainloop=mainloop) + + if len(rr) == 1: + raise rr[0] + return rr[0], rr[1] + + +def device_reapply(device, connection, version_id): + + mainloop = GLib.MainLoop() + result_error = [] + + def cb(d, result): + try: + d.reapply_finish(result) + except Exception as e: + result_error.append(e) + mainloop.quit() + + device.reapply_async(connection, version_id, 0, None, cb) + + mainloop_run(mainloop=mainloop) + + if len(result_error) == 1: + raise result_error[0] + + +def ovs_print_external_ids(prefix): + if not can_sudo(): + _print(prefix + ": not running as root and cannot call ovs-vsctl") + return + + cmds = [["ovs-vsctl", "show"]] + for typ in ["Bridge", "Port", "Interface"]: + cmds += [["ovs-vsctl", "--columns=name,external-ids", "list", typ]] + + out = "" + for cmd in cmds: + p = subprocess.run(cmd, stdout=subprocess.PIPE, check=True,) + out += p.stdout.decode("utf-8") + "\n" + out = "\n".join([prefix + s for s in out.split("\n")]) + _print(out) + + +############################################################################### + + +def usage(): + _print("%s g[et] PROFILE [ GETTER ]" % (sys.argv[0])) + _print("%s s[et] PROFILE SETTER [--test]" % (sys.argv[0])) + _print("%s a[pply] DEVICE SETTER [--test]" % (sys.argv[0])) + _print( + " PROFILE := [id | uuid | type] STRING | [ ~id | ~type ] REGEX_STRING | STRING" + ) + _print(" DEVICE := [iface] STRING") + _print(" GETTER := ( KEY | ~REGEX_KEY ) [... GETTER]") + _print(" SETTER := ( + | - | -KEY | [+]KEY VALUE ) [... SETTER]") + + +def die(msg, show_usage=False): + _print("FAILED: %s" % (msg)) + if show_usage: + usage() + sys.exit(1) + + +def die_usage(msg): + die(msg, show_usage=True) + + +def parse_args(argv): + had_dash_dash = False + args = { + "mode": MODE_GET, + "select_arg": None, + "ids_arg": [], + "do_test": False, + } + i = 1 + while i < len(argv): + a = argv[i] + + if i == 1: + if a in ["s", "set"]: + args["mode"] = MODE_SET + elif a in ["g", "get"]: + args["mode"] = MODE_GET + elif a in ["a", "apply"]: + args["mode"] = MODE_APPLY + else: + die_usage("unexpected mode argument '%s'" % (a)) + i += 1 + continue + + if a == "--test": + args["do_test"] = True + i += 1 + continue + + if args["select_arg"] is None: + if args["mode"] == MODE_APPLY: + possible_selects = ["iface"] + else: + possible_selects = ["id", "~id", "uuid", "type", "~type"] + + if a in possible_selects: + if i + 1 >= len(argv): + die_usage("'%s' requires an argument'" % (a)) + args["select_arg"] = (a, argv[i + 1]) + i += 2 + continue + + if a == "*": + a = None + args["select_arg"] = ("*", a) + i += 1 + continue + + if args["mode"] == MODE_GET: + args["ids_arg"].append(a) + i += 1 + continue + + if not a: + die_usage("argument should specify a external-id but is empty string") + + if a[0] == "-": + v = (a, None) + i += 1 + elif a == "+": + v = (a, None) + i += 1 + else: + if a[0] != "+": + a = "+" + a + if i + 1 >= len(argv): + die_usage("'%s' requires an argument'" % (a)) + v = (a, argv[i + 1]) + i += 2 + + args["ids_arg"].append(v) + + if args["mode"] == MODE_SET: + if not args["ids_arg"]: + die_usage("Requires one or more external-ids to set or delete") + + return args + + +def device_to_str(device, show_type=False): + if show_type: + return "%s (%s)" % (device.get_iface(), device.get_type_desc()) + return "%s" % (device.get_iface(),) + + +def connection_to_str(connection, show_type=False): + if show_type: + return "%s (%s, %s)" % ( + connection.get_id(), + connection.get_uuid(), + connection.get_connection_type(), + ) + return "%s (%s)" % (connection.get_id(), connection.get_uuid()) + + +def devices_filter(devices, select_arg): + devices = list(sorted(devices, key=device_to_str)) + if not select_arg: + return devices + # we preserve the order of the selected devices. And + # if devices are selected multiple times, we return + # them multiple times. + l = [] + f = select_arg + for d in devices: + if f[0] == "iface": + if f[1] == d.get_iface(): + l.append(d) + else: + assert f[0] == "*" + if f[1] is None: + l.append(d) + else: + if f[1] in [d.get_iface()]: + l.append(d) + return l + + +def connections_filter(connections, select_arg): + connections = list(sorted(connections, key=connection_to_str)) + if not select_arg: + return connections + # we preserve the order of the selected connections. And + # if connections are selected multiple times, we return + # them multiple times. + l = [] + f = select_arg + for c in connections: + if f[0] == "id": + if f[1] == c.get_id(): + l.append(c) + elif f[0] == "~id": + if re.match(f[1], c.get_id()): + l.append(c) + elif f[0] == "uuid": + if f[1] == c.get_uuid(): + l.append(c) + elif f[0] == "type": + if f[1] == c.get_connection_type(): + l.append(c) + elif f[0] == "~type": + if re.match(f[1], c.get_connection_type()): + l.append(c) + else: + assert f[0] == "*" + if f[1] is None: + l.append(c) + else: + if f[1] in [c.get_uuid(), c.get_id()]: + l.append(c) + return l + + +def ids_select(ids, mode, ids_arg): + ids = list(ids) + if not ids_arg: + return (ids, []) + + keys = set() + requested = [] + for d in ids_arg: + if mode == MODE_GET: + if d[0] == "~": + r = re.compile(d[1:]) + keys.update([k for k in ids if r.match(k)]) + else: + keys.update([k for k in ids if k == d]) + if d not in requested: + requested.append(d) + else: + assert mode in [MODE_SET, MODE_APPLY] + d2 = d[0] + assert d2[0] in ["-", "+"] + d3 = d2[1:] + if d3 in ids: + keys.add(d3) + return (list([k for k in ids if k in keys]), requested) + + +def connection_print(connection, mode, ids_arg, dbus_path, prefix=""): + sett = connection.get_setting(NM.SettingOvsExternalIDs) + + if sett is not None: + all_ids = list(sett.get_data_keys()) + keys, requested = ids_select(all_ids, mode, ids_arg) + num_str = "%s" % (len(all_ids)) + else: + keys = [] + requested = [] + num_str = "none" + + _print( + "%s%s [%s]" % (prefix, connection_to_str(connection, show_type=True), num_str) + ) + if dbus_path: + _print("%s %s" % (prefix, dbus_path)) + if sett is not None: + dd = sett.get_property(NM.SETTING_OVS_EXTERNAL_IDS_DATA) + else: + dd = {} + for k in keys: + v = sett.get_data(k) + assert v is not None + assert v == dd.get(k, None) + _print('%s "%s" = "%s"' % (prefix, k, v)) + for k in requested: + _print('%s "%s" = <unset>' % (prefix, k)) + + +def sett_update(connection, ids_arg): + + sett = connection.get_setting(NM.SettingOvsExternalIDs) + + for d in ids_arg: + op = d[0][0] + key = d[0][1:] + val = d[1] + + oldval = None + if sett is not None: + oldval = sett.get_data(key) + + if op == "-": + assert val is None + if key == "": + if sett is None: + _print(" DEL: setting (ovs-external-ids group was not present)") + else: + connection.remove_setting(NM.SettingOvsExternalIDs) + sett = None + _print(" DEL: setting") + continue + + if sett is None: + _print(' DEL: "%s" (ovs-external-ids group was not present)' % (key)) + continue + if oldval is None: + _print(' DEL: "%s" (id was unset)' % (key)) + continue + _print(' DEL: "%s" (id was set to"%s")' % (key, oldval)) + sett.set_data(key, None) + continue + + if key == "": + assert val is None + if sett is None: + sett = NM.SettingOvsExternalIDs.new() + connection.add_setting(sett) + _print(" SET: setting (external-ids group was added)") + continue + + _print(" SET: setting (external-ids group was present)") + continue + + assert val is not None + + if sett is None: + sett = NM.SettingOvsExternalIDs.new() + connection.add_setting(sett) + _print( + ' SET: "%s" = "%s" (external-ids group was not present)' % (key, val) + ) + elif oldval is None: + _print(' SET: "%s" = "%s" (new)' % (key, val)) + elif oldval != val: + _print(' SET: "%s" = "%s" (was "%s")' % (key, val, oldval)) + else: + _print(' SET: "%s" = "%s" (unchanged)' % (key, val)) + sett.set_data(key, val) + + +def do_get(connections, ids_arg): + first_line = True + for c in connections: + if first_line: + first_line = False + else: + _print() + connection_print(c, MODE_GET, ids_arg, dbus_path=c.get_path()) + + +def do_set(nmc, connection, ids_arg, do_test): + + remote_connection = connection + connection = NM.SimpleConnection.new_clone(remote_connection) + + connection_print( + connection, MODE_SET, [], remote_connection.get_path(), prefix="BEFORE: " + ) + _print() + + sett_update(connection, ids_arg) + + if do_test: + _print() + _print("Only show. Run without --test to set") + return + + try: + connection_update2(remote_connection, connection) + except Exception as e: + _print() + _print("FAILURE to commit connection: %s" % (e)) + return + + # NMClient received the completion of Update2() call. It also received + # a property changed signal that the profile changed, and it is about + # to fetch the new value. However, that value is not yet here. + # + # libnm should provide a better API for this. For example, not signal + # completion of update2() until the profile was refetched. Or, indicate + # that the settings are dirty, so we would know how long to wait. + # + # Add an ugly workaround here and wait a bit. + _print() + _print("WORKAROUND: wait for connection to change") + mainloop_run(timeout_msec=500) + + if remote_connection is not nmc.get_object_by_path(remote_connection.get_path()): + _print() + _print( + "Connection %s no longer exists after commit" + % (remote_connection.get_path()) + ) + return + + _print() + connection_print( + remote_connection, MODE_SET, [], remote_connection.get_path(), prefix="AFTER: " + ) + + _print() + if remote_connection.compare(connection, NM.SettingCompareFlags.EXACT): + _print("resulting connection is as expected") + else: + _print("WARNING: resulting connection is not as expected") + + +def do_apply(nmc, device, ids_arg, do_test): + + try: + connection_orig, version_id = device_get_applied_connection(device) + except Exception as e: + _print( + 'failure to get applied connection for %s: %s"' % (device_to_str(device), e) + ) + die("The device does not seem active? Nothing to reapply") + + _print( + "REAPPLY device %s (%s) with connection %s (version-id = %s)" + % ( + device_to_str(device), + NM.Object.get_path(device), + connection_to_str(connection_orig), + version_id, + ) + ) + _print() + + ovs_print_external_ids("BEFORE-OVS-VSCTL: ") + _print() + + connection = NM.SimpleConnection.new_clone(connection_orig) + + connection_print(connection, MODE_APPLY, [], device.get_path(), prefix="BEFORE: ") + _print() + + sett_update(connection, ids_arg) + + if do_test: + _print() + _print("Only show. Run without --test to set") + return + + _print() + _print("reapply...") + + try: + device_reapply(device, connection, version_id) + except Exception as e: + _print() + _print("FAILURE to commit connection: %s" % (e)) + return + + try: + connection_after, version_id = device_get_applied_connection(device) + except Exception as e: + _print( + 'failure to get applied connection after reapply for device %s: %s"' + % (device_to_str(device), e) + ) + die("FAILURE to get applied connection after reapply") + + _print() + connection_print(connection, MODE_APPLY, [], device.get_path(), prefix="AFTER: ") + _print() + + ovs_print_external_ids("AFTER-OVS-VSCTL: ") + + +############################################################################### + +if __name__ == "__main__": + + args = parse_args(sys.argv) + + nmc = NM.Client.new(None) + + if args["mode"] == MODE_APPLY: + + devices = devices_filter(nmc.get_devices(), args["select_arg"]) + + if len(devices) != 1: + _print( + "To apply the external-ids of a device, exactly one connection must be selected. Instead, %s devices matched ([%s])" + % (len(devices), ", ".join([device_to_str(c) for c in devices]),) + ) + die_usage("Select unique device to apply") + do_apply(nmc, devices[0], args["ids_arg"], do_test=args["do_test"]) + + else: + + connections = connections_filter(nmc.get_connections(), args["select_arg"]) + + if args["mode"] == MODE_SET: + if len(connections) != 1: + _print( + "To set the external-ids of a connection, exactly one connection must be selected via id|uuid. Instead, %s connection matched ([%s])" + % ( + len(connections), + ", ".join([connection_to_str(c) for c in connections]), + ) + ) + die_usage("Select unique connection to set") + do_set(nmc, connections[0], args["ids_arg"], do_test=args["do_test"]) + else: + if len(connections) < 1: + _print("No connection selected for printing the external ids") + die_usage("Select connection to get") + do_get(connections, args["ids_arg"]) diff --git a/libnm-core/meson.build b/libnm-core/meson.build index da74fb0439..e3a5dc8445 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -18,6 +18,7 @@ libnm_core_headers = files( 'nm-core-types.h', 'nm-dbus-interface.h', 'nm-errors.h', + 'nm-keyfile.h', 'nm-setting-6lowpan.h', 'nm-setting-8021x.h', 'nm-setting-adsl.h', @@ -32,6 +33,7 @@ libnm_core_headers = files( 'nm-setting-ethtool.h', 'nm-setting-generic.h', 'nm-setting-gsm.h', + 'nm-setting-hostname.h', 'nm-setting-infiniband.h', 'nm-setting-ip-config.h', 'nm-setting-ip-tunnel.h', @@ -42,8 +44,9 @@ libnm_core_headers = files( 'nm-setting-match.h', 'nm-setting-olpc-mesh.h', 'nm-setting-ovs-bridge.h', - 'nm-setting-ovs-interface.h', 'nm-setting-ovs-dpdk.h', + 'nm-setting-ovs-external-ids.h', + 'nm-setting-ovs-interface.h', 'nm-setting-ovs-patch.h', 'nm-setting-ovs-port.h', 'nm-setting-ppp.h', @@ -56,6 +59,7 @@ libnm_core_headers = files( 'nm-setting-team.h', 'nm-setting-tun.h', 'nm-setting-user.h', + 'nm-setting-veth.h', 'nm-setting-vlan.h', 'nm-setting-vpn.h', 'nm-setting-vrf.h', @@ -132,6 +136,7 @@ libnm_core_settings_sources = files( 'nm-setting-ethtool.c', 'nm-setting-generic.c', 'nm-setting-gsm.c', + 'nm-setting-hostname.c', 'nm-setting-infiniband.c', 'nm-setting-ip-config.c', 'nm-setting-ip-tunnel.c', @@ -142,8 +147,9 @@ libnm_core_settings_sources = files( 'nm-setting-match.c', 'nm-setting-olpc-mesh.c', 'nm-setting-ovs-bridge.c', - 'nm-setting-ovs-interface.c', 'nm-setting-ovs-dpdk.c', + 'nm-setting-ovs-external-ids.c', + 'nm-setting-ovs-interface.c', 'nm-setting-ovs-patch.c', 'nm-setting-ovs-port.c', 'nm-setting-ppp.c', @@ -156,6 +162,7 @@ libnm_core_settings_sources = files( 'nm-setting-team.c', 'nm-setting-tun.c', 'nm-setting-user.c', + 'nm-setting-veth.c', 'nm-setting-vlan.c', 'nm-setting-vpn.c', 'nm-setting-vrf.c', @@ -235,12 +242,14 @@ libnm_libnm_core_aux_dep = declare_dependency( link_with: libnm_libnm_core_aux, ) +nm_keyfile_source = files( + 'nm-keyfile/nm-keyfile-utils.c', + 'nm-keyfile/nm-keyfile.c', +) + libnm_keyfile = static_library( 'nm-keyfile', - sources: files( - 'nm-keyfile/nm-keyfile-utils.c', - 'nm-keyfile/nm-keyfile.c', - ) + [libnm_core_enum_sources[1]], + sources: nm_keyfile_source + [libnm_core_enum_sources[1]], dependencies: libnm_utils_base_dep, c_args: [ '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 10bfe7b839..651d919395 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -1065,7 +1065,8 @@ _normalize_bond_mode(NMConnection *self) if (mode_int != -1) { const char *mode_new = nm_utils_bond_mode_int_to_string(mode_int); - if (g_strcmp0(mode_new, mode) != 0) { + + if (!nm_streq0(mode_new, mode)) { nm_setting_bond_add_option(s_bond, NM_SETTING_BOND_OPTION_MODE, mode_new); return TRUE; } @@ -2641,6 +2642,7 @@ nm_connection_is_virtual(NMConnection *connection) NM_SETTING_OVS_PORT_SETTING_NAME, NM_SETTING_TEAM_SETTING_NAME, NM_SETTING_TUN_SETTING_NAME, + NM_SETTING_VETH_SETTING_NAME, NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VRF_SETTING_NAME, NM_SETTING_VXLAN_SETTING_NAME, diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h index f296a77fa6..b522487d12 100644 --- a/libnm-core/nm-core-internal.h +++ b/libnm-core/nm-core-internal.h @@ -37,6 +37,7 @@ #include "nm-setting-dummy.h" #include "nm-setting-generic.h" #include "nm-setting-gsm.h" +#include "nm-setting-hostname.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip-tunnel.h" #include "nm-setting-ip4-config.h" @@ -59,6 +60,7 @@ #include "nm-setting-team-port.h" #include "nm-setting-team.h" #include "nm-setting-tun.h" +#include "nm-setting-veth.h" #include "nm-setting-vlan.h" #include "nm-setting-vpn.h" #include "nm-setting-vrf.h" @@ -476,6 +478,10 @@ GSList *_nm_vpn_plugin_info_list_load_dir(const char * dirname, /*****************************************************************************/ +GHashTable *_nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *self); + +/*****************************************************************************/ + typedef struct { const char *name; gboolean numeric; diff --git a/libnm-core/nm-core-types.h b/libnm-core/nm-core-types.h index 80466e351d..9668ec8ff2 100644 --- a/libnm-core/nm-core-types.h +++ b/libnm-core/nm-core-types.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2014 - 2018 Red Hat, Inc. */ @@ -28,6 +28,7 @@ typedef struct _NMSettingDummy NMSettingDummy; typedef struct _NMSettingEthtool NMSettingEthtool; typedef struct _NMSettingGeneric NMSettingGeneric; typedef struct _NMSettingGsm NMSettingGsm; +typedef struct _NMSettingHostname NMSettingHostname; typedef struct _NMSettingIP4Config NMSettingIP4Config; typedef struct _NMSettingIP6Config NMSettingIP6Config; typedef struct _NMSettingIPConfig NMSettingIPConfig; @@ -39,6 +40,7 @@ typedef struct _NMSettingMatch NMSettingMatch; typedef struct _NMSettingOlpcMesh NMSettingOlpcMesh; typedef struct _NMSettingOvsBridge NMSettingOvsBridge; typedef struct _NMSettingOvsDpdk NMSettingOvsDpdk; +typedef struct _NMSettingOvsExternalIDs NMSettingOvsExternalIDs; typedef struct _NMSettingOvsInterface NMSettingOvsInterface; typedef struct _NMSettingOvsPatch NMSettingOvsPatch; typedef struct _NMSettingOvsPort NMSettingOvsPort; @@ -52,6 +54,7 @@ typedef struct _NMSettingTeam NMSettingTeam; typedef struct _NMSettingTeamPort NMSettingTeamPort; typedef struct _NMSettingTun NMSettingTun; typedef struct _NMSettingUser NMSettingUser; +typedef struct _NMSettingVeth NMSettingVeth; typedef struct _NMSettingVlan NMSettingVlan; typedef struct _NMSettingVpn NMSettingVpn; typedef struct _NMSettingVrf NMSettingVrf; diff --git a/libnm-core/nm-dbus-interface.h b/libnm-core/nm-dbus-interface.h index eaa4c1b56c..e7e1244bed 100644 --- a/libnm-core/nm-dbus-interface.h +++ b/libnm-core/nm-dbus-interface.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2004 - 2018 Red Hat, Inc. */ diff --git a/libnm-core/nm-keyfile.h b/libnm-core/nm-keyfile.h new file mode 100644 index 0000000000..0967d25495 --- /dev/null +++ b/libnm-core/nm-keyfile.h @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: LGPL-2.1+ + +#ifndef __NM_KEYFILE_H__ +#define __NM_KEYFILE_H__ + +#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) + #error "Only <NetworkManager.h> can be included directly." +#endif + +#include "nm-core-types.h" + +G_BEGIN_DECLS + +/** + * NMKeyfileHandlerFlags: + * @NM_KEYFILE_HANDLER_FLAGS_NONE: no flags set. + * + * Flags for customizing nm_keyfile_read() and nm_keyfile_write(). + * + * Currently no flags are implemented. + * + * Since: 1.30 + */ +typedef enum { /*< flags >*/ + NM_KEYFILE_HANDLER_FLAGS_NONE = 0, +} NMKeyfileHandlerFlags; + +/** + * NMKeyfileHandlerType: + * @NM_KEYFILE_HANDLER_TYPE_WARN: a warning. + * @NM_KEYFILE_HANDLER_TYPE_WRITE_CERT: for handling certificates while writing + * a connection to keyfile. + * + * The type of the callback for %NMKeyfileReadHandler and %NMKeyfileWriteHandler. + * Depending on the type, you can interpret %NMKeyfileHandlerData. + * + * Since: 1.30 + */ +typedef enum { + NM_KEYFILE_HANDLER_TYPE_WARN = 1, + NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2, +} NMKeyfileHandlerType; + +/** + * NMKeyfileHandlerData: + * + * Opaque type with parameters for the callback. The actual content + * depends on the %NMKeyfileHandlerType. + * + * Since: 1.30 + */ +typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData; + +/** + * NMKeyfileReadHandler: + * @keyfile: the #GKeyFile that is currently read + * @connection: the #NMConnection that is being constructed. + * @handler_type: the %NMKeyfileHandlerType that indicates which type + * the request is. + * @handler_data: the #NMKeyfileHandlerData. What you can do with it + * depends on the @handler_type. + * @user_data: the user-data argument to nm_keyfile_read(). + * + * Hook to nm_keyfile_read(). + * + * The callee may abort the reading by setting an error via nm_keyfile_handler_data_fail_with_error(). + * + * Returns: the callee should return TRUE, if the event was handled and/or recognized. + * Otherwise, a default action will be performed that depends on the @type. + * For %NM_KEYFILE_HANDLER_TYPE_WARN type, the default action is doing nothing. + * + * Since: 1.30 + */ +typedef gboolean (*NMKeyfileReadHandler)(GKeyFile * keyfile, + NMConnection * connection, + NMKeyfileHandlerType handler_type, + NMKeyfileHandlerData *handler_data, + void * user_data); + +NM_AVAILABLE_IN_1_30 +NMConnection *nm_keyfile_read(GKeyFile * keyfile, + const char * base_dir, + NMKeyfileHandlerFlags handler_flags, + NMKeyfileReadHandler handler, + void * user_data, + GError ** error); + +/** + * NMKeyfileWriteHandler: + * @connection: the #NMConnection that is currently written. + * @keyfile: the #GKeyFile that is currently constructed. + * @handler_type: the %NMKeyfileHandlerType that indicates which type + * the request is. + * @handler_data: the #NMKeyfileHandlerData. What you can do with it + * depends on the @handler_type. + * @user_data: the user-data argument to nm_keyfile_read(). + * + * This is a hook to tweak the serialization. + * + * Handler for certain properties or events that are not entirely contained + * within the keyfile or that might be serialized differently. The @type and + * @handler_data arguments tell which kind of argument we have at hand. + * + * Currently only the type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported. + * + * The callee may call nm_keyfile_handler_data_fail_with_error() to abort + * the writing with error. + * + * Returns: the callee should return %TRUE if the event was handled. If the + * event was unhandled, a default action will be performed that depends on + * the @handler_type. + * + * Since: 1.30 + */ +typedef gboolean (*NMKeyfileWriteHandler)(NMConnection * connection, + GKeyFile * keyfile, + NMKeyfileHandlerType handler_type, + NMKeyfileHandlerData *handler_data, + void * user_data); + +NM_AVAILABLE_IN_1_30 +GKeyFile *nm_keyfile_write(NMConnection * connection, + NMKeyfileHandlerFlags handler_flags, + NMKeyfileWriteHandler handler, + void * user_data, + GError ** error); + +/*****************************************************************************/ + +NM_AVAILABLE_IN_1_30 +void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src); + +NM_AVAILABLE_IN_1_30 +void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data, + const char ** out_kf_group_name, + const char ** out_kf_key_name, + NMSetting ** out_cur_setting, + const char ** out_cur_property_name); + +/** + * NMKeyfileWarnSeverity: + * @NM_KEYFILE_WARN_SEVERITY_DEBUG: debug message + * @NM_KEYFILE_WARN_SEVERITY_INFO: info message + * @NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE: info message about a missing file + * @NM_KEYFILE_WARN_SEVERITY_WARN: a warning message + * + * The severity level of %NM_KEYFILE_HANDLER_TYPE_WARN events. + * + * Since: 1.30 + */ +typedef enum { + NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000, + NM_KEYFILE_WARN_SEVERITY_INFO = 2000, + NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901, + NM_KEYFILE_WARN_SEVERITY_WARN = 3000, +} NMKeyfileWarnSeverity; + +NM_AVAILABLE_IN_1_30 +void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data, + const char ** out_message, + NMKeyfileWarnSeverity * out_severity); + +G_END_DECLS + +#endif /* __NM_KEYFILE_H__ */ diff --git a/libnm-core/nm-keyfile/nm-keyfile-internal.h b/libnm-core/nm-keyfile/nm-keyfile-internal.h index 77372f3ac9..13f8428252 100644 --- a/libnm-core/nm-keyfile/nm-keyfile-internal.h +++ b/libnm-core/nm-keyfile/nm-keyfile-internal.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2008 Novell, Inc. * Copyright (C) 2015 Red Hat, Inc. @@ -13,6 +13,8 @@ #include <sys/types.h> +#include "nm-keyfile.h" + #include "nm-connection.h" #include "nm-setting-8021x.h" @@ -31,47 +33,6 @@ char *nm_keyfile_detect_unqualified_path_scheme(const char * base_dir, gboolean consider_exists, gboolean * out_exists); -typedef enum { /*< flags >*/ - NM_KEYFILE_HANDLER_FLAGS_NONE = 0, -} NMKeyfileHandlerFlags; - -typedef enum { - NM_KEYFILE_HANDLER_TYPE_WARN = 1, - NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2, -} NMKeyfileHandlerType; - -typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData; - -/** - * NMKeyfileReadHandler: - * - * Hook to nm_keyfile_read(). The user might fail the reading by setting - * @error. - * - * Returns: should return TRUE, if the reading was handled. Otherwise, - * a default action will be performed that depends on the @handler_type. - * For %NM_KEYFILE_HANDLER_TYPE_WARN handler_type, the default action is doing nothing. - */ -typedef gboolean (*NMKeyfileReadHandler)(GKeyFile * keyfile, - NMConnection * connection, - NMKeyfileHandlerType handler_type, - NMKeyfileHandlerData *handler_data, - void * user_data); - -typedef enum { - NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000, - NM_KEYFILE_WARN_SEVERITY_INFO = 2000, - NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901, - NM_KEYFILE_WARN_SEVERITY_WARN = 3000, -} NMKeyfileWarnSeverity; - -NMConnection *nm_keyfile_read(GKeyFile * keyfile, - const char * base_dir, - NMKeyfileHandlerFlags handler_flags, - NMKeyfileReadHandler handler, - void * user_data, - GError ** error); - gboolean nm_keyfile_read_ensure_id(NMConnection *connection, const char *fallback_id); gboolean nm_keyfile_read_ensure_uuid(NMConnection *connection, const char *fallback_uuid_seed); @@ -79,47 +40,10 @@ gboolean nm_keyfile_read_ensure_uuid(NMConnection *connection, const char *fallb /*****************************************************************************/ /** - * NMKeyfileWriteHandler: - * - * This is a hook to tweak the serialization. - * - * Handler for certain properties or events that are not entirely contained - * within the keyfile or that might be serialized differently. The @handler_type and - * @handler_data arguments tell which kind of argument we have at hand. - * - * Currently only the handler_type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported, which provides - * @handler_data as %NMKeyfileHandlerDataWriteCert. However, this handler should be generic enough - * to support other types as well. - * - * This don't have to be only "properties". For example, nm_keyfile_read() uses - * a similar handler to push warnings to the caller. - * - * If the handler raises an error, it should set the @error value. This causes - * the an overall failure. - * - * Returns: whether the issue was handled. If the type was unhandled, - * a default action will be performed. This might be raise an error, - * do some fallback parsing, or do nothing. - */ -typedef gboolean (*NMKeyfileWriteHandler)(NMConnection * connection, - GKeyFile * keyfile, - NMKeyfileHandlerType handler_type, - NMKeyfileHandlerData *handler_data, - void * user_data); - -GKeyFile *nm_keyfile_write(NMConnection * connection, - NMKeyfileHandlerFlags handler_flags, - NMKeyfileWriteHandler handler, - void * user_data, - GError ** error); - -/*****************************************************************************/ - -/** * NMKeyfileHandlerDataWarn: * * this struct is passed as @handler_data for the @NMKeyfileReadHandler of - * handler_type %NM_KEYFILE_HANDLER_TYPE_WARN. + * type %NM_KEYFILE_HANDLER_TYPE_WARN. */ typedef struct { NMKeyfileWarnSeverity severity; @@ -132,7 +56,7 @@ typedef struct { * NMKeyfileHandlerDataWriteCert: * * this struct is passed as @handler_data for the @NMKeyfileWriteHandler of - * handler_type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT. + * type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT. */ typedef struct { const NMSetting8021xSchemeVtable *vtable; @@ -157,18 +81,6 @@ struct _NMKeyfileHandlerData { /*****************************************************************************/ -void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src); - -void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data, - const char ** out_kf_group_name, - const char ** out_kf_key_name, - NMSetting ** out_cur_setting, - const char ** out_cur_property_name); - -void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data, - const char ** out_message, - NMKeyfileWarnSeverity * out_severity); - const char *_nm_keyfile_handler_data_warn_get_message(const NMKeyfileHandlerData *handler_data); /*****************************************************************************/ diff --git a/libnm-core/nm-keyfile/nm-keyfile-utils.c b/libnm-core/nm-keyfile/nm-keyfile-utils.c index be12f8a83f..db2a2ea2d5 100644 --- a/libnm-core/nm-keyfile/nm-keyfile-utils.c +++ b/libnm-core/nm-keyfile/nm-keyfile-utils.c @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2010 Red Hat, Inc. */ @@ -11,11 +11,13 @@ #include "nm-glib-aux/nm-str-buf.h" -#include "nm-keyfile-internal.h" +#include "nm-keyfile.h" #include "nm-setting-wired.h" #include "nm-setting-wireless.h" #include "nm-setting-wireless-security.h" +#include "nm-keyfile-internal.h" + /*****************************************************************************/ /** diff --git a/libnm-core/nm-keyfile/nm-keyfile-utils.h b/libnm-core/nm-keyfile/nm-keyfile-utils.h index efad8317b0..9d18f5b54d 100644 --- a/libnm-core/nm-keyfile/nm-keyfile-utils.h +++ b/libnm-core/nm-keyfile/nm-keyfile-utils.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2010 - 2015 Red Hat, Inc. */ diff --git a/libnm-core/nm-keyfile/nm-keyfile.c b/libnm-core/nm-keyfile/nm-keyfile.c index 395af1db09..910fd0e603 100644 --- a/libnm-core/nm-keyfile/nm-keyfile.c +++ b/libnm-core/nm-keyfile/nm-keyfile.c @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2008 - 2009 Novell, Inc. * Copyright (C) 2008 - 2017 Red Hat, Inc. @@ -20,10 +20,17 @@ #include "nm-glib-aux/nm-secret-utils.h" #include "systemd/nm-sd-utils-shared.h" #include "nm-libnm-core-intern/nm-common-macros.h" + #include "nm-core-internal.h" +#include "nm-keyfile.h" +#include "nm-setting-user.h" +#include "nm-setting-ovs-external-ids.h" + #include "nm-keyfile-utils.h" -#include "nm-setting-user.h" +#define ETHERNET_S390_OPTIONS_GROUP_NAME "ethernet-s390-options" + +#define OVS_EXTERNAL_IDS_DATA_PREFIX "data." /*****************************************************************************/ @@ -988,6 +995,44 @@ ip_routing_rule_parser_full(KeyfileReaderInfo * info, } static void +_parser_full_ovs_external_ids_data(KeyfileReaderInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + const char * setting_name = NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME; + gs_strfreev char **keys = NULL; + gsize n_keys; + gsize i; + + nm_assert(NM_IS_SETTING_OVS_EXTERNAL_IDS(setting)); + nm_assert(nm_streq(property_info->name, NM_SETTING_OVS_EXTERNAL_IDS_DATA)); + nm_assert(nm_streq(setting_name, setting_info->setting_name)); + nm_assert(nm_streq(setting_name, nm_setting_get_name(setting))); + + keys = nm_keyfile_plugin_kf_get_keys(info->keyfile, setting_name, &n_keys, NULL); + + for (i = 0; i < n_keys; i++) { + const char * key = keys[i]; + gs_free char *name_to_free = NULL; + gs_free char *value = NULL; + const char * name; + + if (!NM_STR_HAS_PREFIX(key, OVS_EXTERNAL_IDS_DATA_PREFIX)) + continue; + + value = nm_keyfile_plugin_kf_get_string(info->keyfile, setting_name, key, NULL); + if (!value) + continue; + + name = &key[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)]; + name = nm_keyfile_key_decode(name, &name_to_free); + nm_setting_ovs_external_ids_set_data(NM_SETTING_OVS_EXTERNAL_IDS(setting), name, value); + } +} + +static void ip_dns_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) { int addr_family; @@ -1141,7 +1186,10 @@ mac_address_parser_INFINIBAND(KeyfileReaderInfo *info, NMSetting *setting, const } static void -read_hash_of_string(GKeyFile *file, NMSetting *setting, const char *key) +read_hash_of_string(KeyfileReaderInfo *info, + GKeyFile * file, + NMSetting * setting, + const char * kf_group) { gs_strfreev char **keys = NULL; const char *const *iter; @@ -1149,10 +1197,10 @@ read_hash_of_string(GKeyFile *file, NMSetting *setting, const char *key) gboolean is_vpn; gsize n_keys; - nm_assert((NM_IS_SETTING_VPN(setting) && nm_streq(key, NM_SETTING_VPN_DATA)) - || (NM_IS_SETTING_VPN(setting) && nm_streq(key, NM_SETTING_VPN_SECRETS)) - || (NM_IS_SETTING_BOND(setting) && nm_streq(key, NM_SETTING_BOND_OPTIONS)) - || (NM_IS_SETTING_USER(setting) && nm_streq(key, NM_SETTING_USER_DATA))); + nm_assert((NM_IS_SETTING_VPN(setting) && nm_streq(kf_group, NM_SETTING_VPN_DATA)) + || (NM_IS_SETTING_VPN(setting) && nm_streq(kf_group, NM_SETTING_VPN_SECRETS)) + || (NM_IS_SETTING_BOND(setting) && nm_streq(kf_group, NM_SETTING_BOND_OPTIONS)) + || (NM_IS_SETTING_USER(setting) && nm_streq(kf_group, NM_SETTING_USER_DATA))); keys = nm_keyfile_plugin_kf_get_keys(file, setting_name, &n_keys, NULL); if (n_keys == 0) @@ -1160,23 +1208,38 @@ read_hash_of_string(GKeyFile *file, NMSetting *setting, const char *key) if ((is_vpn = NM_IS_SETTING_VPN(setting)) || NM_IS_SETTING_BOND(setting)) { for (iter = (const char *const *) keys; *iter; iter++) { + const char * kf_key = *iter; gs_free char *to_free = NULL; gs_free char *value = NULL; const char * name; - value = nm_keyfile_plugin_kf_get_string(file, setting_name, *iter, NULL); + value = nm_keyfile_plugin_kf_get_string(file, setting_name, kf_key, NULL); if (!value) continue; - name = nm_keyfile_key_decode(*iter, &to_free); + name = nm_keyfile_key_decode(kf_key, &to_free); if (is_vpn) { /* Add any item that's not a class property to the data hash */ if (!g_object_class_find_property(G_OBJECT_GET_CLASS(setting), name)) nm_setting_vpn_add_data_item(NM_SETTING_VPN(setting), name, value); } else { - if (!nm_streq(name, "interface-name")) - nm_setting_bond_add_option(NM_SETTING_BOND(setting), name, value); + if (!nm_streq(name, "interface-name")) { + gs_free_error GError *error = NULL; + + if (!_nm_setting_bond_validate_option(name, value, &error)) { + if (!handle_warn(info, + kf_key, + name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid bond option %s%s%s = %s%s%s: %s"), + NM_PRINT_FMT_QUOTE_STRING(name), + NM_PRINT_FMT_QUOTE_STRING(value), + error->message)) + return; + } else + nm_setting_bond_add_option(NM_SETTING_BOND(setting), name, value); + } } } openconnect_fix_secret_flags(setting); @@ -2194,8 +2257,6 @@ bridge_vlan_writer(KeyfileWriterInfo *info, } } -#define ETHERNET_S390_OPTIONS_GROUP_NAME "ethernet-s390-options" - static void wired_s390_options_parser_full(KeyfileReaderInfo * info, const NMMetaSettingInfo * setting_info, @@ -2341,6 +2402,60 @@ tfilter_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, con } static void +_writer_full_ovs_external_ids_data(KeyfileWriterInfo * info, + const NMMetaSettingInfo * setting_info, + const NMSettInfoProperty *property_info, + const ParseInfoProperty * pip, + NMSetting * setting) +{ + GHashTable * hash; + NMUtilsNamedValue data_static[300u / sizeof(NMUtilsNamedValue)]; + gs_free NMUtilsNamedValue *data_free = NULL; + const NMUtilsNamedValue * data; + guint data_len; + char full_key_static[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX) + 300u]; + guint i; + + nm_assert(NM_IS_SETTING_OVS_EXTERNAL_IDS(setting)); + nm_assert(nm_streq(property_info->name, NM_SETTING_OVS_EXTERNAL_IDS_DATA)); + + hash = _nm_setting_ovs_external_ids_get_data(NM_SETTING_OVS_EXTERNAL_IDS(setting)); + if (!hash) + return; + + data = nm_utils_named_values_from_strdict(hash, &data_len, data_static, &data_free); + if (data_len == 0) + return; + + memcpy(full_key_static, OVS_EXTERNAL_IDS_DATA_PREFIX, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)); + + for (i = 0; i < data_len; i++) { + const char * key = data[i].name; + const char * val = data[i].value_str; + gs_free char *escaped_key_to_free = NULL; + const char * escaped_key; + gsize len; + gs_free char *full_key_free = NULL; + char * full_key = full_key_static; + + escaped_key = nm_keyfile_key_encode(key, &escaped_key_to_free); + + len = strlen(escaped_key) + 1u; + if (len >= G_N_ELEMENTS(full_key_static) - NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)) { + full_key_free = g_new(char, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX) + len); + full_key = full_key_free; + memcpy(full_key, OVS_EXTERNAL_IDS_DATA_PREFIX, NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)); + } + memcpy(&full_key[NM_STRLEN(OVS_EXTERNAL_IDS_DATA_PREFIX)], escaped_key, len); + + nm_keyfile_plugin_kf_set_string(info->keyfile, + NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + full_key, + val); + } +} + +static void write_hash_of_string(GKeyFile *file, NMSetting *setting, const char *key, const GValue *value) { GHashTable * hash; @@ -2779,6 +2894,14 @@ static const ParseInfoSetting *const parse_infos[_NM_META_SETTING_TYPE_NUM] = { .writer_full = ip_routing_rule_writer_full, .has_parser_full = TRUE, .has_writer_full = TRUE, ), ), ), + PARSE_INFO_SETTING( + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_OVS_EXTERNAL_IDS_DATA, + .parser_no_check_key = TRUE, + .parser_full = _parser_full_ovs_external_ids_data, + .writer_full = _writer_full_ovs_external_ids_data, + .has_parser_full = TRUE, + .has_writer_full = TRUE, ), ), ), PARSE_INFO_SETTING(NM_META_SETTING_TYPE_SERIAL, PARSE_INFO_PROPERTIES(PARSE_INFO_PROPERTY(NM_SETTING_SERIAL_PARITY, .parser = parity_parser, ), ), ), @@ -3170,7 +3293,7 @@ read_one_setting_value(KeyfileReaderInfo * info, NULL); g_object_set(setting, key, sa, NULL); } else if (type == G_TYPE_HASH_TABLE) { - read_hash_of_string(keyfile, setting, key); + read_hash_of_string(info, keyfile, setting, key); } else if (type == G_TYPE_ARRAY) { read_array_of_uint(keyfile, setting, key); } else if (G_TYPE_IS_FLAGS(type)) { @@ -3582,14 +3705,16 @@ nm_keyfile_read_ensure_uuid(NMConnection *connection, const char *fallback_uuid_ * the relative path is made absolute using @base_dir. This must * be an absolute path. * @handler_flags: the #NMKeyfileHandlerFlags. - * @handler: read handler + * @handler: (allow-none) (scope call): read handler * @user_data: user data for read handler - * @error: error + * @error: (allow-none) (out): error * * Tries to create a NMConnection from a keyfile. The resulting keyfile is * not normalized and might not even verify. * * Returns: (transfer full): on success, returns the created connection. + * + * Since: 1.30 */ NMConnection * nm_keyfile_read(GKeyFile * keyfile, @@ -3928,6 +4053,22 @@ _write_setting_wireguard(NMSetting *setting, KeyfileWriterInfo *info) } } +/** + * nm_keyfile_write: + * @connection: the #NMConnection to persist to keyfile. + * @handler_flags: the #NMKeyfileHandlerFlags. + * @handler: (allow-none) (scope call): optional handler for events and + * to override the default behavior. + * @user_data: argument for @handler. + * @error: the #GError in case writing fails. + * + * @connection must verify as a valid profile according to + * nm_connection_verify(). + * + * Returns: (transfer full): a new #GKeyFile or %NULL on error. + * + * Since: 1.30 + */ GKeyFile * nm_keyfile_write(NMConnection * connection, NMKeyfileHandlerFlags handler_flags, @@ -3936,16 +4077,38 @@ nm_keyfile_write(NMConnection * connection, GError ** error) { nm_auto_unref_keyfile GKeyFile *keyfile = NULL; + GError * local = NULL; KeyfileWriterInfo info; - gs_free NMSetting **settings = NULL; - guint i, j, n_settings = 0; + gs_free NMSetting **settings = NULL; + guint n_settings = 0; + guint i; + guint j; g_return_val_if_fail(NM_IS_CONNECTION(connection), NULL); g_return_val_if_fail(!error || !*error, NULL); g_return_val_if_fail(handler_flags == NM_KEYFILE_HANDLER_FLAGS_NONE, NULL); - if (!nm_connection_verify(connection, error)) + /* Technically, we might not require that a profile is valid in + * order to serialize it. Like also nm_keyfile_read() does not + * ensure that the read profile validates. + * + * However, if the profile does not validate, then there might be + * unexpected edge cases when we try to serialize it. Edge cases + * that might result in dangerous crash. + * + * So, for now we require valid profiles. */ + if (!nm_connection_verify(connection, error ? &local : NULL)) { + if (error) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_FAILED, + _("the profile is not valid: %s"), + local->message); + g_error_free(local); + } else + nm_assert(!local); return NULL; + } keyfile = g_key_file_new(); @@ -4193,6 +4356,8 @@ nm_keyfile_utils_create_filename(const char *name, gboolean with_extension) * Note that @src is no longer valid after this call. If you want * to keep using the same GError*, you need to set it to %NULL * after calling this function on it. + * + * Since: 1.30 */ void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src) @@ -4217,6 +4382,8 @@ nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GErr * * Get context information of the current event. This function can be called * on all events, but the context information may be unset. + * + * Since: 1.30 */ void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data, @@ -4258,6 +4425,8 @@ _nm_keyfile_handler_data_warn_get_message(const NMKeyfileHandlerData *handler_da * event. * @out_message: (out) (allow-none) (transfer none): the warning message. * @out_severity: (out) (allow-none): the #NMKeyfileWarnSeverity warning severity. + * + * Since: 1.30 */ void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data, diff --git a/libnm-core/nm-libnm-core-aux/nm-dispatcher-api.h b/libnm-core/nm-libnm-core-aux/nm-dispatcher-api.h index 80546a83d2..3f8f6516cc 100644 --- a/libnm-core/nm-libnm-core-aux/nm-dispatcher-api.h +++ b/libnm-core/nm-libnm-core-aux/nm-dispatcher-api.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2008 - 2012 Red Hat, Inc. */ diff --git a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c index 65cd8ba5d7..1d24d8fee8 100644 --- a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c +++ b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c @@ -36,18 +36,19 @@ _nm_setting_bond_remove_options_arp_interval(NMSettingBond *s_bond) nm_setting_bond_remove_option(s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET); } +/*****************************************************************************/ + NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( _nm_setting_bond_mode_from_string, NMBondMode, - { g_return_val_if_fail(name, NM_BOND_MODE_UNKNOWN); }, + { + G_STATIC_ASSERT_EXPR(_NM_BOND_MODE_NUM <= 9); + + if (name && name[0] < '0' + _NM_BOND_MODE_NUM && name[0] >= '0' && name[1] == '\0') { + return name[0] - '0'; + } + }, { return NM_BOND_MODE_UNKNOWN; }, - {"0", NM_BOND_MODE_ROUNDROBIN}, - {"1", NM_BOND_MODE_ACTIVEBACKUP}, - {"2", NM_BOND_MODE_XOR}, - {"3", NM_BOND_MODE_BROADCAST}, - {"4", NM_BOND_MODE_8023AD}, - {"5", NM_BOND_MODE_TLB}, - {"6", NM_BOND_MODE_ALB}, {"802.3ad", NM_BOND_MODE_8023AD}, {"active-backup", NM_BOND_MODE_ACTIVEBACKUP}, {"balance-alb", NM_BOND_MODE_ALB}, @@ -56,6 +57,47 @@ NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"balance-xor", NM_BOND_MODE_XOR}, {"broadcast", NM_BOND_MODE_BROADCAST}, ); +const char * +_nm_setting_bond_mode_to_string(int mode) +{ + static const char *const modes[] = { + [NM_BOND_MODE_8023AD] = "802.3ad", + [NM_BOND_MODE_ACTIVEBACKUP] = "active-backup", + [NM_BOND_MODE_ALB] = "balance-alb", + [NM_BOND_MODE_BROADCAST] = "broadcast", + [NM_BOND_MODE_ROUNDROBIN] = "balance-rr", + [NM_BOND_MODE_TLB] = "balance-tlb", + [NM_BOND_MODE_XOR] = "balance-xor", + }; + + G_STATIC_ASSERT(G_N_ELEMENTS(modes) == _NM_BOND_MODE_NUM); + + if (NM_MORE_ASSERT_ONCE(5)) { + char sbuf[100]; + int i; + NMBondMode m; + + for (i = 0; i < (int) G_N_ELEMENTS(modes); i++) { + nm_assert(modes[i]); + nm_assert(i == _nm_setting_bond_mode_from_string(modes[i])); + nm_assert(i == _nm_setting_bond_mode_from_string(nm_sprintf_buf(sbuf, "%d", i))); + } + nm_assert(NM_BOND_MODE_UNKNOWN == _nm_setting_bond_mode_from_string(NULL)); + nm_assert(NM_BOND_MODE_UNKNOWN == _nm_setting_bond_mode_from_string("")); + for (i = -2; i < ((int) G_N_ELEMENTS(modes)) + 20; i++) { + if (i < 0 || i >= G_N_ELEMENTS(modes)) + m = NM_BOND_MODE_UNKNOWN; + else + m = i; + nm_assert(m == _nm_setting_bond_mode_from_string(nm_sprintf_buf(sbuf, "%d", i))); + } + } + + if (mode >= 0 && mode < (int) G_N_ELEMENTS(modes)) + return modes[mode]; + return NULL; +} + /*****************************************************************************/ gboolean diff --git a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h index 5d672fedb3..ac7b3cc8e8 100644 --- a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h +++ b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h @@ -65,11 +65,16 @@ typedef enum { NM_BOND_MODE_8023AD = 4, NM_BOND_MODE_TLB = 5, NM_BOND_MODE_ALB = 6, + _NM_BOND_MODE_NUM, } NMBondMode; NMBondMode _nm_setting_bond_mode_from_string(const char *str); +const char *_nm_setting_bond_mode_to_string(int mode); + +gboolean _nm_setting_bond_validate_option(const char *name, const char *value, GError **error); + /*****************************************************************************/ static inline guint32 @@ -93,6 +98,11 @@ gboolean nm_utils_vlan_priority_map_parse_str(NMVlanPriorityMap map_type, /*****************************************************************************/ +#define NM_OVS_EXTERNAL_ID_NM_PREFIX "NM." +#define NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID "NM.connection.uuid" + +/*****************************************************************************/ + static inline int nm_setting_ip_config_get_addr_family(NMSettingIPConfig *s_ip) { diff --git a/libnm-core/nm-setting-6lowpan.c b/libnm-core/nm-setting-6lowpan.c index 630c312665..ed7238cdac 100644 --- a/libnm-core/nm-setting-6lowpan.c +++ b/libnm-core/nm-setting-6lowpan.c @@ -179,7 +179,7 @@ nm_setting_6lowpan_init(NMSetting6Lowpan *setting) NMSetting * nm_setting_6lowpan_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_6LOWPAN, NULL); + return g_object_new(NM_TYPE_SETTING_6LOWPAN, NULL); } static void diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c index d3dc251a14..a4a203231e 100644 --- a/libnm-core/nm-setting-8021x.c +++ b/libnm-core/nm-setting-8021x.c @@ -3498,7 +3498,7 @@ nm_setting_802_1x_init(NMSetting8021x *setting) NMSetting * nm_setting_802_1x_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_802_1X, NULL); + return g_object_new(NM_TYPE_SETTING_802_1X, NULL); } static void diff --git a/libnm-core/nm-setting-adsl.c b/libnm-core/nm-setting-adsl.c index f84baf1f87..023375b104 100644 --- a/libnm-core/nm-setting-adsl.c +++ b/libnm-core/nm-setting-adsl.c @@ -316,7 +316,7 @@ nm_setting_adsl_init(NMSettingAdsl *setting) NMSetting * nm_setting_adsl_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_ADSL, NULL); + return g_object_new(NM_TYPE_SETTING_ADSL, NULL); } static void diff --git a/libnm-core/nm-setting-bluetooth.c b/libnm-core/nm-setting-bluetooth.c index f836cea954..d825ac2a87 100644 --- a/libnm-core/nm-setting-bluetooth.c +++ b/libnm-core/nm-setting-bluetooth.c @@ -266,7 +266,7 @@ nm_setting_bluetooth_init(NMSettingBluetooth *setting) NMSetting * nm_setting_bluetooth_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_BLUETOOTH, NULL); + return g_object_new(NM_TYPE_SETTING_BLUETOOTH, NULL); } static void diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c index 1428ab6383..0cb38342a6 100644 --- a/libnm-core/nm-setting-bond.c +++ b/libnm-core/nm-setting-bond.c @@ -224,9 +224,10 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE, ~(BIT(NM_BOND_MODE_ROUNDROBIN))}, {NM_SETTING_BOND_OPTION_PRIMARY, ~(BIT(NM_BOND_MODE_ACTIVEBACKUP) | BIT(NM_BOND_MODE_TLB) | BIT(NM_BOND_MODE_ALB))}, - {NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB, ~(BIT(NM_BOND_MODE_TLB))}, ) + {NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB, ~(BIT(NM_BOND_MODE_TLB))}, ); - gboolean _nm_setting_bond_option_supported(const char *option, NMBondMode mode) +gboolean +_nm_setting_bond_option_supported(const char *option, NMBondMode mode) { nm_assert(option); nm_assert(mode != NM_BOND_MODE_UNKNOWN); @@ -514,8 +515,8 @@ validate_ifname(const char *name, const char *value) return nm_utils_ifname_valid_kernel(value, NULL); } -static gboolean -_setting_bond_validate_option(const char *name, const char *value, GError **error) +gboolean +_nm_setting_bond_validate_option(const char *name, const char *value, GError **error) { const OptionMeta *option_meta; gboolean success; @@ -588,7 +589,7 @@ handle_error: gboolean nm_setting_bond_validate_option(const char *name, const char *value) { - return _setting_bond_validate_option(name, value, NULL); + return _nm_setting_bond_validate_option(name, value, NULL); } /** @@ -607,9 +608,6 @@ nm_setting_bond_get_option_by_name(NMSettingBond *setting, const char *name) { g_return_val_if_fail(NM_IS_SETTING_BOND(setting), NULL); - if (!nm_setting_bond_validate_option(name, NULL)) - return NULL; - return _bond_get_option(setting, name); } @@ -619,16 +617,18 @@ nm_setting_bond_get_option_by_name(NMSettingBond *setting, const char *name) * @name: name for the option * @value: value for the option * - * Add an option to the table. The option is compared to an internal list - * of allowed options. Option names may contain only alphanumeric characters - * (ie [a-zA-Z0-9]). Adding a new name replaces any existing name/value pair + * Add an option to the table. Adding a new name replaces any existing name/value pair * that may already exist. * - * The order of how to set several options is relevant because there are options - * that conflict with each other. + * Returns: returns %FALSE if either @name or @value is %NULL, in that case + * the option is not set. Otherwise, the function does not fail and does not validate + * the arguments. All validation happens via nm_connection_verify() or do basic validation + * yourself with nm_setting_bond_validate_option(). * - * Returns: %TRUE if the option was valid and was added to the internal option - * list, %FALSE if it was not. + * Note: Before 1.30, libnm would perform basic validation of the name and the value + * via nm_setting_bond_validate_option() and reject the request by returning FALSE. + * Since 1.30, libnm no longer rejects any values as the setter is not supposed + * to perform validation. **/ gboolean nm_setting_bond_add_option(NMSettingBond *setting, const char *name, const char *value) @@ -637,16 +637,16 @@ nm_setting_bond_add_option(NMSettingBond *setting, const char *name, const char g_return_val_if_fail(NM_IS_SETTING_BOND(setting), FALSE); - if (!value || !nm_setting_bond_validate_option(name, value)) + if (!name) + return FALSE; + if (!value) return FALSE; priv = NM_SETTING_BOND_GET_PRIVATE(setting); nm_clear_g_free(&priv->options_idx_cache); g_hash_table_insert(priv->options, g_strdup(name), g_strdup(value)); - _notify(setting, PROP_OPTIONS); - return TRUE; } @@ -665,20 +665,17 @@ gboolean nm_setting_bond_remove_option(NMSettingBond *setting, const char *name) { NMSettingBondPrivate *priv; - gboolean found; g_return_val_if_fail(NM_IS_SETTING_BOND(setting), FALSE); - if (!nm_setting_bond_validate_option(name, NULL)) - return FALSE; - priv = NM_SETTING_BOND_GET_PRIVATE(setting); + if (!g_hash_table_remove(priv->options, name)) + return FALSE; + nm_clear_g_free(&priv->options_idx_cache); - found = g_hash_table_remove(priv->options, name); - if (found) - _notify(setting, PROP_OPTIONS); - return found; + _notify(setting, PROP_OPTIONS); + return TRUE; } /** @@ -782,7 +779,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) for (i = 0; priv->options_idx_cache[i].name; i++) { n = &priv->options_idx_cache[i]; - if (!n->value_str || !_setting_bond_validate_option(n->name, n->value_str, error)) { + if (!n->value_str || !_nm_setting_bond_validate_option(n->name, n->value_str, error)) { g_prefix_error(error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, @@ -1112,7 +1109,7 @@ nm_setting_bond_init(NMSettingBond *setting) NMSetting * nm_setting_bond_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_BOND, NULL); + return g_object_new(NM_TYPE_SETTING_BOND, NULL); } static void diff --git a/libnm-core/nm-setting-bridge-port.c b/libnm-core/nm-setting-bridge-port.c index 1d9b6538c5..0b253996d2 100644 --- a/libnm-core/nm-setting-bridge-port.c +++ b/libnm-core/nm-setting-bridge-port.c @@ -452,7 +452,7 @@ nm_setting_bridge_port_init(NMSettingBridgePort *setting) NMSetting * nm_setting_bridge_port_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_BRIDGE_PORT, NULL); + return g_object_new(NM_TYPE_SETTING_BRIDGE_PORT, NULL); } static void diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c index 7356d568c5..ec5e54ee2d 100644 --- a/libnm-core/nm-setting-bridge.c +++ b/libnm-core/nm-setting-bridge.c @@ -1578,7 +1578,7 @@ nm_setting_bridge_init(NMSettingBridge *setting) NMSetting * nm_setting_bridge_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_BRIDGE, NULL); + return g_object_new(NM_TYPE_SETTING_BRIDGE, NULL); } static void diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c index d2103b6240..c1dfcc1076 100644 --- a/libnm-core/nm-setting-cdma.c +++ b/libnm-core/nm-setting-cdma.c @@ -251,7 +251,7 @@ nm_setting_cdma_init(NMSettingCdma *setting) NMSetting * nm_setting_cdma_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_CDMA, NULL); + return g_object_new(NM_TYPE_SETTING_CDMA, NULL); } static void diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c index a21e2c25cf..f82309279f 100644 --- a/libnm-core/nm-setting-connection.c +++ b/libnm-core/nm-setting-connection.c @@ -1750,7 +1750,7 @@ nm_setting_connection_init(NMSettingConnection *setting) NMSetting * nm_setting_connection_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_CONNECTION, NULL); + return g_object_new(NM_TYPE_SETTING_CONNECTION, NULL); } static void diff --git a/libnm-core/nm-setting-dcb.c b/libnm-core/nm-setting-dcb.c index 1b07af3909..ec347eff8a 100644 --- a/libnm-core/nm-setting-dcb.c +++ b/libnm-core/nm-setting-dcb.c @@ -893,7 +893,7 @@ nm_setting_dcb_init(NMSettingDcb *self) NMSetting * nm_setting_dcb_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_DCB, NULL); + return g_object_new(NM_TYPE_SETTING_DCB, NULL); } static void diff --git a/libnm-core/nm-setting-dummy.c b/libnm-core/nm-setting-dummy.c index 3f5922f628..04cb59593c 100644 --- a/libnm-core/nm-setting-dummy.c +++ b/libnm-core/nm-setting-dummy.c @@ -52,7 +52,7 @@ nm_setting_dummy_init(NMSettingDummy *setting) NMSetting * nm_setting_dummy_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_DUMMY, NULL); + return g_object_new(NM_TYPE_SETTING_DUMMY, NULL); } static void diff --git a/libnm-core/nm-setting-generic.c b/libnm-core/nm-setting-generic.c index 50269a19d1..cb59d7f987 100644 --- a/libnm-core/nm-setting-generic.c +++ b/libnm-core/nm-setting-generic.c @@ -48,7 +48,7 @@ nm_setting_generic_init(NMSettingGeneric *setting) NMSetting * nm_setting_generic_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_GENERIC, NULL); + return g_object_new(NM_TYPE_SETTING_GENERIC, NULL); } static void diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c index 1c31217cdf..38d13d3eab 100644 --- a/libnm-core/nm-setting-gsm.c +++ b/libnm-core/nm-setting-gsm.c @@ -604,7 +604,7 @@ nm_setting_gsm_init(NMSettingGsm *setting) NMSetting * nm_setting_gsm_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_GSM, NULL); + return g_object_new(NM_TYPE_SETTING_GSM, NULL); } static void diff --git a/libnm-core/nm-setting-hostname.c b/libnm-core/nm-setting-hostname.c new file mode 100644 index 0000000000..8218978705 --- /dev/null +++ b/libnm-core/nm-setting-hostname.c @@ -0,0 +1,339 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-setting-hostname.h" + +#include "nm-setting-private.h" +#include "nm-utils-private.h" + +/** + * SECTION:nm-setting-hostname + * @short_description: Contains properties related to the hostname + * @include: nm-setting-hostname.h + **/ + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE(NMSettingHostname, + PROP_PRIORITY, + PROP_FROM_DHCP, + PROP_FROM_DNS_LOOKUP, + PROP_ONLY_FROM_DEFAULT, ); + +/** + * NMSettingHostname: + * + * Hostname settings + * + * Since: 1.30 + */ +struct _NMSettingHostname { + NMSetting parent; + int priority; + NMTernary from_dhcp; + NMTernary from_dns_lookup; + NMTernary only_from_default; +}; + +struct _NMSettingHostnameClass { + NMSettingClass parent; +}; + +G_DEFINE_TYPE(NMSettingHostname, nm_setting_hostname, NM_TYPE_SETTING) + +/** + * nm_setting_hostname_get_priority: + * @setting: the #NMSettingHostname + * + * Returns the value contained in the #NMSettingHostname:priority + * property. + * + * Returns: the 'priority' property value + * + * Since: 1.30 + **/ +int +nm_setting_hostname_get_priority(NMSettingHostname *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), 0); + + return setting->priority; +} + +/** + * nm_setting_hostname_get_from_dhcp: + * @setting: the #NMSettingHostname + * + * Returns the value contained in the #NMSettingHostname:from-dhcp + * property. + * + * Returns: the 'from-dhcp' property value + * + * Since: 1.30 + **/ +NMTernary +nm_setting_hostname_get_from_dhcp(NMSettingHostname *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); + + return setting->from_dhcp; +} + +/** + * nm_setting_hostname_get_from_dns_lookup: + * @setting: the #NMSettingHostname + * + * Returns the value contained in the #NMSettingHostname:from-dns-lookup + * property. + * + * Returns: the 'from-dns-lookup' property value + * + * Since: 1.30 + **/ +NMTernary +nm_setting_hostname_get_from_dns_lookup(NMSettingHostname *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); + + return setting->from_dns_lookup; +} + +/** + * nm_setting_hostname_get_only_from_default: + * @setting: the #NMSettingHostname + * + * Returns the value contained in the #NMSettingHostname:only-from-default + * property. + * + * Returns: the 'only-from-default' property value + * + * Since: 1.30 + **/ +NMTernary +nm_setting_hostname_get_only_from_default(NMSettingHostname *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); + + return setting->only_from_default; +} + +/*****************************************************************************/ + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMSettingHostname *self = NM_SETTING_HOSTNAME(object); + + switch (prop_id) { + case PROP_PRIORITY: + g_value_set_int(value, self->priority); + break; + case PROP_FROM_DHCP: + g_value_set_enum(value, self->from_dhcp); + break; + case PROP_FROM_DNS_LOOKUP: + g_value_set_enum(value, self->from_dns_lookup); + break; + case PROP_ONLY_FROM_DEFAULT: + g_value_set_enum(value, self->only_from_default); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + NMSettingHostname *self = NM_SETTING_HOSTNAME(object); + + switch (prop_id) { + case PROP_PRIORITY: + self->priority = g_value_get_int(value); + break; + case PROP_FROM_DHCP: + self->from_dhcp = g_value_get_enum(value); + break; + case PROP_FROM_DNS_LOOKUP: + self->from_dns_lookup = g_value_get_enum(value); + break; + case PROP_ONLY_FROM_DEFAULT: + self->only_from_default = g_value_get_enum(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +/*****************************************************************************/ + +static void +nm_setting_hostname_init(NMSettingHostname *setting) +{ + setting->from_dhcp = NM_TERNARY_DEFAULT; + setting->from_dns_lookup = NM_TERNARY_DEFAULT; + setting->only_from_default = NM_TERNARY_DEFAULT; +} + +/** + * nm_setting_hostname_new: + * + * Creates a new #NMSettingHostname object with default values. + * + * Returns: (transfer full): the new empty #NMSettingHostname object + * + * Since: 1.30 + **/ +NMSetting * +nm_setting_hostname_new(void) +{ + return g_object_new(NM_TYPE_SETTING_HOSTNAME, NULL); +} + +static void +nm_setting_hostname_class_init(NMSettingHostnameClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + + object_class->get_property = get_property; + object_class->set_property = set_property; + + /** + * NMSettingHostname:priority + * + * 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. + * + * Since: 1.30 + **/ + /* ---ifcfg-rh--- + * property: priority + * variable: HOSTNAME_PRIORITY(+) + * default: missing variable means global value or 100 + * description: hostname priority + * example: HOSTNAME_PRIORITY=50 + * ---end--- + */ + obj_properties[PROP_PRIORITY] = g_param_spec_int(NM_SETTING_HOSTNAME_PRIORITY, + "", + "", + G_MININT32, + G_MAXINT32, + 0, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingHostname:from-dhcp + * + * Whether the system hostname can be determined from DHCP on + * this connection. + * + * When set to %NM_TERNARY_DEFAULT, 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. + * + * Since: 1.30 + **/ + /* ---ifcfg-rh--- + * property: from-dhcp + * variable: HOSTNAME_FROM_DHCP(+) + * default: missing variable means global default or 1 + * description: whether the system hostname can be determined from DHCP + * example: HOSTNAME_FROM_DHCP=0,1 + * ---end--- + */ + obj_properties[PROP_FROM_DHCP] = g_param_spec_enum( + NM_SETTING_HOSTNAME_FROM_DHCP, + "", + "", + NM_TYPE_TERNARY, + NM_TERNARY_DEFAULT, + NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingHostname:from-dns-lookup + * + * Whether the system hostname can be determined from reverse + * DNS lookup of addresses on this device. + * + * When set to %NM_TERNARY_DEFAULT, 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. + * + * Since: 1.30 + **/ + /* ---ifcfg-rh--- + * property: from-dhcp + * variable: HOSTNAME_FROM_DNS_LOOKUP(+) + * default: missing variable means global default or 1 + * description: whether the system hostname can be determined from reverse + * DNS lookup + * example: HOSTNAME_FROM_DNS_LOOKUP=0,1 + * ---end--- + */ + obj_properties[PROP_FROM_DNS_LOOKUP] = g_param_spec_enum( + NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, + "", + "", + NM_TYPE_TERNARY, + NM_TERNARY_DEFAULT, + NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingHostname:only-from-default + * + * If set to %NM_TERNARY_TRUE, 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, the hostname can be set from this + * device even if it doesn't have the default route. + * + * When set to %NM_TERNARY_DEFAULT, 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. + * + * Since: 1.30 + **/ + /* ---ifcfg-rh--- + * property: only-best-device + * variable: HOSTNAME_ONLY_FROM_DEFAULT(+) + * default: missing variable means global default or 1 + * description: whether the hostname can be determined only from + * devices with the default route + * example: HOSTNAME_ONLY_FROM_DEFAULT=0,1 + * ---end--- + */ + obj_properties[PROP_ONLY_FROM_DEFAULT] = g_param_spec_enum( + NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT, + "", + "", + NM_TYPE_TERNARY, + NM_TERNARY_DEFAULT, + NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_HOSTNAME); +} diff --git a/libnm-core/nm-setting-hostname.h b/libnm-core/nm-setting-hostname.h new file mode 100644 index 0000000000..184d76c483 --- /dev/null +++ b/libnm-core/nm-setting-hostname.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#ifndef NM_SETTING_HOSTNAME_H +#define NM_SETTING_HOSTNAME_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_HOSTNAME (nm_setting_hostname_get_type()) +#define NM_SETTING_HOSTNAME(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_HOSTNAME, NMSettingHostname)) +#define NM_SETTING_HOSTNAME_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTING_HOSTNAME, NMSettingHostnameClass)) +#define NM_IS_SETTING_HOSTNAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_HOSTNAME)) +#define NM_IS_SETTING_HOSTNAME_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_HOSTNAME)) +#define NM_SETTING_HOSTNAME_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_HOSTNAME, NMSettingHostnameClass)) + +#define NM_SETTING_HOSTNAME_SETTING_NAME "hostname" + +#define NM_SETTING_HOSTNAME_PRIORITY "priority" +#define NM_SETTING_HOSTNAME_FROM_DHCP "from-dhcp" +#define NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP "from-dns-lookup" +#define NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT "only-from-default" + +typedef struct _NMSettingHostnameClass NMSettingHostnameClass; + +NM_AVAILABLE_IN_1_30 +GType nm_setting_hostname_get_type(void); +NM_AVAILABLE_IN_1_30 +NMSetting *nm_setting_hostname_new(void); + +NM_AVAILABLE_IN_1_30 +int nm_setting_hostname_get_priority(NMSettingHostname *setting); +NM_AVAILABLE_IN_1_30 +NMTernary nm_setting_hostname_get_from_dhcp(NMSettingHostname *setting); +NM_AVAILABLE_IN_1_30 +NMTernary nm_setting_hostname_get_from_dns_lookup(NMSettingHostname *setting); +NM_AVAILABLE_IN_1_30 +NMTernary nm_setting_hostname_get_only_from_default(NMSettingHostname *setting); + +G_END_DECLS + +#endif /* NM_SETTING_HOSTNAME_H */ diff --git a/libnm-core/nm-setting-infiniband.c b/libnm-core/nm-setting-infiniband.c index 7469f43785..02a92cad13 100644 --- a/libnm-core/nm-setting-infiniband.c +++ b/libnm-core/nm-setting-infiniband.c @@ -353,7 +353,7 @@ nm_setting_infiniband_init(NMSettingInfiniband *self) NMSetting * nm_setting_infiniband_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_INFINIBAND, NULL); + return g_object_new(NM_TYPE_SETTING_INFINIBAND, NULL); } static void diff --git a/libnm-core/nm-setting-ip-tunnel.c b/libnm-core/nm-setting-ip-tunnel.c index e2f0b0cac0..e0eb25a373 100644 --- a/libnm-core/nm-setting-ip-tunnel.c +++ b/libnm-core/nm-setting-ip-tunnel.c @@ -617,7 +617,7 @@ nm_setting_ip_tunnel_init(NMSettingIPTunnel *self) NMSetting * nm_setting_ip_tunnel_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_IP_TUNNEL, NULL); + return g_object_new(NM_TYPE_SETTING_IP_TUNNEL, NULL); } static void diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c index 46579ba9da..53d8765b6f 100644 --- a/libnm-core/nm-setting-ip4-config.c +++ b/libnm-core/nm-setting-ip4-config.c @@ -594,7 +594,7 @@ nm_setting_ip4_config_init(NMSettingIP4Config *setting) NMSetting * nm_setting_ip4_config_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_IP4_CONFIG, NULL); + return g_object_new(NM_TYPE_SETTING_IP4_CONFIG, NULL); } static void diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c index c22e35883e..a5f5c721db 100644 --- a/libnm-core/nm-setting-ip6-config.c +++ b/libnm-core/nm-setting-ip6-config.c @@ -592,7 +592,7 @@ nm_setting_ip6_config_init(NMSettingIP6Config *setting) NMSetting * nm_setting_ip6_config_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_IP6_CONFIG, NULL); + return g_object_new(NM_TYPE_SETTING_IP6_CONFIG, NULL); } static void diff --git a/libnm-core/nm-setting-macsec.c b/libnm-core/nm-setting-macsec.c index 6f185a9aa5..3e825c3a86 100644 --- a/libnm-core/nm-setting-macsec.c +++ b/libnm-core/nm-setting-macsec.c @@ -495,7 +495,7 @@ nm_setting_macsec_init(NMSettingMacsec *self) NMSetting * nm_setting_macsec_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_MACSEC, NULL); + return g_object_new(NM_TYPE_SETTING_MACSEC, NULL); } static void diff --git a/libnm-core/nm-setting-macvlan.c b/libnm-core/nm-setting-macvlan.c index eed137c396..5f8cb875b2 100644 --- a/libnm-core/nm-setting-macvlan.c +++ b/libnm-core/nm-setting-macvlan.c @@ -236,7 +236,7 @@ nm_setting_macvlan_init(NMSettingMacvlan *self) NMSetting * nm_setting_macvlan_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_MACVLAN, NULL); + return g_object_new(NM_TYPE_SETTING_MACVLAN, NULL); } static void diff --git a/libnm-core/nm-setting-match.c b/libnm-core/nm-setting-match.c index 5709a403d8..598379ff05 100644 --- a/libnm-core/nm-setting-match.c +++ b/libnm-core/nm-setting-match.c @@ -683,7 +683,7 @@ nm_setting_match_init(NMSettingMatch *setting) NMSetting * nm_setting_match_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_MATCH, NULL); + return g_object_new(NM_TYPE_SETTING_MATCH, NULL); } static gboolean diff --git a/libnm-core/nm-setting-olpc-mesh.c b/libnm-core/nm-setting-olpc-mesh.c index e9efbe1ece..a39cbd1533 100644 --- a/libnm-core/nm-setting-olpc-mesh.c +++ b/libnm-core/nm-setting-olpc-mesh.c @@ -190,7 +190,7 @@ nm_setting_olpc_mesh_init(NMSettingOlpcMesh *setting) NMSetting * nm_setting_olpc_mesh_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OLPC_MESH, NULL); + return g_object_new(NM_TYPE_SETTING_OLPC_MESH, NULL); } static void diff --git a/libnm-core/nm-setting-ovs-bridge.c b/libnm-core/nm-setting-ovs-bridge.c index 15eed0300f..6c3c931706 100644 --- a/libnm-core/nm-setting-ovs-bridge.c +++ b/libnm-core/nm-setting-ovs-bridge.c @@ -272,7 +272,7 @@ nm_setting_ovs_bridge_init(NMSettingOvsBridge *self) NMSetting * nm_setting_ovs_bridge_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OVS_BRIDGE, NULL); + return g_object_new(NM_TYPE_SETTING_OVS_BRIDGE, NULL); } static void diff --git a/libnm-core/nm-setting-ovs-dpdk.c b/libnm-core/nm-setting-ovs-dpdk.c index d6bd88042b..6498cead40 100644 --- a/libnm-core/nm-setting-ovs-dpdk.c +++ b/libnm-core/nm-setting-ovs-dpdk.c @@ -109,7 +109,7 @@ nm_setting_ovs_dpdk_init(NMSettingOvsDpdk *self) NMSetting * nm_setting_ovs_dpdk_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OVS_DPDK, NULL); + return g_object_new(NM_TYPE_SETTING_OVS_DPDK, NULL); } static void diff --git a/libnm-core/nm-setting-ovs-external-ids.c b/libnm-core/nm-setting-ovs-external-ids.c new file mode 100644 index 0000000000..9371c281b5 --- /dev/null +++ b/libnm-core/nm-setting-ovs-external-ids.c @@ -0,0 +1,536 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2017 - 2020 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-setting-ovs-external-ids.h" + +#include "nm-setting-private.h" +#include "nm-utils-private.h" +#include "nm-connection-private.h" + +#define MAX_NUM_KEYS 256 + +/*****************************************************************************/ + +/** + * SECTION:nm-setting-ovs-external-ids + * @short_description: External-IDs for OVS database + * + * The #NMSettingOvsExternalIDs object is a #NMSetting subclass that allow to + * configure external ids for OVS. + **/ + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE(NMSettingOvsExternalIDs, PROP_DATA, ); + +typedef struct { + GHashTable * data; + const char **data_keys; +} NMSettingOvsExternalIDsPrivate; + +/** + * NMSettingOvsExternalIDs: + * + * OVS External IDs Settings + */ +struct _NMSettingOvsExternalIDs { + NMSetting parent; + NMSettingOvsExternalIDsPrivate _priv; +}; + +struct _NMSettingOvsExternalIDsClass { + NMSettingClass parent; +}; + +G_DEFINE_TYPE(NMSettingOvsExternalIDs, nm_setting_ovs_external_ids, NM_TYPE_SETTING) + +#define NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMSettingOvsExternalIDs, NM_IS_SETTING_OVS_EXTERNAL_IDS) + +/*****************************************************************************/ + +static gboolean +_exid_key_char_is_regular(char ch) +{ + /* allow words of printable characters, plus some + * special characters, for example to support base64 encoding. */ + return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') + || NM_IN_SET(ch, '-', '_', '+', '/', '=', '.'); +} + +/** + * nm_setting_ovs_external_ids_check_key: + * @key: (allow-none): the key to check + * @error: a #GError, %NULL to ignore. + * + * Checks whether @key is a valid key for OVS' external-ids. + * This means, the key cannot be %NULL, not too large and valid ASCII. + * Also, only digits and numbers are allowed with a few special + * characters. They key must also not start with "NM.". + * + * Since: 1.30 + * + * Returns: %TRUE if @key is a valid user data key. + */ +gboolean +nm_setting_ovs_external_ids_check_key(const char *key, GError **error) +{ + gsize len; + + g_return_val_if_fail(!error || !*error, FALSE); + + if (!key || !key[0]) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("missing key")); + return FALSE; + } + len = strlen(key); + if (len > 255u) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("key is too long")); + return FALSE; + } + if (!g_utf8_validate(key, len, NULL)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("key must be UTF8")); + return FALSE; + } + if (!NM_STRCHAR_ALL(key, ch, _exid_key_char_is_regular(ch))) { + /* Probably OVS is more forgiving about what makes a valid key for + * an external-id. However, we are strict (at least, for now). */ + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("key contains invalid characters")); + return FALSE; + } + + if (NM_STR_HAS_PREFIX(key, NM_OVS_EXTERNAL_ID_NM_PREFIX)) { + /* these keys are reserved. */ + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("key cannot start with \"NM.\"")); + return FALSE; + } + + return TRUE; +} + +/** + * nm_setting_ovs_external_ids_check_val: + * @val: (allow-none): the value to check + * @error: a #GError, %NULL to ignore. + * + * Checks whether @val is a valid user data value. This means, + * value is not %NULL, not too large and valid UTF-8. + * + * Since: 1.30 + * + * Returns: %TRUE if @val is a valid user data value. + */ +gboolean +nm_setting_ovs_external_ids_check_val(const char *val, GError **error) +{ + gsize len; + + g_return_val_if_fail(!error || !*error, FALSE); + + if (!val) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("value is missing")); + return FALSE; + } + + len = strlen(val); + if (len > (8u * 1024u)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("value is too large")); + return FALSE; + } + + if (!g_utf8_validate(val, len, NULL)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("value is not valid UTF8")); + return FALSE; + } + + return TRUE; +} + +/*****************************************************************************/ + +static GHashTable * +_create_data_hash(void) +{ + return g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, g_free); +} + +GHashTable * +_nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *self) +{ + return NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self)->data; +} + +/** + * nm_setting_ovs_external_ids_get_data_keys: + * @setting: the #NMSettingOvsExternalIDs + * @out_len: (out): the length of the returned array + * + * Returns: (array length=out_len) (transfer none): a + * %NULL-terminated array containing each key from the table. + **/ +const char *const * +nm_setting_ovs_external_ids_get_data_keys(NMSettingOvsExternalIDs *setting, guint *out_len) +{ + NMSettingOvsExternalIDs * self = setting; + NMSettingOvsExternalIDsPrivate *priv; + + g_return_val_if_fail(NM_IS_SETTING_OVS_EXTERNAL_IDS(self), NULL); + + priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + if (priv->data_keys) { + NM_SET_OUT(out_len, g_hash_table_size(priv->data)); + return priv->data_keys; + } + + priv->data_keys = nm_utils_strdict_get_keys(priv->data, TRUE, out_len); + + /* don't return %NULL, but hijack the @data_keys fields as a pseudo + * empty strv array. */ + return priv->data_keys ?: ((const char **) &priv->data_keys); +} + +/*****************************************************************************/ + +/** + * nm_setting_ovs_external_ids_get_data: + * @setting: the #NMSettingOvsExternalIDs instance + * @key: the external-id to lookup + * + * Since: 1.30 + * + * Returns: (transfer none): the value associated with @key or %NULL if no such + * value exists. + */ +const char * +nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *setting, const char *key) +{ + NMSettingOvsExternalIDs * self = setting; + NMSettingOvsExternalIDsPrivate *priv; + + g_return_val_if_fail(NM_IS_SETTING_OVS_EXTERNAL_IDS(self), NULL); + g_return_val_if_fail(key, NULL); + + priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + if (!priv->data) + return NULL; + + return g_hash_table_lookup(priv->data, key); +} + +/** + * nm_setting_ovs_external_ids_set_data: + * @setting: the #NMSettingOvsExternalIDs instance + * @key: the key to set + * @val: (allow-none): the value to set or %NULL to clear a key. + * + * Since: 1.30 + */ +void +nm_setting_ovs_external_ids_set_data(NMSettingOvsExternalIDs *setting, + const char * key, + const char * val) +{ + NMSettingOvsExternalIDs * self = setting; + NMSettingOvsExternalIDsPrivate *priv; + + g_return_if_fail(NM_IS_SETTING_OVS_EXTERNAL_IDS(self)); + + priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + if (!val) { + if (priv->data && g_hash_table_remove(priv->data, key)) + goto out_changed; + return; + } + + if (priv->data) { + const char *val2; + + if (g_hash_table_lookup_extended(priv->data, key, NULL, (gpointer *) &val2)) { + if (nm_streq(val, val2)) + return; + } + } else + priv->data = _create_data_hash(); + + g_hash_table_insert(priv->data, g_strdup(key), g_strdup(val)); + +out_changed: + nm_clear_g_free(&priv->data_keys); + _notify(self, PROP_DATA); +} + +/*****************************************************************************/ + +static gboolean +verify(NMSetting *setting, NMConnection *connection, GError **error) +{ + NMSettingOvsExternalIDs * self = NM_SETTING_OVS_EXTERNAL_IDS(setting); + NMSettingOvsExternalIDsPrivate *priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + if (priv->data) { + gs_free_error GError *local = NULL; + GHashTableIter iter; + const char * key; + const char * val; + + g_hash_table_iter_init(&iter, priv->data); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) { + if (!nm_setting_ovs_external_ids_check_key(key, &local)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_FAILED, + _("invalid key \"%s\": %s"), + key, + local->message); + } else if (!nm_setting_ovs_external_ids_check_val(val, &local)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_FAILED, + _("invalid value for \"%s\": %s"), + key, + local->message); + } else + continue; + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + NM_SETTING_OVS_EXTERNAL_IDS_DATA); + return FALSE; + } + } + + if (priv->data && g_hash_table_size(priv->data) > MAX_NUM_KEYS) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("maximum number of user data entries reached (%u instead of %u)"), + g_hash_table_size(priv->data), + (unsigned) MAX_NUM_KEYS); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + NM_SETTING_OVS_EXTERNAL_IDS_DATA); + return FALSE; + } + + if (connection) { + const char *type; + + type = nm_connection_get_connection_type(connection); + if (!type) { + NMSetting *s_base; + + s_base = _nm_connection_find_base_type_setting(connection); + if (s_base) + type = nm_setting_get_name(s_base); + } + if (!NM_IN_STRSET(type, + NM_SETTING_OVS_BRIDGE_SETTING_NAME, + NM_SETTING_OVS_PORT_SETTING_NAME, + NM_SETTING_OVS_INTERFACE_SETTING_NAME)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("OVS external IDs can only be added to a profile of type OVS " + "bridge/port/interface")); + return FALSE; + } + } + + return TRUE; +} + +static NMTernary +compare_property(const NMSettInfoSetting *sett_info, + guint property_idx, + NMConnection * con_a, + NMSetting * set_a, + NMConnection * con_b, + NMSetting * set_b, + NMSettingCompareFlags flags) +{ + NMSettingOvsExternalIDsPrivate *priv; + NMSettingOvsExternalIDsPrivate *pri2; + + if (nm_streq(sett_info->property_infos[property_idx].name, NM_SETTING_OVS_EXTERNAL_IDS_DATA)) { + if (NM_FLAGS_HAS(flags, NM_SETTING_COMPARE_FLAG_INFERRABLE)) + return NM_TERNARY_DEFAULT; + + if (!set_b) + return TRUE; + + priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(NM_SETTING_OVS_EXTERNAL_IDS(set_a)); + pri2 = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(NM_SETTING_OVS_EXTERNAL_IDS(set_b)); + return nm_utils_hashtable_equal(priv->data, pri2->data, TRUE, g_str_equal); + } + + return NM_SETTING_CLASS(nm_setting_ovs_external_ids_parent_class) + ->compare_property(sett_info, property_idx, con_a, set_a, con_b, set_b, flags); +} + +/*****************************************************************************/ + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMSettingOvsExternalIDs * self = NM_SETTING_OVS_EXTERNAL_IDS(object); + NMSettingOvsExternalIDsPrivate *priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + GHashTableIter iter; + GHashTable * data; + const char * key; + const char * val; + + switch (prop_id) { + case PROP_DATA: + data = _create_data_hash(); + if (priv->data) { + g_hash_table_iter_init(&iter, priv->data); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) + g_hash_table_insert(data, g_strdup(key), g_strdup(val)); + } + g_value_take_boxed(value, data); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + NMSettingOvsExternalIDs * self = NM_SETTING_OVS_EXTERNAL_IDS(object); + NMSettingOvsExternalIDsPrivate *priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + switch (prop_id) { + case PROP_DATA: + { + gs_unref_hashtable GHashTable *old = NULL; + GHashTableIter iter; + GHashTable * data; + const char * key; + const char * val; + + nm_clear_g_free(&priv->data_keys); + + old = g_steal_pointer(&priv->data); + + data = g_value_get_boxed(value); + if (nm_g_hash_table_size(data) <= 0) + return; + + priv->data = _create_data_hash(); + g_hash_table_iter_init(&iter, data); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) + g_hash_table_insert(priv->data, g_strdup(key), g_strdup(val)); + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +/*****************************************************************************/ + +static void +nm_setting_ovs_external_ids_init(NMSettingOvsExternalIDs *self) +{} + +/** + * nm_setting_ovs_external_ids_new: + * + * Creates a new #NMSettingOvsExternalIDs object with default values. + * + * Returns: (transfer full) (type NMSettingOvsExternalIDs): the new empty + * #NMSettingOvsExternalIDs object + * + * Since: 1.30 + */ +NMSetting * +nm_setting_ovs_external_ids_new(void) +{ + return g_object_new(NM_TYPE_SETTING_OVS_EXTERNAL_IDS, NULL); +} + +static void +finalize(GObject *object) +{ + NMSettingOvsExternalIDs * self = NM_SETTING_OVS_EXTERNAL_IDS(object); + NMSettingOvsExternalIDsPrivate *priv = NM_SETTING_OVS_EXTERNAL_IDS_GET_PRIVATE(self); + + g_free(priv->data_keys); + if (priv->data) + g_hash_table_unref(priv->data); + + G_OBJECT_CLASS(nm_setting_ovs_external_ids_parent_class)->finalize(object); +} + +static void +nm_setting_ovs_external_ids_class_init(NMSettingOvsExternalIDsClass *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 = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + setting_class->compare_property = compare_property; + setting_class->verify = verify; + + /** + * NMSettingOvsExternalIDs:data: (type GHashTable(utf8,utf8)) + * + * A dictionary of key/value pairs with exernal-ids for OVS. + * + * Since: 1.30 + **/ + obj_properties[PROP_DATA] = g_param_spec_boxed(NM_SETTING_OVS_EXTERNAL_IDS_DATA, + "", + "", + G_TYPE_HASH_TABLE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[PROP_DATA], + &nm_sett_info_propert_type_strdict); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit_full(setting_class, + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + NULL, + properties_override); +} diff --git a/libnm-core/nm-setting-ovs-external-ids.h b/libnm-core/nm-setting-ovs-external-ids.h new file mode 100644 index 0000000000..02b902bd2b --- /dev/null +++ b/libnm-core/nm-setting-ovs-external-ids.h @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2017 - 2020 Red Hat, Inc. + */ + +#ifndef __NM_SETTING_OVS_EXTERNAL_IDS_H__ +#define __NM_SETTING_OVS_EXTERNAL_IDS_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_OVS_EXTERNAL_IDS (nm_setting_ovs_external_ids_get_type()) +#define NM_SETTING_OVS_EXTERNAL_IDS(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_OVS_EXTERNAL_IDS, NMSettingOvsExternalIDs)) +#define NM_SETTING_OVS_EXTERNAL_IDS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + NM_TYPE_SETTING_OVS_EXTERNAL_IDS, \ + NMSettingOvsExternalIDsClass)) +#define NM_IS_SETTING_OVS_EXTERNAL_IDS(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_OVS_EXTERNAL_IDS)) +#define NM_IS_SETTING_OVS_EXTERNAL_IDS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_OVS_EXTERNAL_IDS)) +#define NM_SETTING_OVS_EXTERNAL_IDS_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + NM_TYPE_SETTING_OVS_EXTERNAL_IDS, \ + NMSettingOvsExternalIDsClass)) + +#define NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME "ovs-external-ids" + +#define NM_SETTING_OVS_EXTERNAL_IDS_DATA "data" + +typedef struct _NMSettingOvsExternalIDsClass NMSettingOvsExternalIDsClass; + +NM_AVAILABLE_IN_1_30 +GType nm_setting_ovs_external_ids_get_type(void); + +NM_AVAILABLE_IN_1_30 +NMSetting *nm_setting_ovs_external_ids_new(void); + +/*****************************************************************************/ + +NM_AVAILABLE_IN_1_30 +const char *const *nm_setting_ovs_external_ids_get_data_keys(NMSettingOvsExternalIDs *setting, + guint * out_len); + +NM_AVAILABLE_IN_1_30 +const char *nm_setting_ovs_external_ids_get_data(NMSettingOvsExternalIDs *setting, const char *key); + +NM_AVAILABLE_IN_1_30 +void nm_setting_ovs_external_ids_set_data(NMSettingOvsExternalIDs *setting, + const char * key, + const char * val); + +/*****************************************************************************/ + +NM_AVAILABLE_IN_1_30 +gboolean nm_setting_ovs_external_ids_check_key(const char *key, GError **error); +NM_AVAILABLE_IN_1_30 +gboolean nm_setting_ovs_external_ids_check_val(const char *val, GError **error); + +G_END_DECLS + +#endif /* __NM_SETTING_OVS_EXTERNAL_IDS_H__ */ diff --git a/libnm-core/nm-setting-ovs-interface.c b/libnm-core/nm-setting-ovs-interface.c index 216078891d..7c2da0f504 100644 --- a/libnm-core/nm-setting-ovs-interface.c +++ b/libnm-core/nm-setting-ovs-interface.c @@ -382,7 +382,7 @@ nm_setting_ovs_interface_init(NMSettingOvsInterface *self) NMSetting * nm_setting_ovs_interface_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OVS_INTERFACE, NULL); + return g_object_new(NM_TYPE_SETTING_OVS_INTERFACE, NULL); } static void diff --git a/libnm-core/nm-setting-ovs-patch.c b/libnm-core/nm-setting-ovs-patch.c index 8ea4bbb2e7..feff0fdb59 100644 --- a/libnm-core/nm-setting-ovs-patch.c +++ b/libnm-core/nm-setting-ovs-patch.c @@ -142,7 +142,7 @@ nm_setting_ovs_patch_init(NMSettingOvsPatch *self) NMSetting * nm_setting_ovs_patch_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OVS_PATCH, NULL); + return g_object_new(NM_TYPE_SETTING_OVS_PATCH, NULL); } static void diff --git a/libnm-core/nm-setting-ovs-port.c b/libnm-core/nm-setting-ovs-port.c index beae8c85aa..50b6bf9b21 100644 --- a/libnm-core/nm-setting-ovs-port.c +++ b/libnm-core/nm-setting-ovs-port.c @@ -343,7 +343,7 @@ nm_setting_ovs_port_init(NMSettingOvsPort *self) NMSetting * nm_setting_ovs_port_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_OVS_PORT, NULL); + return g_object_new(NM_TYPE_SETTING_OVS_PORT, NULL); } static void diff --git a/libnm-core/nm-setting-ppp.c b/libnm-core/nm-setting-ppp.c index 6c7fa2780e..3f36c0104a 100644 --- a/libnm-core/nm-setting-ppp.c +++ b/libnm-core/nm-setting-ppp.c @@ -512,7 +512,7 @@ nm_setting_ppp_init(NMSettingPpp *self) NMSetting * nm_setting_ppp_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_PPP, NULL); + return g_object_new(NM_TYPE_SETTING_PPP, NULL); } static void diff --git a/libnm-core/nm-setting-pppoe.c b/libnm-core/nm-setting-pppoe.c index b86adcc1a6..40ce2f8917 100644 --- a/libnm-core/nm-setting-pppoe.c +++ b/libnm-core/nm-setting-pppoe.c @@ -254,7 +254,7 @@ nm_setting_pppoe_init(NMSettingPppoe *setting) NMSetting * nm_setting_pppoe_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_PPPOE, NULL); + return g_object_new(NM_TYPE_SETTING_PPPOE, NULL); } static void diff --git a/libnm-core/nm-setting-private.h b/libnm-core/nm-setting-private.h index efbfc274bc..8ae2768e8e 100644 --- a/libnm-core/nm-setting-private.h +++ b/libnm-core/nm-setting-private.h @@ -20,7 +20,6 @@ /*****************************************************************************/ NMSettingPriority _nm_setting_get_base_type_priority(NMSetting *setting); -NMSettingPriority _nm_setting_type_get_base_type_priority(GType type); int _nm_setting_compare_priority(gconstpointer a, gconstpointer b); /*****************************************************************************/ diff --git a/libnm-core/nm-setting-proxy.c b/libnm-core/nm-setting-proxy.c index df91fdd0e8..5f643b53de 100644 --- a/libnm-core/nm-setting-proxy.c +++ b/libnm-core/nm-setting-proxy.c @@ -262,7 +262,7 @@ nm_setting_proxy_init(NMSettingProxy *self) NMSetting * nm_setting_proxy_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_PROXY, NULL); + return g_object_new(NM_TYPE_SETTING_PROXY, NULL); } static void diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c index 6a0c7792e9..ce78a20dc5 100644 --- a/libnm-core/nm-setting-serial.c +++ b/libnm-core/nm-setting-serial.c @@ -223,7 +223,7 @@ nm_setting_serial_init(NMSettingSerial *self) NMSetting * nm_setting_serial_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_SERIAL, NULL); + return g_object_new(NM_TYPE_SETTING_SERIAL, NULL); } static void diff --git a/libnm-core/nm-setting-sriov.c b/libnm-core/nm-setting-sriov.c index 942ef6d415..094dbdb5ec 100644 --- a/libnm-core/nm-setting-sriov.c +++ b/libnm-core/nm-setting-sriov.c @@ -1222,7 +1222,7 @@ nm_setting_sriov_init(NMSettingSriov *setting) NMSetting * nm_setting_sriov_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_SRIOV, NULL); + return g_object_new(NM_TYPE_SETTING_SRIOV, NULL); } static void diff --git a/libnm-core/nm-setting-tc-config.c b/libnm-core/nm-setting-tc-config.c index 0a7c9dae06..000a51a2e7 100644 --- a/libnm-core/nm-setting-tc-config.c +++ b/libnm-core/nm-setting-tc-config.c @@ -1778,7 +1778,7 @@ nm_setting_tc_config_init(NMSettingTCConfig *self) NMSetting * nm_setting_tc_config_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_TC_CONFIG, NULL); + return g_object_new(NM_TYPE_SETTING_TC_CONFIG, NULL); } static void diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c index 8fff5bdc9f..473d3b61b5 100644 --- a/libnm-core/nm-setting-team-port.c +++ b/libnm-core/nm-setting-team-port.c @@ -503,7 +503,7 @@ nm_setting_team_port_init(NMSettingTeamPort *setting) NMSetting * nm_setting_team_port_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_TEAM_PORT, NULL); + return g_object_new(NM_TYPE_SETTING_TEAM_PORT, NULL); } static void diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c index 157763698a..e4eb72a3b7 100644 --- a/libnm-core/nm-setting-team.c +++ b/libnm-core/nm-setting-team.c @@ -1459,7 +1459,7 @@ nm_setting_team_init(NMSettingTeam *setting) NMSetting * nm_setting_team_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_TEAM, NULL); + return g_object_new(NM_TYPE_SETTING_TEAM, NULL); } static void diff --git a/libnm-core/nm-setting-tun.c b/libnm-core/nm-setting-tun.c index bfe3f9be1c..1cee2a0491 100644 --- a/libnm-core/nm-setting-tun.c +++ b/libnm-core/nm-setting-tun.c @@ -266,7 +266,7 @@ nm_setting_tun_init(NMSettingTun *self) NMSetting * nm_setting_tun_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_TUN, NULL); + return g_object_new(NM_TYPE_SETTING_TUN, NULL); } static void diff --git a/libnm-core/nm-setting-user.c b/libnm-core/nm-setting-user.c index 3f0e03fb2a..6480b8872f 100644 --- a/libnm-core/nm-setting-user.c +++ b/libnm-core/nm-setting-user.c @@ -288,7 +288,7 @@ nm_setting_user_set_data(NMSettingUser *setting, const char *key, const char *va NMSettingUserPrivate *priv; gboolean changed = FALSE; - g_return_val_if_fail(NM_IS_SETTING(self), FALSE); + g_return_val_if_fail(NM_IS_SETTING_USER(self), FALSE); g_return_val_if_fail(!error || !*error, FALSE); if (!nm_setting_user_check_key(key, error)) @@ -416,11 +416,11 @@ compare_property(const NMSettInfoSetting *sett_info, priv = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_a)); pri2 = NM_SETTING_USER_GET_PRIVATE(NM_SETTING_USER(set_b)); - return nm_utils_hash_table_equal(priv->data, pri2->data, TRUE, g_str_equal) - && nm_utils_hash_table_equal(priv->data_invalid, - pri2->data_invalid, - TRUE, - g_str_equal); + return nm_utils_hashtable_equal(priv->data, pri2->data, TRUE, g_str_equal) + && nm_utils_hashtable_equal(priv->data_invalid, + pri2->data_invalid, + TRUE, + g_str_equal); } return NM_SETTING_CLASS(nm_setting_user_parent_class) @@ -523,7 +523,7 @@ nm_setting_user_init(NMSettingUser *self) NMSetting * nm_setting_user_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_USER, NULL); + return g_object_new(NM_TYPE_SETTING_USER, NULL); } static void diff --git a/libnm-core/nm-setting-veth.c b/libnm-core/nm-setting-veth.c new file mode 100644 index 0000000000..bde87dc831 --- /dev/null +++ b/libnm-core/nm-setting-veth.c @@ -0,0 +1,194 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-setting-veth.h" + +#include <stdlib.h> + +#include "nm-utils.h" +#include "nm-setting-connection.h" +#include "nm-setting-private.h" +#include "nm-connection-private.h" + +/** + * SECTION:nm-setting-veth + * @short_description: Describes connection properties for veth interfaces + * + * The #NMSettingVeth object is a #NMSetting subclass that describes properties + * necessary for connection to veth interfaces. + **/ + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PEER, ); + +typedef struct { + char *peer; +} NMSettingVethPrivate; + +/** + * NMSettingVeth: + * + * Veth Settings + */ +struct _NMSettingVeth { + NMSetting parent; + NMSettingVethPrivate _priv; +}; + +struct _NMSettingVethClass { + NMSettingClass parent; +}; + +G_DEFINE_TYPE(NMSettingVeth, nm_setting_veth, NM_TYPE_SETTING) + +#define NM_SETTING_VETH_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMSettingVeth, NM_IS_SETTING_VETH, NMSetting) + +/*****************************************************************************/ + +/** + * nm_setting_veth_get_peer: + * @setting: the #NMSettingVeth + * + * Returns: the #NMSettingVeth:peer property of the setting + * + * Since: 1.30 + **/ +const char * +nm_setting_veth_get_peer(NMSettingVeth *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_VETH(setting), NULL); + return NM_SETTING_VETH_GET_PRIVATE(setting)->peer; +} + +/*****************************************************************************/ + +static gboolean +verify(NMSetting *setting, NMConnection *connection, GError **error) +{ + NMSettingVethPrivate *priv = NM_SETTING_VETH_GET_PRIVATE(setting); + + if (!priv->peer) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is not specified")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_VETH_SETTING_NAME, NM_SETTING_VETH_PEER); + return FALSE; + } + + if (!nm_utils_ifname_valid(priv->peer, NMU_IFACE_KERNEL, NULL)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid interface name"), + priv->peer); + g_prefix_error(error, "%s.%s: ", NM_SETTING_VETH_SETTING_NAME, NM_SETTING_VETH_PEER); + return FALSE; + } + + if (!_nm_connection_verify_required_interface_name(connection, error)) + return FALSE; + + return TRUE; +} + +/*****************************************************************************/ + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMSettingVeth * setting = NM_SETTING_VETH(object); + NMSettingVethPrivate *priv = NM_SETTING_VETH_GET_PRIVATE(setting); + + switch (prop_id) { + case PROP_PEER: + g_value_set_string(value, priv->peer); + break; + } +} + +static void +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) +{ + NMSettingVeth * setting = NM_SETTING_VETH(object); + NMSettingVethPrivate *priv = NM_SETTING_VETH_GET_PRIVATE(setting); + + switch (prop_id) { + case PROP_PEER: + g_free(priv->peer); + priv->peer = g_value_dup_string(value); + break; + } +} + +/*****************************************************************************/ + +static void +nm_setting_veth_init(NMSettingVeth *setting) +{} + +/** + * nm_setting_veth_new: + * + * Creates a new #NMSettingVeth object with default values. + * + * Returns: (transfer full): the new empty #NMSettingVeth object + * + * Since: 1.30 + **/ +NMSetting * +nm_setting_veth_new(void) +{ + return g_object_new(NM_TYPE_SETTING_VETH, NULL); +} + +static void +finalize(GObject *object) +{ + NMSettingVeth * setting = NM_SETTING_VETH(object); + NMSettingVethPrivate *priv = NM_SETTING_VETH_GET_PRIVATE(setting); + + g_free(priv->peer); + + G_OBJECT_CLASS(nm_setting_veth_parent_class)->finalize(object); +} + +static void +nm_setting_veth_class_init(NMSettingVethClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + + g_type_class_add_private(klass, sizeof(NMSettingVethPrivate)); + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + setting_class->verify = verify; + + /** + * NMSettingVeth:peer: + * + * This property specifies the peer interface name of the veth. This + * property is mandatory. + * + * Since: 1.30 + **/ + obj_properties[PROP_PEER] = g_param_spec_string(NM_SETTING_VETH_PEER, + "", + "", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE + | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_VETH); +} diff --git a/libnm-core/nm-setting-veth.h b/libnm-core/nm-setting-veth.h new file mode 100644 index 0000000000..27f80910e4 --- /dev/null +++ b/libnm-core/nm-setting-veth.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#ifndef __NM_SETTING_VETH_H__ +#define __NM_SETTING_VETH_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_VETH (nm_setting_veth_get_type()) +#define NM_SETTING_VETH(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTING_VETH, NMSettingVeth)) +#define NM_IS_SETTING_VETH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTING_VETH)) +#define NM_IS_SETTING_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTING_VETH)) +#define NM_SETTING_VETH_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTING_VETH, NMSettingVethClass)) + +#define NM_SETTING_VETH_SETTING_NAME "veth" + +#define NM_SETTING_VETH_PEER "peer" + +typedef struct _NMSettingVethClass NMSettingVethClass; + +NM_AVAILABLE_IN_1_30 +GType nm_setting_veth_get_type(void); +NM_AVAILABLE_IN_1_30 +NMSetting *nm_setting_veth_new(void); + +NM_AVAILABLE_IN_1_30 +const char *nm_setting_veth_get_peer(NMSettingVeth *setting); + +G_END_DECLS + +#endif /* __NM_SETTING_VETH_H__ */ diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c index 515602e3b1..8916be7d8f 100644 --- a/libnm-core/nm-setting-vlan.c +++ b/libnm-core/nm-setting-vlan.c @@ -803,7 +803,7 @@ nm_setting_vlan_init(NMSettingVlan *self) NMSetting * nm_setting_vlan_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_VLAN, NULL); + return g_object_new(NM_TYPE_SETTING_VLAN, NULL); } static void diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c index e926c65dae..49f320cdf8 100644 --- a/libnm-core/nm-setting-vpn.c +++ b/libnm-core/nm-setting-vpn.c @@ -1068,7 +1068,7 @@ nm_setting_vpn_init(NMSettingVpn *setting) NMSetting * nm_setting_vpn_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_VPN, NULL); + return g_object_new(NM_TYPE_SETTING_VPN, NULL); } static void diff --git a/libnm-core/nm-setting-vrf.c b/libnm-core/nm-setting-vrf.c index 7114365942..7a1dcf50c2 100644 --- a/libnm-core/nm-setting-vrf.c +++ b/libnm-core/nm-setting-vrf.c @@ -128,7 +128,7 @@ nm_setting_vrf_init(NMSettingVrf *setting) NMSetting * nm_setting_vrf_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_VRF, NULL); + return g_object_new(NM_TYPE_SETTING_VRF, NULL); } static void diff --git a/libnm-core/nm-setting-vxlan.c b/libnm-core/nm-setting-vxlan.c index 213219baaa..72ac7ac352 100644 --- a/libnm-core/nm-setting-vxlan.c +++ b/libnm-core/nm-setting-vxlan.c @@ -312,43 +312,36 @@ nm_setting_vxlan_get_l3_miss(NMSettingVxlan *setting) static gboolean verify(NMSetting *setting, NMConnection *connection, GError **error) { - NMSettingVxlanPrivate *priv = NM_SETTING_VXLAN_GET_PRIVATE(setting); - int family = AF_UNSPEC; - - if (!priv->remote) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - g_prefix_error(error, "%s.%s: ", NM_SETTING_VXLAN_SETTING_NAME, NM_SETTING_VXLAN_REMOTE); - return FALSE; - } + NMSettingVxlanPrivate *priv = NM_SETTING_VXLAN_GET_PRIVATE(setting); + int addr_family = AF_UNSPEC; + gboolean remote_is_valid = TRUE; + gboolean local_is_valid = TRUE; + + if (priv->remote && !nm_utils_parse_inaddr_bin(addr_family, priv->remote, &addr_family, NULL)) + remote_is_valid = FALSE; + if (priv->local && !nm_utils_parse_inaddr_bin(addr_family, priv->local, &addr_family, NULL)) + local_is_valid = FALSE; - if (nm_utils_ipaddr_is_valid(AF_INET, priv->remote)) - family = AF_INET; - else if (nm_utils_ipaddr_is_valid(AF_INET6, priv->remote)) - family = AF_INET6; - else { + if (!remote_is_valid) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid IP address"), - priv->remote); + _("'%s' is not a valid IP%s address"), + priv->remote, + addr_family == AF_UNSPEC ? "" : (addr_family == AF_INET ? "4" : "6")); g_prefix_error(error, "%s.%s: ", NM_SETTING_VXLAN_SETTING_NAME, NM_SETTING_VXLAN_REMOTE); return FALSE; } - if (priv->local) { - if (!nm_utils_ipaddr_is_valid(family, priv->local)) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid IP%c address"), - priv->local, - family == AF_INET ? '4' : '6'); - g_prefix_error(error, "%s.%s: ", NM_SETTING_VXLAN_SETTING_NAME, NM_SETTING_VXLAN_LOCAL); - return FALSE; - } + if (!local_is_valid) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid IP%s address"), + priv->local, + addr_family == AF_UNSPEC ? "" : (addr_family == AF_INET ? "4" : "6")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_VXLAN_SETTING_NAME, NM_SETTING_VXLAN_LOCAL); + return FALSE; } if (priv->parent && !nm_utils_ifname_valid_kernel(priv->parent, NULL) @@ -383,6 +376,19 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) /*****************************************************************************/ static void +_addrstr_set(char **dst, const char *src) +{ + gs_free char *old = NULL; + + old = *dst; + if (!src) + *dst = NULL; + else if (!nm_utils_parse_inaddr(AF_UNSPEC, src, dst)) + *dst = g_strdup(src); +} +/*****************************************************************************/ + +static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMSettingVxlan * setting = NM_SETTING_VXLAN(object); @@ -458,12 +464,10 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps priv->id = g_value_get_uint(value); break; case PROP_LOCAL: - g_free(priv->local); - priv->local = g_value_dup_string(value); + _addrstr_set(&priv->local, g_value_get_string(value)); break; case PROP_REMOTE: - g_free(priv->remote); - priv->remote = g_value_dup_string(value); + _addrstr_set(&priv->remote, g_value_get_string(value)); break; case PROP_SOURCE_PORT_MIN: priv->source_port_min = g_value_get_uint(value); @@ -531,7 +535,7 @@ nm_setting_vxlan_init(NMSettingVxlan *self) NMSetting * nm_setting_vxlan_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_VXLAN, NULL); + return g_object_new(NM_TYPE_SETTING_VXLAN, NULL); } static void diff --git a/libnm-core/nm-setting-wimax.c b/libnm-core/nm-setting-wimax.c index e148a435a1..6ce9248f60 100644 --- a/libnm-core/nm-setting-wimax.c +++ b/libnm-core/nm-setting-wimax.c @@ -183,7 +183,7 @@ nm_setting_wimax_init(NMSettingWimax *setting) NMSetting * nm_setting_wimax_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_WIMAX, NULL); + return g_object_new(NM_TYPE_SETTING_WIMAX, NULL); } static void diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c index df922e9e14..10385d002d 100644 --- a/libnm-core/nm-setting-wired.c +++ b/libnm-core/nm-setting-wired.c @@ -1174,7 +1174,7 @@ nm_setting_wired_init(NMSettingWired *setting) NMSetting * nm_setting_wired_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_WIRED, NULL); + return g_object_new(NM_TYPE_SETTING_WIRED, NULL); } static void diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c index 13e7a81899..a1db64a24c 100644 --- a/libnm-core/nm-setting-wireless-security.c +++ b/libnm-core/nm-setting-wireless-security.c @@ -1445,7 +1445,7 @@ nm_setting_wireless_security_init(NMSettingWirelessSecurity *self) NMSetting * nm_setting_wireless_security_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, NULL); + return g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, NULL); } static void diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c index 4dd85b45d9..2f7dfacffc 100644 --- a/libnm-core/nm-setting-wireless.c +++ b/libnm-core/nm-setting-wireless.c @@ -1326,7 +1326,7 @@ nm_setting_wireless_init(NMSettingWireless *setting) NMSetting * nm_setting_wireless_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_WIRELESS, NULL); + return g_object_new(NM_TYPE_SETTING_WIRELESS, NULL); } static void diff --git a/libnm-core/nm-setting-wpan.c b/libnm-core/nm-setting-wpan.c index f9868f5917..955bb43408 100644 --- a/libnm-core/nm-setting-wpan.c +++ b/libnm-core/nm-setting-wpan.c @@ -281,7 +281,7 @@ nm_setting_wpan_init(NMSettingWpan *setting) NMSetting * nm_setting_wpan_new(void) { - return (NMSetting *) g_object_new(NM_TYPE_SETTING_WPAN, NULL); + return g_object_new(NM_TYPE_SETTING_WPAN, NULL); } static void diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index 0f62128908..e3dd45f1cb 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -57,26 +57,6 @@ static GenData *_gendata_hash(NMSetting *setting, gboolean create_if_necessary); /*****************************************************************************/ -static NMSettingPriority -_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype) -{ - /* Historical oddity: PPPoE is a base-type even though it's not - * priority 1. It needs to be sorted *after* lower-level stuff like - * Wi-Fi security or 802.1x for secrets, but it's still allowed as a - * base type. - */ - - if (setting_info) { - if (NM_IN_SET(setting_info->setting_priority, - NM_SETTING_PRIORITY_HW_BASE, - NM_SETTING_PRIORITY_HW_NON_BASE) - || gtype == NM_TYPE_SETTING_PPPOE) - return setting_info->setting_priority; - } - - return NM_SETTING_PRIORITY_INVALID; -} - NMSettingPriority _nm_setting_get_setting_priority(NMSetting *setting) { @@ -89,18 +69,12 @@ _nm_setting_get_setting_priority(NMSetting *setting) } NMSettingPriority -_nm_setting_type_get_base_type_priority(GType type) -{ - return _get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type); -} - -NMSettingPriority _nm_setting_get_base_type_priority(NMSetting *setting) { g_return_val_if_fail(NM_IS_SETTING(setting), NM_SETTING_PRIORITY_INVALID); - return _get_base_type_priority(NM_SETTING_GET_CLASS(setting)->setting_info, - G_OBJECT_TYPE(setting)); + return nm_meta_setting_info_get_base_type_priority(NM_SETTING_GET_CLASS(setting)->setting_info, + G_OBJECT_TYPE(setting)); } /** @@ -797,7 +771,7 @@ _nm_setting_new_from_dbus(GType setting_type, * either be ignored or else has a backward-compatibility equivalent * that we do know about. */ - setting = (NMSetting *) g_object_new(setting_type, NULL); + setting = g_object_new(setting_type, NULL); if (NM_FLAGS_HAS(parse_flags, NM_SETTING_PARSE_FLAGS_STRICT)) { GVariantIter iter; @@ -1481,10 +1455,10 @@ _nm_setting_compare(NMConnection * con_a, GenData *a_gendata = _gendata_hash(a, FALSE); GenData *b_gendata = _gendata_hash(b, FALSE); - return nm_utils_hash_table_equal(a_gendata ? a_gendata->hash : NULL, - b_gendata ? b_gendata->hash : NULL, - TRUE, - g_variant_equal); + return nm_utils_hashtable_equal(a_gendata ? a_gendata->hash : NULL, + b_gendata ? b_gendata->hash : NULL, + TRUE, + g_variant_equal); } for (i = 0; i < sett_info->property_infos_len; i++) { diff --git a/libnm-core/nm-simple-connection.c b/libnm-core/nm-simple-connection.c index 41ba018fd1..68149a9574 100644 --- a/libnm-core/nm-simple-connection.c +++ b/libnm-core/nm-simple-connection.c @@ -44,7 +44,7 @@ nm_simple_connection_init(NMSimpleConnection *self) NMConnection * nm_simple_connection_new(void) { - return (NMConnection *) g_object_new(NM_TYPE_SIMPLE_CONNECTION, NULL); + return g_object_new(NM_TYPE_SIMPLE_CONNECTION, NULL); } /** diff --git a/libnm-core/nm-team-utils.c b/libnm-core/nm-team-utils.c index 2f1fba33be..d0485fd906 100644 --- a/libnm-core/nm-team-utils.c +++ b/libnm-core/nm-team-utils.c @@ -524,10 +524,10 @@ _team_attr_data_cmp(const TeamAttrData *attr_data, v_ptrarray_a = *((const GPtrArray *const *) val_a); v_ptrarray_b = *((const GPtrArray *const *) val_b); NM_CMP_RETURN( - _nm_utils_strv_cmp_n(v_ptrarray_a ? (const char *const *) v_ptrarray_a->pdata : NULL, - v_ptrarray_a ? v_ptrarray_a->len : 0u, - v_ptrarray_b ? (const char *const *) v_ptrarray_b->pdata : NULL, - v_ptrarray_b ? v_ptrarray_b->len : 0u)); + nm_utils_strv_cmp_n(v_ptrarray_a ? (const char *const *) v_ptrarray_a->pdata : NULL, + v_ptrarray_a ? v_ptrarray_a->len : 0u, + v_ptrarray_b ? (const char *const *) v_ptrarray_b->pdata : NULL, + v_ptrarray_b ? v_ptrarray_b->len : 0u)); } else nm_assert_not_reached(); return 0; @@ -1136,13 +1136,12 @@ _team_setting_value_master_runner_tx_hash_set_list(NMTeamSetting * self, gboolean changed; guint i; - if (_nm_utils_strv_cmp_n(self->d.master.runner_tx_hash - ? (const char *const *) self->d.master.runner_tx_hash->pdata - : NULL, - self->d.master.runner_tx_hash ? self->d.master.runner_tx_hash->len - : 0u, - arr, - len) + if (nm_utils_strv_cmp_n(self->d.master.runner_tx_hash + ? (const char *const *) self->d.master.runner_tx_hash->pdata + : NULL, + self->d.master.runner_tx_hash ? self->d.master.runner_tx_hash->len : 0u, + arr, + len) == 0) { changed = FALSE; goto out; diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index fa65c8a39f..7834462f50 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -858,7 +858,7 @@ GPtrArray * _nm_utils_copy_array(const GPtrArray *array, NMUtilsCopyFunc copy_func, GDestroyNotify free_func) { GPtrArray *copy; - int i; + guint i; if (!array) return g_ptr_array_new_with_free_func(free_func); @@ -1276,7 +1276,8 @@ nm_utils_security_valid(NMUtilsSecurityType type, gboolean nm_utils_wep_key_valid(const char *key, NMWepKeyType wep_type) { - int keylen, i; + gsize keylen; + gsize i; if (!key) return FALSE; @@ -1321,7 +1322,8 @@ nm_utils_wep_key_valid(const char *key, NMWepKeyType wep_type) gboolean nm_utils_wpa_psk_valid(const char *psk) { - int psklen, i; + gsize psklen; + gsize i; if (!psk) return FALSE; @@ -1354,7 +1356,7 @@ GVariant * nm_utils_ip4_dns_to_variant(char **dns) { GVariantBuilder builder; - int i; + gsize i; g_variant_builder_init(&builder, G_VARIANT_TYPE("au")); @@ -1385,13 +1387,12 @@ nm_utils_ip4_dns_from_variant(GVariant *value) const guint32 *array; gsize length; char ** dns; - int i; + gsize i; g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("au")), NULL); array = g_variant_get_fixed_array(value, &length, sizeof(guint32)); - dns = g_new(char *, length + 1); - + dns = g_new(char *, length + 1u); for (i = 0; i < length; i++) dns[i] = nm_utils_inet4_ntop_dup(array[i]); dns[i] = NULL; @@ -1416,7 +1417,7 @@ GVariant * nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway) { GVariantBuilder builder; - int i; + guint i; g_variant_builder_init(&builder, G_VARIANT_TYPE("aau")); @@ -1424,16 +1425,23 @@ nm_utils_ip4_addresses_to_variant(GPtrArray *addresses, const char *gateway) for (i = 0; i < addresses->len; i++) { NMIPAddress *addr = addresses->pdata[i]; guint32 array[3]; + in_addr_t gw; if (nm_ip_address_get_family(addr) != AF_INET) continue; + gw = 0u; + if (gateway) { + in_addr_t a; + + if (inet_pton(AF_INET, gateway, &a) == 1) + gw = a; + gateway = NULL; + } + nm_ip_address_get_address_binary(addr, &array[0]); array[1] = nm_ip_address_get_prefix(addr); - if (i == 0 && gateway) - inet_pton(AF_INET, gateway, &array[2]); - else - array[2] = 0; + array[2] = gw; g_variant_builder_add( &builder, @@ -1519,7 +1527,7 @@ GVariant * nm_utils_ip4_routes_to_variant(GPtrArray *routes) { GVariantBuilder builder; - int i; + guint i; g_variant_builder_init(&builder, G_VARIANT_TYPE("aau")); @@ -1655,28 +1663,26 @@ nm_utils_ip4_get_default_prefix(guint32 ip) * Utility function to convert an array of IP address strings int a #GVariant of * type 'aay' representing an array of IPv6 addresses. * + * If a string cannot be parsed, it will be silently ignored. + * * Returns: (transfer none): a new floating #GVariant representing @dns. **/ GVariant * nm_utils_ip6_dns_to_variant(char **dns) { GVariantBuilder builder; - int i; + gsize i; g_variant_builder_init(&builder, G_VARIANT_TYPE("aay")); - if (dns) { for (i = 0; dns[i]; i++) { struct in6_addr ip; - inet_pton(AF_INET6, dns[i], &ip); - g_variant_builder_add( - &builder, - "@ay", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &ip, sizeof(ip), 1)); + if (inet_pton(AF_INET6, dns[i], &ip) != 1) + continue; + g_variant_builder_add(&builder, "@ay", nm_g_variant_new_ay_in6addr(&ip)); } } - return g_variant_builder_end(&builder); } @@ -1697,7 +1703,7 @@ nm_utils_ip6_dns_from_variant(GVariant *value) GVariantIter iter; GVariant * ip_var; char ** dns; - int i; + gsize i; g_return_val_if_fail(g_variant_is_of_type(value, G_VARIANT_TYPE("aay")), NULL); @@ -1737,32 +1743,34 @@ GVariant * nm_utils_ip6_addresses_to_variant(GPtrArray *addresses, const char *gateway) { GVariantBuilder builder; - int i; + guint i; g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ayuay)")); if (addresses) { for (i = 0; i < addresses->len; i++) { - NMIPAddress * addr = addresses->pdata[i]; - struct in6_addr ip_bytes, gateway_bytes; - GVariant * ip_var, *gateway_var; - guint32 prefix; + NMIPAddress * addr = addresses->pdata[i]; + struct in6_addr address_bin; + struct in6_addr gateway_bin_data; + const struct in6_addr *gateway_bin; if (nm_ip_address_get_family(addr) != AF_INET6) continue; - nm_ip_address_get_address_binary(addr, &ip_bytes); - ip_var = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &ip_bytes, 16, 1); - - prefix = nm_ip_address_get_prefix(addr); + nm_ip_address_get_address_binary(addr, &address_bin); - if (i == 0 && gateway) - inet_pton(AF_INET6, gateway, &gateway_bytes); - else - memset(&gateway_bytes, 0, sizeof(gateway_bytes)); - gateway_var = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &gateway_bytes, 16, 1); + gateway_bin = &in6addr_any; + if (gateway) { + if (inet_pton(AF_INET6, gateway, &gateway_bin_data) == 1) + gateway_bin = &gateway_bin_data; + gateway = NULL; + } - g_variant_builder_add(&builder, "(@ayu@ay)", ip_var, prefix, gateway_var); + g_variant_builder_add(&builder, + "(@ayu@ay)", + nm_g_variant_new_ay_in6addr(&address_bin), + (guint32) nm_ip_address_get_prefix(addr), + nm_g_variant_new_ay_in6addr(gateway_bin)); } } @@ -1860,29 +1868,32 @@ GVariant * nm_utils_ip6_routes_to_variant(GPtrArray *routes) { GVariantBuilder builder; - int i; + guint i; g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ayuayu)")); if (routes) { for (i = 0; i < routes->len; i++) { NMIPRoute * route = routes->pdata[i]; - struct in6_addr dest_bytes, next_hop_bytes; - GVariant * dest, *next_hop; - guint32 prefix, metric; + struct in6_addr dest_bytes; + struct in6_addr next_hop_bytes; + guint32 metric; if (nm_ip_route_get_family(route) != AF_INET6) continue; nm_ip_route_get_dest_binary(route, &dest_bytes); - dest = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &dest_bytes, 16, 1); - prefix = nm_ip_route_get_prefix(route); nm_ip_route_get_next_hop_binary(route, &next_hop_bytes); - next_hop = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &next_hop_bytes, 16, 1); - /* The old routes format uses "0" for default, not "-1" */ - metric = MAX(0, nm_ip_route_get_metric(route)); - g_variant_builder_add(&builder, "(@ayu@ayu)", dest, prefix, next_hop, metric); + /* The old routes format uses "0" for default, not "-1" */ + metric = NM_MAX(0, nm_ip_route_get_metric(route)); + + g_variant_builder_add(&builder, + "(@ayu@ayu)", + nm_g_variant_new_ay_in6addr(&dest_bytes), + (guint32) nm_ip_route_get_prefix(route), + nm_g_variant_new_ay_in6addr(&next_hop_bytes), + metric); } } @@ -2088,7 +2099,7 @@ GVariant * nm_utils_ip_routes_to_variant(GPtrArray *routes) { GVariantBuilder builder; - int i; + guint i; g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}")); @@ -3147,7 +3158,7 @@ nm_utils_uuid_is_null(const NMUuid *uuid) if (!uuid) return TRUE; - for (i = 0; i < G_N_ELEMENTS(uuid->uuid); i++) { + for (i = 0; i < (int) G_N_ELEMENTS(uuid->uuid); i++) { if (uuid->uuid[i]) return FALSE; } @@ -3334,7 +3345,7 @@ static gboolean file_has_extension(const char *filename, const char *extensions[]) { const char *ext; - int i; + gsize i; ext = strrchr(filename, '.'); if (!ext) @@ -3833,7 +3844,7 @@ nm_utils_wifi_is_channel_valid(guint32 channel, const char *band) G_STATIC_ASSERT(G_N_ELEMENTS(table) > 0); \ G_STATIC_ASSERT(G_N_ELEMENTS(table) == G_N_ELEMENTS(table_freqs)); \ \ - for (i = 0; i < G_N_ELEMENTS(table); i++) { \ + for (i = 0; i < (int) G_N_ELEMENTS(table); i++) { \ nm_assert((i == G_N_ELEMENTS(table) - 1) == (table[i].chan == 0)); \ nm_assert((i == G_N_ELEMENTS(table) - 1) == (table[i].freq == 0)); \ nm_assert(table[i].freq == table_freqs[i]); \ @@ -4942,20 +4953,7 @@ nm_utils_check_virtual_device_compatibility(GType virtual_type, GType other_type } } -typedef struct { - const char *str; - const char *num; -} BondMode; - -static const BondMode bond_mode_table[] = { - [0] = {"balance-rr", "0"}, - [1] = {"active-backup", "1"}, - [2] = {"balance-xor", "2"}, - [3] = {"broadcast", "3"}, - [4] = {"802.3ad", "4"}, - [5] = {"balance-tlb", "5"}, - [6] = {"balance-alb", "6"}, -}; +/*****************************************************************************/ /** * nm_utils_bond_mode_int_to_string: @@ -4972,9 +4970,7 @@ static const BondMode bond_mode_table[] = { const char * nm_utils_bond_mode_int_to_string(int mode) { - if (mode >= 0 && mode < G_N_ELEMENTS(bond_mode_table)) - return bond_mode_table[mode].str; - return NULL; + return _nm_setting_bond_mode_to_string(mode); } /** @@ -4993,16 +4989,7 @@ nm_utils_bond_mode_int_to_string(int mode) int nm_utils_bond_mode_string_to_int(const char *mode) { - int i; - - if (!mode || !*mode) - return -1; - - for (i = 0; i < G_N_ELEMENTS(bond_mode_table); i++) { - if (NM_IN_STRSET(mode, bond_mode_table[i].str, bond_mode_table[i].num)) - return i; - } - return -1; + return _nm_setting_bond_mode_from_string(mode); } /*****************************************************************************/ @@ -5739,7 +5726,7 @@ NM_UTILS_FLAGS2STR_DEFINE(nm_bluetooth_capability_to_string, NMBluetoothCapabilities, NM_UTILS_FLAGS2STR(NM_BT_CAPABILITY_NONE, "NONE"), NM_UTILS_FLAGS2STR(NM_BT_CAPABILITY_DUN, "DUN"), - NM_UTILS_FLAGS2STR(NM_BT_CAPABILITY_NAP, "NAP"), ) + NM_UTILS_FLAGS2STR(NM_BT_CAPABILITY_NAP, "NAP"), ); /*****************************************************************************/ diff --git a/libnm-core/nm-version.h b/libnm-core/nm-version.h index 1fbcf5abbd..cea26926c2 100644 --- a/libnm-core/nm-version.h +++ b/libnm-core/nm-version.h @@ -257,6 +257,20 @@ #define NM_AVAILABLE_IN_1_28 #endif +#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_30 + #define NM_DEPRECATED_IN_1_30 G_DEPRECATED + #define NM_DEPRECATED_IN_1_30_FOR(f) G_DEPRECATED_FOR(f) +#else + #define NM_DEPRECATED_IN_1_30 + #define NM_DEPRECATED_IN_1_30_FOR(f) +#endif + +#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_30 + #define NM_AVAILABLE_IN_1_30 G_UNAVAILABLE(1, 30) +#else + #define NM_AVAILABLE_IN_1_30 +#endif + /* * Synchronous API for calling D-Bus in libnm is deprecated. See * https://developer.gnome.org/libnm/stable/usage.html#sync-api diff --git a/libnm-core/nm-vpn-dbus-interface.h b/libnm-core/nm-vpn-dbus-interface.h index fc72c4faf8..38aa794a47 100644 --- a/libnm-core/nm-vpn-dbus-interface.h +++ b/libnm-core/nm-vpn-dbus-interface.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2004 Red Hat, Inc. */ diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 6571714476..5ab1922044 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -330,7 +330,7 @@ _do_test_nm_utils_strsplit_set_f_one(NMUtilsStrsplitSetFlags flags, } g_assert(words_g[words_len] == NULL); g_assert_cmpint(NM_PTRARRAY_LEN(words_g), ==, words_len); - g_assert(_nm_utils_strv_cmp_n(exp_words, words_len, NM_CAST_STRV_CC(words_g), -1) == 0); + g_assert(nm_utils_strv_cmp_n(exp_words, words_len, words_g, -1) == 0); } } @@ -354,7 +354,7 @@ _do_test_nm_utils_strsplit_set_f_one(NMUtilsStrsplitSetFlags flags, g_assert_cmpstr(exp_words[i], ==, words[i]); g_assert(words[words_len] == NULL); - g_assert(_nm_utils_strv_cmp_n(exp_words, words_len, words, -1) == 0); + g_assert(nm_utils_strv_cmp_n(exp_words, words_len, words, -1) == 0); s1 = words[0]; g_assert(s1 >= (char *) &words[words_len + 1]); @@ -515,7 +515,7 @@ _do_test_nm_utils_strsplit_set_simple(NMUtilsStrsplitSetFlags flags, g_assert_cmpint(words_len, >, 0); n_tokens = NM_PTRARRAY_LEN(tokens); - if (_nm_utils_strv_cmp_n(exp_words, words_len, tokens, -1) != 0) { + if (nm_utils_strv_cmp_n(exp_words, words_len, tokens, -1) != 0) { gsize i; g_print(">>> split \"%s\" (flags %x) got %zu tokens (%zu expected)\n", @@ -10058,7 +10058,7 @@ _strsplit_quoted_assert_strv(const char * topic, g_assert(strv1); g_assert(strv2); - if (_nm_utils_strv_equal((char **) strv1, (char **) strv2)) + if (nm_utils_strv_equal(strv1, strv2)) return; for (i = 0; strv1[i]; i++) { diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h index e9cfad32b6..c94f093e66 100644 --- a/libnm/NetworkManager.h +++ b/libnm/NetworkManager.h @@ -45,6 +45,7 @@ #include "nm-dhcp-config.h" #include "nm-enum-types.h" #include "nm-ip-config.h" +#include "nm-keyfile.h" #include "nm-object.h" #include "nm-remote-connection.h" #include "nm-setting-6lowpan.h" @@ -61,6 +62,7 @@ #include "nm-setting-ethtool.h" #include "nm-setting-generic.h" #include "nm-setting-gsm.h" +#include "nm-setting-hostname.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip4-config.h" #include "nm-setting-ip6-config.h" @@ -86,6 +88,7 @@ #include "nm-setting-team-port.h" #include "nm-setting-tun.h" #include "nm-setting-user.h" +#include "nm-setting-veth.h" #include "nm-setting-vlan.h" #include "nm-setting-vpn.h" #include "nm-setting-vrf.h" diff --git a/libnm/libnm.ver b/libnm/libnm.ver index c85fcb5c5c..c61792c749 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1755,3 +1755,32 @@ global: nm_setting_ip_config_remove_dhcp_reject_server; nm_setting_wireless_get_ap_isolation; } libnm_1_26_4; + +libnm_1_30_0 { +global: + nm_device_veth_get_type; + nm_keyfile_handler_data_fail_with_error; + nm_keyfile_handler_data_get_context; + nm_keyfile_handler_data_warn_get; + nm_keyfile_handler_flags_get_type; + nm_keyfile_handler_type_get_type; + nm_keyfile_read; + nm_keyfile_warn_severity_get_type; + nm_keyfile_write; + nm_setting_hostname_get_from_dhcp; + nm_setting_hostname_get_from_dns_lookup; + nm_setting_hostname_get_only_from_default; + nm_setting_hostname_get_priority; + nm_setting_hostname_get_type; + nm_setting_ovs_external_ids_check_key; + nm_setting_ovs_external_ids_check_val; + nm_setting_ovs_external_ids_get_data; + nm_setting_ovs_external_ids_get_data_keys; + nm_setting_ovs_external_ids_get_type; + nm_setting_ovs_external_ids_new; + nm_setting_ovs_external_ids_set_data; + nm_setting_veth_get_peer; + nm_setting_veth_get_type; + nm_setting_veth_new; + nm_utils_print; +} libnm_1_28_0; diff --git a/libnm/meson.build b/libnm/meson.build index d3991ab19c..abdcc1d325 100644 --- a/libnm/meson.build +++ b/libnm/meson.build @@ -40,6 +40,7 @@ libnm_headers = files( 'nm-device-ppp.h', 'nm-device-team.h', 'nm-device-tun.h', + 'nm-device-veth.h', 'nm-device-vlan.h', 'nm-device-vrf.h', 'nm-device-vxlan.h', @@ -106,6 +107,7 @@ libnm_sources = files( 'nm-device-ppp.c', 'nm-device-team.c', 'nm-device-tun.c', + 'nm-device-veth.c', 'nm-device-vlan.c', 'nm-device-vrf.c', 'nm-device-vxlan.c', @@ -138,6 +140,7 @@ deps = [ libnmdbus_dep, libnm_libnm_core_intern_dep, libnm_nm_default_dep, + libnm_keyfile_dep, libnm_udev_aux_dep, libudev_dep, ] @@ -153,6 +156,7 @@ liblibnm = static_library( links = [ liblibnm, libnm_core, + libnm_keyfile, libnmdbus, libnm_systemd_logging_stub, libnm_utils_base, @@ -200,7 +204,7 @@ if enable_introspection libnm_gir = gnome.generate_gir( libnm, - sources: libnm_core_sources + libnm_core_headers + libnm_core_enum_sources + libnm_sources + libnm_headers + libnm_enum_sources + [nm_version_macro_header], + sources: libnm_core_sources + nm_keyfile_source + libnm_core_headers + libnm_core_enum_sources + libnm_sources + libnm_headers + libnm_enum_sources + [nm_version_macro_header], includes: 'Gio-2.0', nsversion: nm_gir_version, namespace: 'NM', diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index 5e23bc52fa..bde3ddc17b 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -472,7 +472,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_accesspoint = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_ACCESS_POINT, nm_access_point_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("Flags", PROP_FLAGS, NMAccessPoint, _priv.flags), NML_DBUS_META_PROPERTY_INIT_U("Frequency", PROP_FREQUENCY, NMAccessPoint, _priv.frequency), diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index c80e466325..2880a769bc 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -542,7 +542,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_connection_active = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_ACTIVE_CONNECTION, nm_active_connection_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_O_PROP("Connection", PROP_CONNECTION, diff --git a/libnm/nm-autoptr.h b/libnm/nm-autoptr.h index 93be5464b9..ca70a6ca49 100644 --- a/libnm/nm-autoptr.h +++ b/libnm/nm-autoptr.h @@ -53,6 +53,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceOvsPort, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDevicePpp, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceTeam, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceTun, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVeth, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVlan, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceVxlan, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMDeviceWifi, g_object_unref) @@ -98,6 +99,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTeam, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTeamPort, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingTun, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingUser, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVeth, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVlan, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVpn, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(NMSettingVxlan, g_object_unref) diff --git a/libnm/nm-checkpoint.c b/libnm/nm-checkpoint.c index 7439a96c1e..3ab2b3a5f8 100644 --- a/libnm/nm-checkpoint.c +++ b/libnm/nm-checkpoint.c @@ -128,7 +128,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_checkpoint = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_CHECKPOINT, nm_checkpoint_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_X("Created", PROP_CREATED, NMCheckpoint, _priv.created), NML_DBUS_META_PROPERTY_INIT_AO_PROP("Devices", diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 1c2c2dd792..ee4c0cff17 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -482,17 +482,17 @@ _nm_client_new_error_nm_not_cached(void) } static void -_nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer data) +_nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer user_data) { GAsyncReadyCallback callback; - gpointer user_data; + gpointer callback_user_data; gs_unref_object GObject *context_busy_watcher = NULL; gpointer obfuscated_self_ptr; gpointer log_call_counter_ptr; - nm_utils_user_data_unpack(data, + nm_utils_user_data_unpack(user_data, &callback, - &user_data, + &callback_user_data, &context_busy_watcher, &obfuscated_self_ptr, &log_call_counter_ptr); @@ -502,7 +502,7 @@ _nm_client_dbus_call_simple_cb(GObject *source, GAsyncResult *result, gpointer d (guint64) GPOINTER_TO_SIZE(obfuscated_self_ptr), GPOINTER_TO_SIZE(log_call_counter_ptr)); - callback(source, result, user_data); + callback(source, result, callback_user_data); } void @@ -1166,7 +1166,7 @@ nml_dbus_object_iface_data_get(NMLDBusObject *dbobj, count++; } } else { - nm_c_list_for_each_entry_prev (db_iface_data, &dbobj->iface_lst_head, iface_lst) { + c_list_for_each_entry_prev (db_iface_data, &dbobj->iface_lst_head, iface_lst) { if (db_iface_data->dbus_iface_is_wellknown) break; if (db_iface_data->iface_removed) @@ -2694,7 +2694,7 @@ _obj_handle_dbus_changes(NMClient *self, NMLDBusObject *dbobj) nml_dbus_object_set_obj_state(dbobj, NML_DBUS_OBJ_STATE_WITH_NMOBJ_READY, self); } else { GType gtype = G_TYPE_NONE; - NMLDBusMetaInteracePrio curr_prio = NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW - 1; + NMLDBusMetaInteracePrio curr_prio = NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10 - 1; c_list_for_each_entry (db_iface_data, &dbobj->iface_lst_head, iface_lst) { nm_assert(!db_iface_data->iface_removed); diff --git a/libnm/nm-client.h b/libnm/nm-client.h index 86e9486e29..befd454f96 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -480,6 +480,11 @@ void nm_client_dbus_set_property(NMClient * client, NM_AVAILABLE_IN_1_24 gboolean nm_client_dbus_set_property_finish(NMClient *client, GAsyncResult *result, GError **error); +/*****************************************************************************/ + +NM_AVAILABLE_IN_1_30 +void nm_utils_print(int output_mode, const char *msg); + G_END_DECLS #endif /* __NM_CLIENT_H__ */ diff --git a/libnm/nm-device-6lowpan.c b/libnm/nm-device-6lowpan.c index 4cf29c14df..d3dc6d48da 100644 --- a/libnm/nm-device-6lowpan.c +++ b/libnm/nm-device-6lowpan.c @@ -94,7 +94,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_lowpan = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_6LOWPAN, nm_device_6lowpan_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c index 1cfc8652a8..2a29b61829 100644 --- a/libnm/nm-device-adsl.c +++ b/libnm/nm-device-adsl.c @@ -100,7 +100,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_adsl = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_ADSL, nm_device_adsl_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceAdsl, _priv.carrier), ), ); diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c index b37948d0db..3ea61433fc 100644 --- a/libnm/nm-device-bond.c +++ b/libnm/nm-device-bond.c @@ -155,7 +155,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bond = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_BOND, nm_device_bond_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceBond, _priv.carrier), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c index ef889d515e..fcb071e69e 100644 --- a/libnm/nm-device-bridge.c +++ b/libnm/nm-device-bridge.c @@ -149,7 +149,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bridge = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_BRIDGE, nm_device_bridge_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceBridge, _priv.carrier), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c index 960ac46936..ef6cc869f0 100644 --- a/libnm/nm-device-bt.c +++ b/libnm/nm-device-bt.c @@ -218,7 +218,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_bluetooth = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, nm_device_bt_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("BtCapabilities", PROP_BT_CAPABILITIES, diff --git a/libnm/nm-device-dummy.c b/libnm/nm-device-dummy.c index c5534a0e63..90e9b466fc 100644 --- a/libnm/nm-device-dummy.c +++ b/libnm/nm-device-dummy.c @@ -93,7 +93,7 @@ nm_device_dummy_init(NMDeviceDummy *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_dummy = NML_DBUS_META_IFACE_INIT( NM_DBUS_INTERFACE_DEVICE_DUMMY, nm_device_dummy_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c index f831abc499..bf4a36fee0 100644 --- a/libnm/nm-device-ethernet.c +++ b/libnm/nm-device-ethernet.c @@ -8,11 +8,14 @@ #include "nm-device-ethernet.h" +#include "nm-libnm-utils.h" #include "nm-setting-connection.h" #include "nm-setting-wired.h" #include "nm-setting-pppoe.h" +#include "nm-setting-veth.h" #include "nm-utils.h" #include "nm-object-private.h" +#include "nm-device-veth.h" /*****************************************************************************/ @@ -21,26 +24,17 @@ NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PERM_HW_ADDRESS, PROP_CARRIER, PROP_S390_SUBCHANNELS, ); -typedef struct { +typedef struct _NMDeviceEthernetPrivate { char ** s390_subchannels; char * perm_hw_address; guint32 speed; bool carrier; } NMDeviceEthernetPrivate; -struct _NMDeviceEthernet { - NMDevice parent; - NMDeviceEthernetPrivate _priv; -}; - -struct _NMDeviceEthernetClass { - NMDeviceClass parent; -}; - G_DEFINE_TYPE(NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE) #define NM_DEVICE_ETHERNET_GET_PRIVATE(self) \ - _NM_GET_PRIVATE(self, NMDeviceEthernet, NM_IS_DEVICE_ETHERNET, NMObject, NMDevice) + _NM_GET_PRIVATE_PTR(self, NMDeviceEthernet, NM_IS_DEVICE_ETHERNET, NMObject) /*****************************************************************************/ @@ -181,9 +175,12 @@ connection_compatible(NMDevice *device, NMConnection *connection, GError **error ->connection_compatible(device, connection, error)) return FALSE; - if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME)) { + if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME) + || nm_connection_is_type(connection, NM_SETTING_WIRED_SETTING_NAME) + || (nm_connection_is_type(connection, NM_SETTING_VETH_SETTING_NAME) + && NM_IS_DEVICE_VETH(device))) { /* NOP */ - } else if (!nm_connection_is_type(connection, NM_SETTING_WIRED_SETTING_NAME)) { + } else { g_set_error_literal(error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, @@ -271,7 +268,13 @@ get_setting_type(NMDevice *device) static void nm_device_ethernet_init(NMDeviceEthernet *device) -{} +{ + NMDeviceEthernetPrivate *priv; + + priv = G_TYPE_INSTANCE_GET_PRIVATE(device, NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetPrivate); + + device->_priv = priv; +} static void finalize(GObject *object) @@ -309,38 +312,34 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) } } -/* TODO: implemented Veth. */ -const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_veth = NML_DBUS_META_IFACE_INIT( - NM_DBUS_INTERFACE_DEVICE_VETH, - NULL, - NML_DBUS_META_INTERFACE_PRIO_NONE, - NML_DBUS_META_IFACE_DBUS_PROPERTIES(NML_DBUS_META_PROPERTY_INIT_TODO("Peer", "o"), ), ); - const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wired = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_WIRED, nm_device_ethernet_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( - NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceEthernet, _priv.carrier), + NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceEthernetPrivate, carrier), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, "s", _nm_device_notify_update_prop_hw_address), NML_DBUS_META_PROPERTY_INIT_S("PermHwAddress", PROP_PERM_HW_ADDRESS, - NMDeviceEthernet, - _priv.perm_hw_address), + NMDeviceEthernetPrivate, + perm_hw_address), NML_DBUS_META_PROPERTY_INIT_AS("S390Subchannels", PROP_S390_SUBCHANNELS, - NMDeviceEthernet, - _priv.s390_subchannels), - NML_DBUS_META_PROPERTY_INIT_U("Speed", PROP_SPEED, NMDeviceEthernet, _priv.speed), ), ); + NMDeviceEthernetPrivate, + s390_subchannels), + NML_DBUS_META_PROPERTY_INIT_U("Speed", PROP_SPEED, NMDeviceEthernetPrivate, speed), ), + .base_struct_offset = G_STRUCT_OFFSET(NMDeviceEthernet, _priv), ); static void -nm_device_ethernet_class_init(NMDeviceEthernetClass *eth_class) +nm_device_ethernet_class_init(NMDeviceEthernetClass *klass) { - GObjectClass * object_class = G_OBJECT_CLASS(eth_class); - NMDeviceClass *device_class = NM_DEVICE_CLASS(eth_class); + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMDeviceClass *device_class = NM_DEVICE_CLASS(klass); + + g_type_class_add_private(klass, sizeof(NMDeviceEthernetPrivate)); object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c index 9e2f543cea..f27fa2b7f9 100644 --- a/libnm/nm-device-generic.c +++ b/libnm/nm-device-generic.c @@ -133,7 +133,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_generic = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_GENERIC, nm_device_generic_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c index bac15af767..f254ecef87 100644 --- a/libnm/nm-device-infiniband.c +++ b/libnm/nm-device-infiniband.c @@ -143,7 +143,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_infiniband = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_INFINIBAND, nm_device_infiniband_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceInfiniband, _priv.carrier), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", diff --git a/libnm/nm-device-ip-tunnel.c b/libnm/nm-device-ip-tunnel.c index 84a1cdcddf..acd8771f16 100644 --- a/libnm/nm-device-ip-tunnel.c +++ b/libnm/nm-device-ip-tunnel.c @@ -346,7 +346,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_iptunnel = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL, nm_device_ip_tunnel_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_Y("EncapsulationLimit", PROP_ENCAPSULATION_LIMIT, diff --git a/libnm/nm-device-macsec.c b/libnm/nm-device-macsec.c index 78b6863029..11cbd71bff 100644 --- a/libnm/nm-device-macsec.c +++ b/libnm/nm-device-macsec.c @@ -387,7 +387,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macsec = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_MACSEC, nm_device_macsec_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_T("CipherSuite", PROP_CIPHER_SUITE, diff --git a/libnm/nm-device-macvlan.c b/libnm/nm-device-macvlan.c index ad5f8b953d..bdfdfcf889 100644 --- a/libnm/nm-device-macvlan.c +++ b/libnm/nm-device-macvlan.c @@ -210,7 +210,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_macvlan = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_MACVLAN, nm_device_macvlan_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_S("Mode", PROP_MODE, NMDeviceMacvlan, _priv.mode), NML_DBUS_META_PROPERTY_INIT_B("NoPromisc", diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c index a4493dfe4f..3d04094ec4 100644 --- a/libnm/nm-device-modem.c +++ b/libnm/nm-device-modem.c @@ -262,7 +262,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_modem = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_MODEM, nm_device_modem_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_S("Apn", PROP_APN, NMDeviceModem, _priv.apn), NML_DBUS_META_PROPERTY_INIT_U("CurrentCapabilities", diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c index a9bc85a6e8..af821b5572 100644 --- a/libnm/nm-device-olpc-mesh.c +++ b/libnm/nm-device-olpc-mesh.c @@ -139,7 +139,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_olpcmesh = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_OLPC_MESH, nm_device_olpc_mesh_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("ActiveChannel", PROP_ACTIVE_CHANNEL, diff --git a/libnm/nm-device-ovs-bridge.c b/libnm/nm-device-ovs-bridge.c index faad9b70e4..2b7b28c4bd 100644 --- a/libnm/nm-device-ovs-bridge.c +++ b/libnm/nm-device-ovs-bridge.c @@ -126,7 +126,7 @@ nm_device_ovs_bridge_init(NMDeviceOvsBridge *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsbridge = NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE, nm_device_ovs_bridge_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_AO_PROP("Slaves", PROP_SLAVES, diff --git a/libnm/nm-device-ovs-interface.c b/libnm/nm-device-ovs-interface.c index 7ed55c798e..b3b1deed27 100644 --- a/libnm/nm-device-ovs-interface.c +++ b/libnm/nm-device-ovs-interface.c @@ -76,7 +76,7 @@ nm_device_ovs_interface_init(NMDeviceOvsInterface *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsinterface = NML_DBUS_META_IFACE_INIT(NM_DBUS_INTERFACE_DEVICE_OVS_INTERFACE, nm_device_ovs_interface_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, ); + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, ); static void nm_device_ovs_interface_class_init(NMDeviceOvsInterfaceClass *ovs_interface_class) diff --git a/libnm/nm-device-ovs-port.c b/libnm/nm-device-ovs-port.c index e96337dba6..18c4fe9b13 100644 --- a/libnm/nm-device-ovs-port.c +++ b/libnm/nm-device-ovs-port.c @@ -126,7 +126,7 @@ nm_device_ovs_port_init(NMDeviceOvsPort *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ovsport = NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_OVS_PORT, nm_device_ovs_port_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_AO_PROP("Slaves", PROP_SLAVES, diff --git a/libnm/nm-device-ppp.c b/libnm/nm-device-ppp.c index fff2f7af98..da29a7120b 100644 --- a/libnm/nm-device-ppp.c +++ b/libnm/nm-device-ppp.c @@ -30,7 +30,7 @@ nm_device_ppp_init(NMDevicePpp *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_ppp = NML_DBUS_META_IFACE_INIT(NM_DBUS_INTERFACE_DEVICE_PPP, nm_device_ppp_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, ); + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, ); static void nm_device_ppp_class_init(NMDevicePppClass *klass) diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c index 9a1e9f1f7e..25f28d17bf 100644 --- a/libnm/nm-device-team.c +++ b/libnm/nm-device-team.c @@ -177,7 +177,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_team = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_TEAM, nm_device_team_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceTeam, _priv.carrier), NML_DBUS_META_PROPERTY_INIT_S("Config", PROP_CONFIG, NMDeviceTeam, _priv.config), diff --git a/libnm/nm-device-tun.c b/libnm/nm-device-tun.c index 35f939efb0..a14a875c05 100644 --- a/libnm/nm-device-tun.c +++ b/libnm/nm-device-tun.c @@ -275,7 +275,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_tun = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_TUN, nm_device_tun_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_X("Group", PROP_GROUP, NMDeviceTun, _priv.group), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", diff --git a/libnm/nm-device-veth.c b/libnm/nm-device-veth.c new file mode 100644 index 0000000000..9f00cd8a6e --- /dev/null +++ b/libnm/nm-device-veth.c @@ -0,0 +1,124 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-device-veth.h" + +#include "nm-setting-connection.h" +#include "nm-setting-veth.h" +#include "nm-setting-wired.h" +#include "nm-utils.h" +#include "nm-device-ethernet.h" +#include "nm-object-private.h" + +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_PEER, ); + +typedef struct { + NMLDBusPropertyO peer; +} NMDeviceVethPrivate; + +struct _NMDeviceVeth { + NMDeviceEthernet parent; + NMDeviceVethPrivate _priv; +}; + +struct _NMDeviceVethClass { + NMDeviceEthernetClass parent; +}; + +G_DEFINE_TYPE(NMDeviceVeth, nm_device_veth, NM_TYPE_DEVICE_ETHERNET) + +#define NM_DEVICE_VETH_GET_PRIVATE(self) \ + _NM_GET_PRIVATE(self, NMDeviceVeth, NM_IS_DEVICE_VETH, NMObject, NMDevice) + +/*****************************************************************************/ + +/** + * nm_device_veth_get_peer: + * @device: a #NMDeviceVeth + * + * Returns: (transfer none): the device's peer device + * + * Since: 1.30 + **/ +NMDevice * +nm_device_veth_get_peer(NMDeviceVeth *device) +{ + g_return_val_if_fail(NM_IS_DEVICE_VETH(device), FALSE); + + return nml_dbus_property_o_get_obj(&NM_DEVICE_VETH_GET_PRIVATE(device)->peer); +} + +static GType +get_setting_type(NMDevice *device) +{ + return NM_TYPE_SETTING_VETH; +} + +/*****************************************************************************/ + +static void +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) +{ + NMDeviceVeth *device = NM_DEVICE_VETH(object); + + switch (prop_id) { + case PROP_PEER: + g_value_set_object(value, nm_device_veth_get_peer(device)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } +} + +static void +nm_device_veth_init(NMDeviceVeth *device) +{} + +const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_veth = + NML_DBUS_META_IFACE_INIT_PROP(NM_DBUS_INTERFACE_DEVICE_VETH, + nm_device_veth_get_type, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20, + NML_DBUS_META_IFACE_DBUS_PROPERTIES( + NML_DBUS_META_PROPERTY_INIT_O_PROP("Peer", + PROP_PEER, + NMDeviceVeth, + _priv.peer, + nm_device_get_type), ), ); + +static void +nm_device_veth_class_init(NMDeviceVethClass *klass) +{ + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMObjectClass *nm_object_class = NM_OBJECT_CLASS(klass); + NMDeviceClass *device_class = NM_DEVICE_CLASS(klass); + + object_class->get_property = get_property; + + _NM_OBJECT_CLASS_INIT_PRIV_PTR_DIRECT(nm_object_class, NMDeviceVeth); + + _NM_OBJECT_CLASS_INIT_PROPERTY_O_FIELDS_1(nm_object_class, NMDeviceVethPrivate, peer); + + device_class->get_setting_type = get_setting_type; + + /** + * NMDeviceVeth:peer: + * + * The device's peer device. + * + * Since: 1.30 + **/ + obj_properties[PROP_PEER] = g_param_spec_object(NM_DEVICE_VETH_PEER, + "", + "", + NM_TYPE_DEVICE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + _nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_veth); +} diff --git a/libnm/nm-device-veth.h b/libnm/nm-device-veth.h new file mode 100644 index 0000000000..8aef13964c --- /dev/null +++ b/libnm/nm-device-veth.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/* + * Copyright (C) 2020 Red Hat, Inc. + */ + +#ifndef __NM_DEVICE_VETH_H__ +#define __NM_DEVICE_VETH_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_VETH (nm_device_veth_get_type()) +#define NM_DEVICE_VETH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_DEVICE_VETH, NMDeviceVeth)) +#define NM_DEVICE_VETH_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_DEVICE_VETH, NMDeviceVethClass)) +#define NM_IS_DEVICE_VETH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_DEVICE_VETH)) +#define NM_IS_DEVICE_VETH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_DEVICE_VETH)) +#define NM_DEVICE_VETH_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DEVICE_VETH, NMDeviceVethClass)) + +#define NM_DEVICE_VETH_PEER "peer" + +/** + * NMDeviceVeth: + */ +typedef struct _NMDeviceVethClass NMDeviceVethClass; + +NM_AVAILABLE_IN_1_30 +GType nm_device_veth_get_type(void); + +NM_AVAILABLE_IN_1_30 +NMDevice *nm_device_veth_get_peer(NMDeviceVeth *device); + +G_END_DECLS + +#endif /* __NM_DEVICE_VETH_H__ */ diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c index 07ea02f7dc..90f879ecb6 100644 --- a/libnm/nm-device-vlan.c +++ b/libnm/nm-device-vlan.c @@ -188,7 +188,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vlan = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_VLAN, nm_device_vlan_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_B("Carrier", PROP_CARRIER, NMDeviceVlan, _priv.carrier), NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", diff --git a/libnm/nm-device-vrf.c b/libnm/nm-device-vrf.c index 0c00c525f0..b08b0e9e25 100644 --- a/libnm/nm-device-vrf.c +++ b/libnm/nm-device-vrf.c @@ -108,7 +108,7 @@ nm_device_vrf_init(NMDeviceVrf *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vrf = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_VRF, nm_device_vrf_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("Table", PROP_TABLE, NMDeviceVrf, _priv.table), ), ); diff --git a/libnm/nm-device-vxlan.c b/libnm/nm-device-vxlan.c index d4a0e2c0ef..63ccd729da 100644 --- a/libnm/nm-device-vxlan.c +++ b/libnm/nm-device-vxlan.c @@ -486,7 +486,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_vxlan = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_VXLAN, nm_device_vxlan_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("Ageing", PROP_AGEING, NMDeviceVxlan, _priv.ageing), NML_DBUS_META_PROPERTY_INIT_Q("DstPort", PROP_DST_PORT, NMDeviceVxlan, _priv.dst_port), diff --git a/libnm/nm-device-wifi-p2p.c b/libnm/nm-device-wifi-p2p.c index dcf5f3e52d..eb03126619 100644 --- a/libnm/nm-device-wifi-p2p.c +++ b/libnm/nm-device-wifi-p2p.c @@ -325,7 +325,7 @@ nm_device_wifi_p2p_init(NMDeviceWifiP2P *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wifip2p = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_WIFI_P2P, nm_device_wifi_p2p_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index a84492f24c..df7d26316d 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -604,7 +604,7 @@ finalize(GObject *object) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wireless = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_WIRELESS, nm_device_wifi_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_AO_PROP("AccessPoints", PROP_ACCESS_POINTS, diff --git a/libnm/nm-device-wireguard.c b/libnm/nm-device-wireguard.c index 43febf4cb9..5427075661 100644 --- a/libnm/nm-device-wireguard.c +++ b/libnm/nm-device-wireguard.c @@ -131,7 +131,7 @@ finalize(GObject *object) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wireguard = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DEVICE_WIREGUARD, nm_device_wireguard_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("FwMark", PROP_FWMARK, NMDeviceWireGuard, _priv.fwmark), NML_DBUS_META_PROPERTY_INIT_Q("ListenPort", diff --git a/libnm/nm-device-wpan.c b/libnm/nm-device-wpan.c index 83597c62e5..cfda7b0da5 100644 --- a/libnm/nm-device-wpan.c +++ b/libnm/nm-device-wpan.c @@ -76,7 +76,7 @@ nm_device_wpan_init(NMDeviceWpan *device) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_device_wpan = NML_DBUS_META_IFACE_INIT( NM_DBUS_INTERFACE_DEVICE_WPAN, nm_device_wpan_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("HwAddress", 0, diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c index 1b8a8d154d..7f24ebd49a 100644 --- a/libnm/nm-dhcp-config.c +++ b/libnm/nm-dhcp-config.c @@ -102,7 +102,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp4config = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DHCP4_CONFIG, nm_dhcp4_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("Options", PROP_OPTIONS, @@ -113,7 +113,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp4config = NML_DBUS_META_IFACE const NMLDBusMetaIface _nml_dbus_meta_iface_nm_dhcp6config = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_DHCP6_CONFIG, nm_dhcp6_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("Options", PROP_OPTIONS, diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c index 5877e2121c..0048fa1137 100644 --- a/libnm/nm-ip-config.c +++ b/libnm/nm-ip-config.c @@ -316,7 +316,7 @@ finalize(GObject *object) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_IP4_CONFIG, nm_ip4_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("AddressData", PROP_ADDRESSES, @@ -364,7 +364,7 @@ const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip4config = NML_DBUS_META_IFACE_I const NMLDBusMetaIface _nml_dbus_meta_iface_nm_ip6config = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_IP6_CONFIG, nm_ip6_config_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_FCN("AddressData", PROP_ADDRESSES, diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index 9c27f64de8..775aebf803 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -869,3 +869,42 @@ nm_utils_g_param_spec_is_default(const GParamSpec *pspec) * strictly asserts and only support argument types that we expect. */ g_return_val_if_reached(FALSE); } + +/*****************************************************************************/ + +/** + * nm_utils_print: + * @output_mode: if 1 it uses g_print(). If 2, it uses g_printerr(). + * If 0, it uses either g_print() or g_printerr(), depending + * on LIBNM_CLIENT_DEBUG (and the "stdout" flag). + * @msg: the message to print. The function does not append + * a trailing newline. + * + * The only purpose of this function is to give access to g_print() + * or g_printerr() from pygobject. libnm can do debug logging by + * setting LIBNM_CLIENT_DEBUG and uses thereby g_printerr() or + * g_print(). A plain "print()" function in python is not in sync + * with these functions (it implements additional buffering). By + * using nm_utils_print(), the same logging mechanisms can be used. + * + * Since: 1.30 + */ +void +nm_utils_print(int output_mode, const char *msg) +{ + gboolean use_stdout; + + g_return_if_fail(msg); + + if (output_mode == 0) { + nml_dbus_log_enabled_full(NML_DBUS_LOG_LEVEL_ANY, &use_stdout); + output_mode = use_stdout ? 1 : 2; + } + + if (output_mode == 1) + g_print("%s", msg); + else if (output_mode == 2) + g_printerr("%s", msg); + else + g_return_if_reached(); +} diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 9582e1d8d9..86e7b304b1 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -7,6 +7,7 @@ #define __NM_LIBNM_UTILS_H__ #include "c-list/src/c-list.h" +#include "nm-device.h" #include "nm-glib-aux/nm-ref-string.h" #include "nm-glib-aux/nm-logging-fwd.h" #include "nm-types.h" @@ -220,11 +221,12 @@ typedef enum { /* See comments below for NMLDBusMetaIface.interface_prio. * * Higher numbers means more important to detect the GObject type. */ - NML_DBUS_META_INTERFACE_PRIO_NONE = 0, - NML_DBUS_META_INTERFACE_PRIO_NMCLIENT = 1, - NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE = 2, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW = 3, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH = 4, + NML_DBUS_META_INTERFACE_PRIO_NONE = 0, + NML_DBUS_META_INTERFACE_PRIO_NMCLIENT = 1, + NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE = 2, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10 = 3, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20 = 4, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30 = 5, } NMLDBusMetaInteracePrio; /*****************************************************************************/ @@ -514,7 +516,7 @@ struct _NMLDBusMetaIface { * NetworkManager's API does not add/remove interfaces after exporting the object the * first time, so in practice each D-Bus object is expected to have a suitable D-Bus * interface (and only determining interface, which doesn't change). Those interfaces have - * priority %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH. + * priority %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30. * * (*) note that nothing bad would happen if a faulty NetworkManager would violate that. * Of course, something would not work correctly, but the D-Bus interface we find is unexpected @@ -522,7 +524,7 @@ struct _NMLDBusMetaIface { * * One exception is "org.freedesktop.NetworkManager.Connection.Active". This can either * be a NMActiveConnection or a NMVpnConnection. Hence, this profile has priority - * %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW, and depending on whether there is + * %NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10, and depending on whether there is * a "org.freedesktop.NetworkManager.VPN.Connection" (with high priority), we create * one or the other type. */ @@ -816,6 +818,19 @@ struct _NMDeviceClass { /*****************************************************************************/ +struct _NMDeviceEthernetPrivate; + +struct _NMDeviceEthernet { + NMDevice parent; + struct _NMDeviceEthernetPrivate *_priv; +}; + +struct _NMDeviceEthernetClass { + NMDeviceClass parent; +}; + +/*****************************************************************************/ + struct _NMActiveConnectionPrivate; struct _NMActiveConnection { diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index 63ffbf1a04..f6dbe36ae2 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -746,7 +746,7 @@ dispose(GObject *object) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_settings_connection = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_SETTINGS_CONNECTION, nm_remote_connection_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_S("Filename", PROP_FILENAME, diff --git a/libnm/nm-types.h b/libnm/nm-types.h index 099002bd9f..3445418cde 100644 --- a/libnm/nm-types.h +++ b/libnm/nm-types.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2014 - 2018 Red Hat, Inc. */ @@ -36,6 +36,7 @@ typedef struct _NMDeviceOvsPort NMDeviceOvsPort; typedef struct _NMDevicePpp NMDevicePpp; typedef struct _NMDeviceTeam NMDeviceTeam; typedef struct _NMDeviceTun NMDeviceTun; +typedef struct _NMDeviceVeth NMDeviceVeth; typedef struct _NMDeviceVlan NMDeviceVlan; typedef struct _NMDeviceVrf NMDeviceVrf; typedef struct _NMDeviceVxlan NMDeviceVxlan; diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c index d41d674917..b308cfee1e 100644 --- a/libnm/nm-vpn-connection.c +++ b/libnm/nm-vpn-connection.c @@ -159,7 +159,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_vpn_connection = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_VPN_CONNECTION, nm_vpn_connection_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_S("Banner", PROP_BANNER, NMVpnConnection, _priv.banner), NML_DBUS_META_PROPERTY_INIT_U("VpnState", diff --git a/libnm/nm-wifi-p2p-peer.c b/libnm/nm-wifi-p2p-peer.c index c250342e46..7ee1f3ac4a 100644 --- a/libnm/nm-wifi-p2p-peer.c +++ b/libnm/nm-wifi-p2p-peer.c @@ -402,7 +402,7 @@ finalize(GObject *object) const NMLDBusMetaIface _nml_dbus_meta_iface_nm_wifip2ppeer = NML_DBUS_META_IFACE_INIT_PROP( NM_DBUS_INTERFACE_WIFI_P2P_PEER, nm_wifi_p2p_peer_get_type, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, NML_DBUS_META_IFACE_DBUS_PROPERTIES( NML_DBUS_META_PROPERTY_INIT_U("Flags", PROP_FLAGS, NMWifiP2PPeer, _priv.flags), NML_DBUS_META_PROPERTY_INIT_IGNORE("Groups", "as"), diff --git a/libnm/tests/test-libnm.c b/libnm/tests/test-libnm.c index 6f89a82334..27f0a7cc01 100644 --- a/libnm/tests/test-libnm.c +++ b/libnm/tests/test-libnm.c @@ -2824,8 +2824,9 @@ test_nml_dbus_meta(void) g_assert(NM_IN_SET((NMLDBusMetaInteracePrio) mif->interface_prio, NML_DBUS_META_INTERFACE_PRIO_NMCLIENT, NML_DBUS_META_INTERFACE_PRIO_PARENT_TYPE, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH)); + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_20, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30)); g_assert(mif->get_type_fcn); gtype = mif->get_type_fcn(); @@ -2847,22 +2848,85 @@ test_nml_dbus_meta(void) if (klass) { if (NM_IS_OBJECT_CLASS(klass)) { - NMObjectClass * nm_object_class = NM_OBJECT_CLASS(klass); - const _NMObjectClassFieldInfo *p_prev; - const _NMObjectClassFieldInfo *p; - - p_prev = NULL; - for (p = nm_object_class->property_o_info; p; p_prev = p, p = p->parent) { - g_assert(p->num > 0); - g_assert(NM_IS_OBJECT_CLASS(p->klass)); - g_assert(g_type_is_a(gtype, G_TYPE_FROM_CLASS(p->klass))); - g_assert(p->klass->property_o_info == p); - if (p_prev) { - g_assert(g_type_is_a(G_TYPE_FROM_CLASS(p_prev->klass), - G_TYPE_FROM_CLASS(p->klass))); - g_assert(p_prev->klass != p->klass); + NMObjectClass *nm_object_class = NM_OBJECT_CLASS(klass); + + if (nm_object_class->property_o_info || nm_object_class->property_ao_info) { + int ii; + + for (ii = 0; ii < 2; ii++) { + const _NMObjectClassFieldInfo *p_prev = NULL; + const _NMObjectClassFieldInfo *p0 = ii == 0 + ? nm_object_class->property_o_info + : nm_object_class->property_ao_info; + const _NMObjectClassFieldInfo *p; + + for (p = p0; p; p = p->parent) { + GType parent_gtype; + NMObjectClass *parent_klass; + + g_assert(p->num > 0); + g_assert(NM_IS_OBJECT_CLASS(p->klass)); + g_assert(g_type_is_a(gtype, G_TYPE_FROM_CLASS(p->klass))); + if (ii == 0) + g_assert(p->klass->property_o_info == p); + else + g_assert(p->klass->property_ao_info == p); + g_assert_cmpint(p->klass->priv_ptr_offset, >, 0); + if (p_prev) { + g_assert(g_type_is_a(G_TYPE_FROM_CLASS(p_prev->klass), + G_TYPE_FROM_CLASS(p->klass))); + g_assert(p_prev->klass != p->klass); + g_assert_cmpint(p_prev->klass->priv_ptr_offset, + >, + p->klass->priv_ptr_offset); + g_assert_cmpint(p->klass->priv_ptr_indirect, ==, TRUE); + } + + parent_gtype = g_type_parent(G_TYPE_FROM_CLASS(p->klass)); + g_assert(g_type_is_a(parent_gtype, NM_TYPE_OBJECT)); + parent_klass = g_type_class_peek(parent_gtype); + g_assert(NM_IS_OBJECT_CLASS(parent_klass)); + if (parent_gtype == NM_TYPE_OBJECT) { + g_assert_cmpint(parent_klass->priv_ptr_offset, ==, 0); + g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, FALSE); + g_assert(!p->parent); + } else { + if (parent_klass->priv_ptr_offset == 0) { + g_assert(!parent_klass->property_o_info); + g_assert(!parent_klass->property_ao_info); + g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, FALSE); + g_assert(!p->parent); + } else if (p->klass->priv_ptr_offset + == parent_klass->priv_ptr_offset) { + g_assert(p->klass->property_o_info + == parent_klass->property_o_info); + g_assert(p->klass->property_ao_info + == parent_klass->property_ao_info); + g_assert(p->klass->priv_ptr_indirect + == parent_klass->priv_ptr_indirect); + } else { + g_assert_cmpint(parent_klass->priv_ptr_offset, >, 0); + g_assert_cmpint(parent_klass->priv_ptr_offset, + <, + p->klass->priv_ptr_offset); + g_assert_cmpint(parent_klass->priv_ptr_indirect, ==, TRUE); + g_assert(p->klass->property_o_info + != parent_klass->property_o_info + || p->klass->property_ao_info + != parent_klass->property_ao_info); + } + } + + p_prev = p; + } } + + g_assert_cmpint(nm_object_class->priv_ptr_offset, >, 0); + } else { + g_assert_cmpint(nm_object_class->priv_ptr_offset, ==, 0); + g_assert_cmpint(nm_object_class->priv_ptr_indirect, ==, FALSE); } + } else g_assert(NM_IS_CLIENT_CLASS(klass)); } @@ -3128,172 +3192,172 @@ test_dbus_meta_types(void) { NM_DBUS_INTERFACE_ACCESS_POINT, NM_TYPE_ACCESS_POINT, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_ACTIVE_CONNECTION, NM_TYPE_ACTIVE_CONNECTION, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_LOW, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_10, }, /* otherwise, NM_TYPE_VPN_CONNECTION. */ { NM_DBUS_INTERFACE_DEVICE_6LOWPAN, NM_TYPE_DEVICE_6LOWPAN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_ADSL, NM_TYPE_DEVICE_ADSL, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_BOND, NM_TYPE_DEVICE_BOND, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_BRIDGE, NM_TYPE_DEVICE_BRIDGE, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, NM_TYPE_DEVICE_BT, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_DUMMY, NM_TYPE_DEVICE_DUMMY, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_WIRED, NM_TYPE_DEVICE_ETHERNET, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_GENERIC, NM_TYPE_DEVICE_GENERIC, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_INFINIBAND, NM_TYPE_DEVICE_INFINIBAND, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_IP_TUNNEL, NM_TYPE_DEVICE_IP_TUNNEL, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_MACSEC, NM_TYPE_DEVICE_MACSEC, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_MACVLAN, NM_TYPE_DEVICE_MACVLAN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_MODEM, NM_TYPE_DEVICE_MODEM, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_OLPC_MESH, NM_TYPE_DEVICE_OLPC_MESH, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_OVS_INTERFACE, NM_TYPE_DEVICE_OVS_INTERFACE, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_OVS_PORT, NM_TYPE_DEVICE_OVS_PORT, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_OVS_BRIDGE, NM_TYPE_DEVICE_OVS_BRIDGE, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_WIFI_P2P, NM_TYPE_DEVICE_WIFI_P2P, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_PPP, NM_TYPE_DEVICE_PPP, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_TEAM, NM_TYPE_DEVICE_TEAM, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_TUN, NM_TYPE_DEVICE_TUN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_VLAN, NM_TYPE_DEVICE_VLAN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_WPAN, NM_TYPE_DEVICE_WPAN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_VXLAN, NM_TYPE_DEVICE_VXLAN, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_WIRELESS, NM_TYPE_DEVICE_WIFI, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DEVICE_WIREGUARD, NM_TYPE_DEVICE_WIREGUARD, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DHCP4_CONFIG, NM_TYPE_DHCP4_CONFIG, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_DHCP6_CONFIG, NM_TYPE_DHCP6_CONFIG, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_IP4_CONFIG, NM_TYPE_IP4_CONFIG, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_IP6_CONFIG, NM_TYPE_IP6_CONFIG, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_WIFI_P2P_PEER, NM_TYPE_WIFI_P2P_PEER, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_SETTINGS_CONNECTION, NM_TYPE_REMOTE_CONNECTION, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_SETTINGS, @@ -3308,12 +3372,12 @@ test_dbus_meta_types(void) { NM_DBUS_INTERFACE_VPN_CONNECTION, NM_TYPE_VPN_CONNECTION, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, { NM_DBUS_INTERFACE_CHECKPOINT, NM_TYPE_CHECKPOINT, - NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_HIGH, + NML_DBUS_META_INTERFACE_PRIO_INSTANTIATE_30, }, }; guint i; diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 6b573890f8..79f18e45e9 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -278,18 +278,24 @@ no-auto-default=* this option. An hostname empty or equal to 'localhost', 'localhost6', 'localhost.localdomain' or 'localhost6.localdomain' is considered invalid. </para> - <para><literal>default</literal>: NetworkManager will update the hostname - with the one provided via DHCP on the main connection (the one with a default - route). If not present, the hostname will be updated to the last one set - outside NetworkManager. If it is not valid, NetworkManager will try to recover - the hostname from the reverse lookup of the IP address of the main connection. - If this fails too, the hostname will be set to 'localhost.localdomain'. + <para><literal>default</literal>: NetworkManager will update the + hostname with the one provided via DHCP or reverse DNS lookup of the + IP address on the connection with the default route or on any + connection with the property hostname.only-from-default set to + '<literal>false</literal>'. Connections are considered in order of + increasing value of the <literal>hostname.priority</literal> + property. In case multiple connections have the same priority, + connections activated earlier are considered first. If no hostname can + be determined in such way, the hostname will be updated to the last + one set outside NetworkManager or to 'localhost.localdomain'. </para> - <para><literal>dhcp</literal>: NetworkManager will update the transient hostname - only with information coming from DHCP. No fallback nor reverse lookup will be - performed, but when the dhcp connection providing the hostname is deactivated, - the hostname is reset to the last hostname set outside NetworkManager or - 'localhost' if none valid is there. + <para><literal>dhcp</literal>: this is similar to + '<literal>default</literal>', with the difference that after trying to + get the DHCP hostname, reverse DNS lookup is not done. Note that + selecting this option is equivalent to setting the property + '<literal>hostname.from-dns-lookup</literal>' to + '<literal>false</literal>' globally for all connections in + NetworkManager.conf. </para> <para><literal>none</literal>: NetworkManager will not manage the transient hostname and will never set it. @@ -668,6 +674,18 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth <para>Specify default values for connections. </para> <para> + Such default values are only consulted if the corresponding per-connection property + explicitly allows for that. That means, all these properties correspond to + a property of the connection profile (for example <literal>connection.mud-url</literal>). + Only if the per-profile property is set to a special value that indicates to use the + default, the default value from NetworkManager.conf is consulted. It depends on the + property, which is the special value that indicates fallback to the default, but it + usually is something like empty, unset values or special numeric values like 0 or -1. + That means the effectively used value can first always be configured for each profile, + and these default values only matter if the per-profile values explicitly indicates + to use the default from <literal>NetworkManager.conf</literal>. + </para> + <para> Example: <programlisting> [connection] @@ -680,8 +698,8 @@ ipv6.ip6-privacy=0 Not all properties can be overwritten, only the following properties are supported to have their default values configured (see <link linkend='nm-settings'><citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry></link> for details). - A default value is only consulted if the corresponding per-connection value - explicitly allows for that. + </para> + <para> <!-- The following comment is used by check-config-options.sh, don't remove it. --> <!-- start connection defaults --> <variablelist> @@ -735,6 +753,18 @@ ipv6.ip6-privacy=0 <term><varname>gsm.mtu</varname></term> </varlistentry> <varlistentry> + <term><varname>hostname.from-dhcp</varname></term> + </varlistentry> + <varlistentry> + <term><varname>hostname.from-dns-lookup</varname></term> + </varlistentry> + <varlistentry> + <term><varname>hostname.only-from-default</varname></term> + </varlistentry> + <varlistentry> + <term><varname>hostname.priority</varname></term> + </varlistentry> + <varlistentry> <term><varname>infiniband.mtu</varname></term> <listitem><para>If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or the MTU is left unspecified on activation.</para></listitem> </varlistentry> @@ -1072,8 +1102,25 @@ managed=1 </para> </listitem> </varlistentry> + <varlistentry> + <term><varname>wifi.iwd.autoconnect</varname></term> + <listitem> + <para> + If <literal>wifi.backend</literal> is <literal>iwd</literal>, setting this to + <literal>false</literal> forces IWD's autoconnect mechanism to be disabled for + this device and connections will only be initiated by NetworkManager whether + commaned by a client or automatically. Leaving it <literal>true</literal> (default) + stops NetworkManager from automatically initiating connections and allows + IWD to use its network ranking and scanning logic to decide the best networks + to autoconnect to next. Connections' <literal>autoconnect-priority</literal>, + <literal>autoconnect-retries</literal> settings will be ignored. Other settings + like <literal>permissions</literal> or <literal>multi-connect</literal> may interfere + with IWD connection attempts. + </para> + </listitem> + </varlistentry> <varlistentry id="sriov-num-vfs"> - , <term><varname>sriov-num-vfs</varname></term> + <term><varname>sriov-num-vfs</varname></term> <listitem> <para> Specify the number of virtual functions (VF) to enable diff --git a/man/nmcli.xml b/man/nmcli.xml index e1b2d81b33..b0665efd69 100644 --- a/man/nmcli.xml +++ b/man/nmcli.xml @@ -946,30 +946,71 @@ <option>connection.type</option> property (or use the <option>type</option> alias) to one of known NetworkManager connection types:</para> + <!-- + See also: nm_meta_setting_info_get_base_type_priority(). + + nmcli '-'-complete-args connection add type "" | + sort | + awk ' + /^(bond|bridge|team)-slave$/ { + printf " <listitem><para><literal>%s</literal> (deprecated for ethernet with master)</para></listitem>\n", $0; + next; + } + /^(wifi|ethernet|olpc-mash)$/ { + next; + } + { + alias = ""; + if ($0 == "802-11-wireless") { alias = "wifi"; } + if ($0 == "802-3-ethernet") { alias = "ethernet"; } + if ($0 == "802-11-olpc-mesh") { alias = "olpc-mesh"; } + if (alias != "") { + printf " <listitem><para><literal>%s</literal> (alias <literal>%s</literal>)</para></listitem>\n", $0, alias; + } else { + printf " <listitem><para><literal>%s</literal></para></listitem>\n", $0; + } + } + ' + + --> <itemizedlist spacing='compact'> - <listitem><para><literal>ethernet</literal></para></listitem> - <listitem><para><literal>wifi</literal></para></listitem> - <listitem><para><literal>wimax</literal></para></listitem> - <listitem><para><literal>pppoe</literal></para></listitem> - <listitem><para><literal>gsm</literal></para></listitem> - <listitem><para><literal>cdma</literal></para></listitem> - <listitem><para><literal>infiniband</literal></para></listitem> + <listitem><para><literal>6lowpan</literal></para></listitem> + <listitem><para><literal>802-11-olpc-mesh</literal> (alias <literal>olpc-mesh</literal>)</para></listitem> + <listitem><para><literal>802-11-wireless</literal> (alias <literal>wifi</literal>)</para></listitem> + <listitem><para><literal>802-3-ethernet</literal> (alias <literal>ethernet</literal>)</para></listitem> + <listitem><para><literal>adsl</literal></para></listitem> <listitem><para><literal>bluetooth</literal></para></listitem> - <listitem><para><literal>vlan</literal></para></listitem> <listitem><para><literal>bond</literal></para></listitem> - <listitem><para><literal>bond-slave</literal></para></listitem> - <listitem><para><literal>team</literal></para></listitem> - <listitem><para><literal>team-slave</literal></para></listitem> + <listitem><para><literal>bond-slave</literal> (deprecated for ethernet with master)</para></listitem> <listitem><para><literal>bridge</literal></para></listitem> - <listitem><para><literal>bridge-slave</literal></para></listitem> - <listitem><para><literal>vpn</literal></para></listitem> - <listitem><para><literal>olpc-mesh</literal></para></listitem> - <listitem><para><literal>adsl</literal></para></listitem> - <listitem><para><literal>tun</literal></para></listitem> + <listitem><para><literal>bridge-slave</literal> (deprecated for ethernet with master)</para></listitem> + <listitem><para><literal>cdma</literal></para></listitem> + <listitem><para><literal>dummy</literal></para></listitem> + <listitem><para><literal>generic</literal></para></listitem> + <listitem><para><literal>gsm</literal></para></listitem> + <listitem><para><literal>infiniband</literal></para></listitem> <listitem><para><literal>ip-tunnel</literal></para></listitem> + <listitem><para><literal>macsec</literal></para></listitem> <listitem><para><literal>macvlan</literal></para></listitem> + <listitem><para><literal>olpc-mesh</literal></para></listitem> + <listitem><para><literal>ovs-bridge</literal></para></listitem> + <listitem><para><literal>ovs-dpdk</literal></para></listitem> + <listitem><para><literal>ovs-interface</literal></para></listitem> + <listitem><para><literal>ovs-patch</literal></para></listitem> + <listitem><para><literal>ovs-port</literal></para></listitem> + <listitem><para><literal>pppoe</literal></para></listitem> + <listitem><para><literal>team</literal></para></listitem> + <listitem><para><literal>team-slave</literal> (deprecated for ethernet with master)</para></listitem> + <listitem><para><literal>tun</literal></para></listitem> + <listitem><para><literal>veth</literal></para></listitem> + <listitem><para><literal>vlan</literal></para></listitem> + <listitem><para><literal>vpn</literal></para></listitem> + <listitem><para><literal>vrf</literal></para></listitem> <listitem><para><literal>vxlan</literal></para></listitem> - <listitem><para><literal>dummy</literal></para></listitem> + <listitem><para><literal>wifi-p2p</literal></para></listitem> + <listitem><para><literal>wimax</literal></para></listitem> + <listitem><para><literal>wireguard</literal></para></listitem> + <listitem><para><literal>wpan</literal></para></listitem> </itemizedlist> <para>The most typical uses are described in the <link linkend='examples' endterm='examples.title' /> section.</para> diff --git a/meson.build b/meson.build index 02bfb00036..13dadd4339 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( # - add corresponding NM_VERSION_x_y_z macros in # "shared/nm-version-macros.h.in" # - update number in configure.ac - version: '1.28.0', + version: '1.29.5', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', @@ -746,6 +746,8 @@ if enable_nm_cloud_setup assert(libcurl_dep.found(), 'nm-cloud-setup requires libcurl library. Use -Dnm_cloud_setup=false to disable it') endif +enable_docs = get_option('docs') + more_asserts = get_option('more_asserts') if more_asserts == 'auto' if nm_minor_version % 2 == 0 @@ -796,6 +798,12 @@ else endif endif +test( + 'check-local-gitlab-ci', + find_program(join_paths(source_root, 'tools', 'check-gitlab-ci.sh')), + args: [source_root], +) + # Tests, utilities and documentation tests = get_option('tests') enable_tests = (tests != 'no') @@ -915,8 +923,6 @@ if enable_qt subdir('examples/C/qt') endif -enable_docs = get_option('docs') - if enable_docs assert(enable_introspection, '-Ddocs=true requires -Dintrospection=true') assert(meson.version().version_compare('>= 0.46.0'), '-Ddocs requires meson >= 0.46') diff --git a/po/POTFILES.in b/po/POTFILES.in index ea2eafa3f3..cee590c0cf 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -82,6 +82,7 @@ libnm-core/nm-setting-macvlan.c libnm-core/nm-setting-match.c libnm-core/nm-setting-olpc-mesh.c libnm-core/nm-setting-ovs-bridge.c +libnm-core/nm-setting-ovs-external-ids.c libnm-core/nm-setting-ovs-interface.c libnm-core/nm-setting-ovs-patch.c libnm-core/nm-setting-ovs-port.c @@ -94,6 +95,7 @@ libnm-core/nm-setting-team-port.c libnm-core/nm-setting-team.c libnm-core/nm-setting-tun.c libnm-core/nm-setting-user.c +libnm-core/nm-setting-veth.c libnm-core/nm-setting-vlan.c libnm-core/nm-setting-vrf.c libnm-core/nm-setting-vpn.c @@ -129,6 +131,7 @@ libnm/nm-device-ovs-interface.c libnm/nm-device-ovs-port.c libnm/nm-device-team.c libnm/nm-device-tun.c +libnm/nm-device-veth.c libnm/nm-device-vlan.c libnm/nm-device-vrf.c libnm/nm-device-vxlan.c @@ -164,6 +167,7 @@ src/devices/nm-device-infiniband.c src/devices/nm-device-ip-tunnel.c src/devices/nm-device-macvlan.c src/devices/nm-device-tun.c +src/devices/nm-device-veth.c src/devices/nm-device-vlan.c src/devices/nm-device-vrf.c src/devices/nm-device-vxlan.c @@ -6,13 +6,13 @@ # Lasse Bang Mikkelsen <lbm@fatalerror.dk>, 2005, 06, 07. # Lubomir Rintel <lkundrak@v3.sk>, 2016-2017. #zanata # Thomas Haller <thaller@redhat.com>, 2017. #zanata -# scootergrisen, 2019. +# scootergrisen, 2019-2020. msgid "" msgstr "" "Project-Id-Version: NetworkManager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-09-04 09:54+0200\n" -"PO-Revision-Date: 2019-10-18 03:56+0200\n" +"PO-Revision-Date: 2020-10-18 21:00+0200\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish\n" "Language: da\n" @@ -158,14 +158,13 @@ msgid "access denied" msgstr "adgang nægtet" #: ../clients/cli/common.c:1441 -#, fuzzy msgid "NetworkManager is not running" -msgstr "Status for NetworkManager" +msgstr "NetworkManager kører ikke" #: ../clients/cli/common.c:1467 -#, fuzzy, c-format +#, c-format msgid "Error: error connecting to system bus: %s" -msgstr "Fejl: dÃ¥rlig forbindelsestype: %s" +msgstr "Fejl: fejl ved oprettelse af forbindelse til systembus: %s" #: ../clients/cli/common.c:1493 ../clients/cli/connections.c:67 #: ../clients/cli/connections.c:77 ../clients/cli/devices.c:434 @@ -794,7 +793,7 @@ msgstr "" "\n" #: ../clients/cli/connections.c:1107 -#, fuzzy, c-format +#, c-format msgid "" "Usage: nmcli connection modify { ARGUMENTS | help }\n" "\n" @@ -837,6 +836,10 @@ msgstr "" "'-'-tegnet gør det muligt at fjerne valgte elementer i stedet for hele " "værdien.\n" "\n" +"ARGUMENTER := remove <indstilling>\n" +"\n" +"Fjern en indstilling fra forbindelsesprofilen.\n" +"\n" "Eksempler:\n" "nmcli con mod home-wifi wifi.ssid rakosnicek\n" "nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.2/24, " @@ -846,7 +849,7 @@ msgstr "" "nmcli con mod em1-1 -ipv6.addr \"abbe::cafe/56\"\n" "nmcli con mod bond0 +bond.options mii=500\n" "nmcli con mod bond0 -bond.options downdelay\n" -"\n" +"nmcli con mod em1-1 remove sriov\n" #: ../clients/cli/connections.c:1135 #, c-format @@ -1187,14 +1190,14 @@ msgid "neither a valid connection nor device given" msgstr "hverken en gyldig forbindelse eller enhed angivet" #: ../clients/cli/connections.c:2761 -#, fuzzy, c-format +#, c-format msgid "invalid passwd-file '%s' at line %zd: %s" -msgstr "kunne ikke læse passwd-file '%s': %s" +msgstr "ugyldig passwd-file '%s' pÃ¥ linje %zd: %s" #: ../clients/cli/connections.c:2767 -#, fuzzy, c-format +#, c-format msgid "invalid passwd-file '%s': %s" -msgstr "kunne ikke læse passwd-file '%s': %s" +msgstr "ugyldig passwd-file '%s': %s" #: ../clients/cli/connections.c:2894 ../clients/cli/connections.c:9015 #: ../clients/cli/devices.c:1759 ../clients/cli/devices.c:1807 @@ -1202,9 +1205,9 @@ msgstr "kunne ikke læse passwd-file '%s': %s" #: ../clients/cli/devices.c:3556 ../clients/cli/devices.c:4133 #: ../clients/cli/devices.c:4286 ../clients/cli/devices.c:4506 #: ../clients/cli/devices.c:4680 -#, fuzzy, c-format +#, c-format msgid "Error: invalid extra argument '%s'." -msgstr "Fejl: Ugyldig 'wwan'-parameter: '%s'." +msgstr "Fejl: ugyldig ekstra argument '%s'." #: ../clients/cli/connections.c:2922 msgid "preparing" @@ -1310,9 +1313,9 @@ msgid "Error: 'bt-type': '%s' not valid; use [%s, %s, %s (%s), %s]." msgstr "Fejl: 'bt-type': '%s' ikke gyldig; brug [%s, %s, %s (%s), %s]." #: ../clients/cli/connections.c:4660 -#, fuzzy, c-format +#, c-format msgid "Error: setting '%s' is mandatory and cannot be removed." -msgstr "Fejl: indstillingen '%s' er obligatorisk og kan ikke fjernes.\n" +msgstr "Fejl: indstillingen '%s' er obligatorisk og kan ikke fjernes." #: ../clients/cli/connections.c:4670 #, c-format @@ -1324,19 +1327,18 @@ msgid "Error: <setting>.<property> argument is missing." msgstr "Fejl: mangler <indstilling>.<egenskab>-argument." #: ../clients/cli/connections.c:4746 -#, fuzzy msgid "Error: missing setting." -msgstr "Fejl: manglende indstilling til '%s'-egenskab\n" +msgstr "Fejl: manglende indstilling." #: ../clients/cli/connections.c:4764 -#, fuzzy, c-format +#, c-format msgid "Setting '%s' is not present in the connection." -msgstr "Indstillingen '%s' findes ikke i forbindelsen.\n" +msgstr "Indstillingen '%s' findes ikke i forbindelsen." #: ../clients/cli/connections.c:4768 -#, fuzzy, c-format +#, c-format msgid "Error: invalid setting argument '%s'." -msgstr "Fejl: Ugyldig 'wwan'-parameter: '%s'." +msgstr "Fejll: ugyldig indstillingsargument '%s'." #: ../clients/cli/connections.c:4792 #, c-format @@ -1768,7 +1770,7 @@ msgstr "" "Viser nuværende værdi og gør det muligt at redigere den.\n" #: ../clients/cli/connections.c:6709 -#, fuzzy, c-format +#, c-format msgid "" "remove [<value>|<index>|<option name>] :: delete the value\n" "\n" @@ -1995,7 +1997,7 @@ msgstr "Indstillingen '%s' findes ikke i forbindelsen.\n" #: ../clients/cli/connections.c:7701 #, c-format msgid "Error: %s properties, nor it is a setting name.\n" -msgstr "" +msgstr "Fejl: %s properties, nor it is a setting name.\n" #: ../clients/cli/connections.c:7726 ../clients/cli/connections.c:7758 #, c-format @@ -2006,31 +2008,31 @@ msgstr "" #: ../clients/cli/connections.c:7781 #, c-format msgid "Error: invalid property: %s, neither a valid setting name.\n" -msgstr "" +msgstr "Fejl: ugyldig egenskab: %s, hverken et gyldigt indstillingsnavn.\n" #: ../clients/cli/connections.c:7811 -#, fuzzy, c-format +#, c-format msgid "Error: unknown setting: '%s'\n" -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: ukendt indstilling: '%s'\n" #: ../clients/cli/connections.c:7816 -#, fuzzy, c-format +#, c-format msgid "Error: '%s' setting not present in the connection\n" -msgstr "Fejl: %s - ingen sÃ¥dan forbindelse." +msgstr "Fejl: '%s'-indstilling findes ikke i forbindelsen\n" #: ../clients/cli/connections.c:7847 -#, fuzzy, c-format +#, c-format msgid "Error: invalid property: %s%s\n" -msgstr "Fejl: Ugyldig 'wifi'-parameter: '%s'." +msgstr "Fejl: ugyldig egenskab: %s%s\n" #: ../clients/cli/connections.c:7849 msgid ", neither a valid setting name" -msgstr "" +msgstr ", hverken et gyldigt indstillingsnavn" #: ../clients/cli/connections.c:7865 #, c-format msgid "Invalid verify option: %s\n" -msgstr "" +msgstr "Ugyldigt verify-tilvalg: %s\n" #: ../clients/cli/connections.c:7874 #, c-format @@ -2045,37 +2047,37 @@ msgstr "Verificer forbindelse: %s\n" #: ../clients/cli/connections.c:7893 #, c-format msgid "The error cannot be fixed automatically.\n" -msgstr "" +msgstr "Fejlen kan ikke rettes automatisk.\n" #: ../clients/cli/connections.c:7913 -#, fuzzy, c-format +#, c-format msgid "Error: invalid argument '%s'\n" -msgstr "Fejl: Ugyldig 'wifi'-parameter: '%s'." +msgstr "Fejl: ugyldigt argument '%s'\n" #: ../clients/cli/connections.c:7963 -#, fuzzy, c-format +#, c-format msgid "Error: Failed to save '%s' (%s) connection: %s\n" -msgstr "Fejl: Frakobling af enhed \"%s\" (%s) mislykkedes: %s" +msgstr "Fejl: Kunne ikke gemme '%s' (%s) forbindelse: %s\n" #: ../clients/cli/connections.c:7969 -#, fuzzy, c-format +#, c-format msgid "Error: Timeout saving '%s' (%s) connection\n" -msgstr "Fejl: Frakobling af enhed \"%s\" (%s) mislykkedes: %s" +msgstr "Fejl: Timeout ved gemning af '%s' (%s) forbindelse\n" #: ../clients/cli/connections.c:7974 #, c-format msgid "Connection '%s' (%s) successfully saved.\n" -msgstr "" +msgstr "Forbindelsen '%s' (%s) blev gemt.\n" #: ../clients/cli/connections.c:7975 #, c-format msgid "Connection '%s' (%s) successfully updated.\n" -msgstr "" +msgstr "Forbindelsen '%s' (%s) blev opdateret.\n" #: ../clients/cli/connections.c:8008 -#, fuzzy, c-format +#, c-format msgid "Error: connection verification failed: %s\n" -msgstr "Fejl: Forbindelsesaktivering fejlede: %s" +msgstr "Fejl: forbindelsesverfikation mislykkedes: %s\n" #: ../clients/cli/connections.c:8009 msgid "(unknown error)" @@ -2084,78 +2086,79 @@ msgstr "(ukendt fejl)" #: ../clients/cli/connections.c:8010 #, c-format msgid "You may try running 'verify fix' to fix errors.\n" -msgstr "" +msgstr "Du kan prøve at køre 'verify fix' for at rette fejl.\n" #. TRANSLATORS: do not translate 'save', leave it as it is #: ../clients/cli/connections.c:8033 #, c-format msgid "Error: connection is not saved. Type 'save' first.\n" -msgstr "" +msgstr "Fejl: forbindelsen er ikke gemt. Skriv først 'save'.\n" #: ../clients/cli/connections.c:8037 -#, fuzzy, c-format +#, c-format msgid "Error: connection is not valid: %s\n" -msgstr "Fejl: Forbindelsesaktivering fejlede: %s" +msgstr "Fejl: forbindelsen er ikke gyldig: %s\n" #: ../clients/cli/connections.c:8047 -#, fuzzy, c-format +#, c-format msgid "Error: Cannot activate connection: %s.\n" -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: Kan ikke aktivere forbindelse: %s.\n" #: ../clients/cli/connections.c:8056 -#, fuzzy, c-format +#, c-format msgid "Error: Failed to activate '%s' (%s) connection: %s\n" -msgstr "Fejl: Frakobling af enhed \"%s\" (%s) mislykkedes: %s" +msgstr "Fejl: Kunne ikke aktivere '%s' (%s) forbindelse: %s\n" #: ../clients/cli/connections.c:8063 msgid "Monitoring connection activation (press any key to continue)\n" -msgstr "" +msgstr "OvervÃ¥ger forbindelsesaktivering (tryk pÃ¥ en tast for at fortsætte)\n" #: ../clients/cli/connections.c:8099 -#, fuzzy, c-format +#, c-format msgid "Error: status-line: %s\n" -msgstr "Fejl: 'nm status': %s" +msgstr "Fejl: status-line: %s\n" #: ../clients/cli/connections.c:8107 -#, fuzzy, c-format +#, c-format msgid "Error: save-confirmation: %s\n" -msgstr "Fejl: 'con list': %s" +msgstr "Fejl: save-confirmation: %s\n" #: ../clients/cli/connections.c:8115 -#, fuzzy, c-format +#, c-format msgid "Error: show-secrets: %s\n" -msgstr "Fejl: 'con status': %s" +msgstr "Fejl: show-secrets: %s\n" #: ../clients/cli/connections.c:8122 #, c-format msgid "Current nmcli configuration:\n" -msgstr "" +msgstr "Nuværende nmcli-konfiguration:\n" #: ../clients/cli/connections.c:8130 #, c-format msgid "Invalid configuration option '%s'; allowed [%s]\n" -msgstr "" +msgstr "Ugyldigt konfigurationstilvalg '%s'; tilladt [%s]\n" #: ../clients/cli/connections.c:8352 #, c-format msgid "Error: only one of 'id', 'filename', uuid, or 'path' can be provided." -msgstr "" +msgstr "Fejl: der kan kun angives én af 'id', 'filename', uuid eller 'path'." #: ../clients/cli/connections.c:8367 ../clients/cli/connections.c:8531 -#, fuzzy, c-format +#, c-format msgid "Error: Unknown connection '%s'." -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: Ukendt forbindelse '%s'." #: ../clients/cli/connections.c:8384 #, c-format msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n" -msgstr "" +msgstr "Advarsel: redigerer eksisterende forbindelse '%s'; 'type'-argument ignoreres\n" #: ../clients/cli/connections.c:8387 #, c-format msgid "" "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n" -msgstr "" +msgstr "Advarsel: redigerer eksisterende forbindelse '%s'; 'con-name'-argument " +"ignoreres\n" #: ../clients/cli/connections.c:8414 #, c-format @@ -2186,59 +2189,60 @@ msgstr "Tilføjer en ny '%s'-forbindelse" #: ../clients/cli/connections.c:8460 #, c-format msgid "Type 'help' or '?' for available commands." -msgstr "" +msgstr "Skriv 'help' eller '?' for tilgængelige kommandoer." #. TRANSLATORS: do not translate 'print', leave it as it is #: ../clients/cli/connections.c:8463 #, c-format msgid "Type 'print' to show all the connection properties." -msgstr "" +msgstr "Skriv 'print' for at vise alle forbindelsesegenskaberne." #. TRANSLATORS: do not translate 'describe', leave it as it is #: ../clients/cli/connections.c:8466 #, c-format msgid "Type 'describe [<setting>.<prop>]' for detailed property description." msgstr "" +"Skriv 'describe [<indstilling>.<egenskab>]' for detaljeret beskrivelse af " +"egenskab." #: ../clients/cli/connections.c:8494 -#, fuzzy, c-format +#, c-format msgid "Error: Failed to modify connection '%s': %s" -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: Kunne ikke redigere forbindelsen '%s': %s" #: ../clients/cli/connections.c:8500 #, c-format msgid "Connection '%s' (%s) successfully modified.\n" -msgstr "" +msgstr "Forbindelsen '%s' (%s) blev ændret.\n" #: ../clients/cli/connections.c:8567 #, c-format msgid "%s (%s) cloned as %s (%s).\n" -msgstr "" +msgstr "%s (%s) klonet som %s (%s).\n" #: ../clients/cli/connections.c:8627 -#, fuzzy msgid "New connection name: " msgstr "Nyt forbindelsesnavn: " #: ../clients/cli/connections.c:8629 -#, fuzzy, c-format +#, c-format msgid "Error: <new name> argument is missing." -msgstr "Fejl: %s parameter mangler." +msgstr "Fejl: <new name>-argument mangler." #: ../clients/cli/connections.c:8635 ../clients/cli/connections.c:9120 -#, fuzzy, c-format +#, c-format msgid "Error: unknown extra argument: '%s'." -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: ukendt ekstra argument: '%s'." #: ../clients/cli/connections.c:8667 -#, fuzzy, c-format +#, c-format msgid "Error: not all connections deleted." -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: ikke alle forbindelser blev slettet." #: ../clients/cli/connections.c:8668 -#, fuzzy, c-format +#, c-format msgid "Error: Connection deletion failed: %s\n" -msgstr "Fejl: Forbindelsesaktivering fejlede: %s" +msgstr "Fejl: Sletning af forbindelse mislykkedes: %s\n" #: ../clients/cli/connections.c:8724 ../clients/cli/connections.c:8844 #, c-format @@ -2246,9 +2250,9 @@ msgid "Error: %s.\n" msgstr "Fejl: %s.\n" #: ../clients/cli/connections.c:8725 ../clients/cli/connections.c:8845 -#, fuzzy, c-format +#, c-format msgid "Error: not all connections found." -msgstr "Fejl: Ukendt forbindelse: %s." +msgstr "Fejl: fandt ikke alle forbindelser." #. truncate trailing ", " #: ../clients/cli/connections.c:8776 @@ -2299,12 +2303,12 @@ msgstr "Fejl: %s parameter mangler." #: ../clients/cli/connections.c:8998 #, c-format msgid "Warning: 'type' already specified, ignoring extra one.\n" -msgstr "" +msgstr "Advarsel: 'type' allerede angivet, ignorerer den ekstra.\n" #: ../clients/cli/connections.c:9013 #, c-format msgid "Warning: 'file' already specified, ignoring extra one.\n" -msgstr "" +msgstr "Advarsel: 'file' allerede angivet, ignorerer den ekstra.\n" #: ../clients/cli/connections.c:9027 #, fuzzy, c-format @@ -2324,7 +2328,7 @@ msgstr "Fejl: 'dev list': %s" #: ../clients/cli/connections.c:9050 ../clients/cli/connections.c:9141 #, c-format msgid "Error: failed to load VPN plugin: %s." -msgstr "" +msgstr "Fejl: kunne ikke indlæse VPN-plugin: %s." #: ../clients/cli/connections.c:9060 #, fuzzy, c-format @@ -2333,7 +2337,7 @@ msgstr "Fejl: 'dev status': %s" #: ../clients/cli/connections.c:9127 msgid "Output file name: " -msgstr "" +msgstr "Outputfilnavn: " #: ../clients/cli/connections.c:9132 #, fuzzy, c-format @@ -2343,7 +2347,7 @@ msgstr "Fejl: Ukendt forbindelse: %s." #: ../clients/cli/connections.c:9154 #, c-format msgid "Error: failed to create temporary file %s." -msgstr "" +msgstr "Fejl: kunne ikke oprette den midlertidige fil %s." #: ../clients/cli/connections.c:9162 #, fuzzy, c-format @@ -2353,7 +2357,7 @@ msgstr "Fejl: 'dev status': %s" #: ../clients/cli/connections.c:9174 #, c-format msgid "Error: failed to read temporary file '%s': %s." -msgstr "" +msgstr "Fejl: kunne ikke læse den midlertidige fil '%s': %s." #. define some prompts #: ../clients/cli/devices.c:23 @@ -2383,7 +2387,7 @@ msgid "%u Mb/s" msgstr "%u Mb/s" #: ../clients/cli/devices.c:732 -#, fuzzy, c-format +#, c-format msgid "" "Usage: nmcli device { COMMAND | help }\n" "\n" @@ -2460,6 +2464,8 @@ msgstr "" "\n" " wifi rescan [ifname <gfnavn>] [[ssid <SSID som skal skannes>] ...]\n" "\n" +" wifi show-password [gfnavn <gfnavn>]\n" +"\n" " lldp [list [ifname <gfnavn>]]\n" "\n" @@ -2556,7 +2562,7 @@ msgstr "" "\n" #: ../clients/cli/devices.c:805 -#, fuzzy, c-format +#, c-format msgid "" "Usage: nmcli device modify { ARGUMENTS | --help }\n" "\n" @@ -2583,16 +2589,14 @@ msgstr "" "Rediger en eller flere egenskaber som er aktive pÃ¥ enheden uden at ændre\n" "forbindelsesprofilen. Ændringerne træder i kraft med det samme. Ved " "egenskaber\n" -"med flere værdier kan du valgfrit bruge '+' eller '-' foran " -"egenskabsnavnet.\n" +"med flere værdier kan du valgfrit bruge '+' eller '-' foran egenskabsnavnet.\n" "'+'-tegnet gør det muligt at tilføje punkter i stedet for at overskrive hele " "værdien.\n" "'-'-tegnet gør det muligt at fjerne valgte punkter i stedet for hele " "værdien.\n" "\n" "Eksempler:\n" -"nmcli dev mod em1 ipv4.method manual ipv4.addr \"192.168.1.2/24, " -"10.10.1.5/8\"\n" +"nmcli dev mod em1 ipv4.method manual ipv4.addr \"192.168.1.2/24, 10.10.1.5/8\"\n" "nmcli dev mod em1 +ipv4.dns 8.8.4.4\n" "nmcli dev mod em1 -ipv4.dns 1\n" "nmcli dev mod em1 -ipv6.addr \"abbe::cafe/56\"\n" @@ -2817,31 +2821,31 @@ msgstr "" "\n" #: ../clients/cli/devices.c:1021 -#, fuzzy, c-format +#, c-format msgid "Error: No interface specified." -msgstr "Fejl: iface skal være angivet." +msgstr "Fejl: Ingen grænseflade angivet." #: ../clients/cli/devices.c:1044 #, c-format msgid "Warning: argument '%s' is duplicated.\n" -msgstr "" +msgstr "Advarsel: argumentet '%s' er duplikeret.\n" #: ../clients/cli/devices.c:1047 -#, fuzzy, c-format +#, c-format msgid "Error: Device '%s' not found.\n" -msgstr "Fejl: Enhed \"%s\" ikke fundet." +msgstr "Fejl: Enheden '%s' blev ikke fundet.\n" #: ../clients/cli/devices.c:1048 -#, fuzzy, c-format +#, c-format msgid "Error: not all devices found." -msgstr "Fejl: Ingen passende enhed fundet." +msgstr "Fejl: fandt ikke alle enheder." #: ../clients/cli/devices.c:1079 msgid "No interface specified" msgstr "Ingen grænseflade angivet" #: ../clients/cli/devices.c:1098 -#, fuzzy, c-format +#, c-format msgid "Device '%s' not found" msgstr "Enheden '%s' blev ikke fundet" @@ -2861,11 +2865,11 @@ msgstr "Ad-Hoc" #: ../clients/cli/devices.c:1238 msgid "Infra" -msgstr "" +msgstr "Infra" #: ../clients/cli/devices.c:1239 ../src/devices/wifi/nm-device-olpc-mesh.c:118 msgid "Mesh" -msgstr "" +msgstr "Mesh" #: ../clients/cli/devices.c:1240 msgid "N/A" @@ -2876,18 +2880,18 @@ msgid "Device details" msgstr "Enhedsdetaljer" #: ../clients/cli/devices.c:1447 -#, fuzzy, c-format +#, c-format msgid "Error: 'device show': %s" -msgstr "Fejl: 'dev list': %s" +msgstr "Fejl: 'device show': %s" #: ../clients/cli/devices.c:1776 msgid "Status of devices" msgstr "Status pÃ¥ enheder" #: ../clients/cli/devices.c:1780 -#, fuzzy, c-format +#, c-format msgid "Error: 'device status': %s" -msgstr "Fejl: 'dev status': %s" +msgstr "Fejl: 'device status': %s" #: ../clients/cli/devices.c:1842 ../clients/cli/general.c:511 #, c-format @@ -2895,7 +2899,7 @@ msgid "Error: Timeout %d sec expired." msgstr "Fejl: Ventetid pÃ¥ %d sek udløb." #: ../clients/cli/devices.c:1914 -#, fuzzy, c-format +#, c-format msgid "Device '%s' successfully activated with '%s'.\n" msgstr "Enheden '%s' blev aktiveret med '%s'.\n" @@ -2903,17 +2907,17 @@ msgstr "Enheden '%s' blev aktiveret med '%s'.\n" #, c-format msgid "" "Hint: \"nmcli dev wifi show-password\" shows the Wi-Fi name and password.\n" -msgstr "" +msgstr "Tip: \"nmcli dev wifi show-password\" viser Wi-Fi-navnet og adgangskoden.\n" #: ../clients/cli/devices.c:1923 -#, fuzzy, c-format +#, c-format msgid "Error: Connection activation failed: (%d) %s.\n" -msgstr "Fejl: Forbindelsesaktivering fejlede: %s." +msgstr "Fejl: Forbindelsesaktivering mislykkedes: (%d) %s.\n" #: ../clients/cli/devices.c:1953 #, c-format msgid "Error: Failed to setup a Wi-Fi hotspot: %s" -msgstr "" +msgstr "Fejl: Kunne ikke opsætte et Wi-Fi-hotspot: %s" #: ../clients/cli/devices.c:1956 #, fuzzy, c-format @@ -2982,9 +2986,9 @@ msgid "Error: Device '%s' (%s) deletion failed: %s\n" msgstr "Fejl: Frakobling af enhed \"%s\" (%s) mislykkedes: %s" #: ../clients/cli/devices.c:2563 -#, fuzzy, c-format +#, c-format msgid "Error: No property specified." -msgstr "Fejl: ingen korrekte parameter angivet." +msgstr "Fejl: Ingen egenskab angivet." #: ../clients/cli/devices.c:2579 ../clients/cli/devices.c:2598 #: ../clients/cli/general.c:773 ../clients/cli/general.c:786 @@ -2993,14 +2997,14 @@ msgid "Error: '%s' argument is missing." msgstr "Fejl: '%s'-parameter mangler." #: ../clients/cli/devices.c:2586 -#, fuzzy, c-format +#, c-format msgid "Error: 'managed': %s." -msgstr "Fejl: 'nm status': %s" +msgstr "Fejl: 'managed': %s." #: ../clients/cli/devices.c:2605 -#, fuzzy, c-format +#, c-format msgid "Error: 'autoconnect': %s." -msgstr "Fejl: 'con list': %s" +msgstr "Fejl: 'autoconnect': %s." #: ../clients/cli/devices.c:2614 ../clients/cli/general.c:801 #, fuzzy, c-format @@ -3015,12 +3019,12 @@ msgstr "ingen enhed fundet til forbindelsen '%s'" #: ../clients/cli/devices.c:2686 #, c-format msgid "%s: device created\n" -msgstr "" +msgstr "%s: enhed oprettet\n" #: ../clients/cli/devices.c:2693 #, c-format msgid "%s: device removed\n" -msgstr "" +msgstr "%s: enhed fjernet\n" #: ../clients/cli/devices.c:2872 msgid "Wi-Fi scan list" @@ -3052,6 +3056,8 @@ msgid "" "Error: Device '%s' was not recognized as a Wi-Fi device, check " "NetworkManager Wi-Fi plugin." msgstr "" +"Fejl: Enheden '%s' blev ikke genkendt som en Wi-Fi-enhed, tjek " +"NetworkManagers Wi-Fi-plugin." #: ../clients/cli/devices.c:3257 ../clients/cli/devices.c:3586 #: ../clients/cli/devices.c:4175 ../clients/cli/devices.c:4302 @@ -3062,7 +3068,7 @@ msgstr "Fejl: Enhed '%s' er ikke en Wi-Fi-enhed." #: ../clients/cli/devices.c:3433 msgid "SSID or BSSID: " -msgstr "" +msgstr "SSID eller BSSID: " #: ../clients/cli/devices.c:3438 #, fuzzy, c-format @@ -3079,21 +3085,25 @@ msgstr "Fejl: Værdi for tidsudløb \"%s\" er ikke korrekt." msgid "" "Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'." msgstr "" +"Fejl: wep-key-type-argumentets værdi '%s' er ugyldigt. Brug 'key' eller " +"'phrase'." #: ../clients/cli/devices.c:3532 ../clients/cli/devices.c:3550 -#, fuzzy, c-format +#, c-format msgid "Error: %s: %s." -msgstr "Fejl: %s." +msgstr "Fejl: %s: %s." #: ../clients/cli/devices.c:3569 #, c-format msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)." msgstr "" +"Fejl: BSSID til at oprette forbindelse til (%s) er ikke magen til bssid-" +"argumentet (%s)." #: ../clients/cli/devices.c:3575 #, c-format msgid "Error: Parameter '%s' is neither SSID nor BSSID." -msgstr "" +msgstr "Fejl: Parameteren '%s' er hverken SSID eller BSSID." #: ../clients/cli/devices.c:3588 ../clients/cli/devices.c:4177 #: ../clients/cli/devices.c:4304 ../clients/cli/devices.c:4540 @@ -3104,7 +3114,7 @@ msgstr "Fejl: Ingen passende enhed fundet." #: ../clients/cli/devices.c:3608 #, c-format msgid "Error: Failed to scan hidden SSID: %s." -msgstr "" +msgstr "Fejl: Kunne ikke skanne skjult SSID: %s." #: ../clients/cli/devices.c:3635 #, fuzzy, c-format @@ -3134,7 +3144,7 @@ msgstr "Adgangskode: " #: ../clients/cli/devices.c:3887 #, c-format msgid "'%s' is not valid WPA PSK" -msgstr "" +msgstr "'%s' er ikke gyldig WPA PSK" #: ../clients/cli/devices.c:3904 #, c-format @@ -3177,9 +3187,9 @@ msgid "Error: Invalid 'password': %s." msgstr "Fejl: Ugyldig 'wifi'-parameter: '%s'." #: ../clients/cli/devices.c:4262 ../clients/cli/devices.c:4487 -#, fuzzy, c-format +#, c-format msgid "Error: '%s' cannot repeat." -msgstr "Fejl: Enhed \"%s\" ikke fundet." +msgstr "Fejl: '%s' kan ikke gentage." #: ../clients/cli/devices.c:4393 ../clients/cli/devices.c:4397 #: ../clients/cli/devices.c:4402 ../clients/cli/devices.c:4405 @@ -3188,7 +3198,6 @@ msgid "Security" msgstr "Sikkerhed" #: ../clients/cli/devices.c:4393 -#, fuzzy msgid "None" msgstr "Ingen" @@ -3206,12 +3215,12 @@ msgstr "Ingen" #: ../clients/tui/nmt-page-wifi.c:266 ../clients/tui/nmt-page-wifi.c:298 #: ../clients/tui/nmt-page-wifi.c:331 msgid "Password" -msgstr "" +msgstr "Adgangskode" #: ../clients/cli/devices.c:4527 #, c-format msgid "%s" -msgstr "" +msgstr "%s" #. Main header name #: ../clients/cli/devices.c:4581 @@ -3579,9 +3588,9 @@ msgstr "Fejl: kun følgende felter er tilladte: %s" #. NetworkManager quit while we were waiting. #: ../clients/cli/general.c:541 ../clients/tui/nmtui.c:246 -#, fuzzy, c-format +#, c-format msgid "NetworkManager is not running." -msgstr "Status for NetworkManager" +msgstr "NetworkManager kører ikke." #: ../clients/cli/general.c:563 msgid "NetworkManager permissions" @@ -3590,7 +3599,7 @@ msgstr "Tilladelser for NetworkManager" #: ../clients/cli/general.c:567 #, c-format msgid "Error: 'general permissions': %s" -msgstr "" +msgstr "Fejl: 'general permissions': %s" #: ../clients/cli/general.c:644 #, fuzzy, c-format @@ -3614,7 +3623,7 @@ msgstr "Logning for NetworkManager" #: ../clients/cli/general.c:712 #, c-format msgid "Error: 'general logging': %s" -msgstr "" +msgstr "Fejl: 'general logging': %s" #: ../clients/cli/general.c:744 #, fuzzy, c-format @@ -3729,14 +3738,12 @@ msgid "plugin missing" msgstr "plugin mangler" #: ../clients/cli/general.c:1273 ../clients/cli/general.c:1287 -#, fuzzy msgid "sw disabled" -msgstr "deaktiveret" +msgstr "sw deaktiveret" #: ../clients/cli/general.c:1278 ../clients/cli/general.c:1292 -#, fuzzy msgid "hw disabled" -msgstr "deaktiveret" +msgstr "hw deaktiveret" #: ../clients/cli/general.c:1303 msgid "sw" @@ -3786,15 +3793,15 @@ msgstr "%s VPN-forbindelse" #, c-format msgctxt "nmcli-overview" msgid "%s: %s to %s" -msgstr "" +msgstr "%s: %s til %s" #. TRANSLATORS: prints header line for not active device in plain `nmcli` overview output as #. * "<interface-name>: <device-state>" #: ../clients/cli/general.c:1443 -#, fuzzy, c-format +#, c-format msgctxt "nmcli-overview" msgid "%s: %s" -msgstr "Fejl: %s." +msgstr "%s: %s" #: ../clients/cli/general.c:1493 #, c-format @@ -3892,22 +3899,22 @@ msgstr "Fejl: Mangler argument for tilvalget '%s'." #: ../clients/cli/nmcli.c:621 #, c-format msgid "Unexpected end of file following '%s'\n" -msgstr "" +msgstr "Uventet slutning pÃ¥ fil efter '%s'\n" #: ../clients/cli/nmcli.c:629 #, c-format msgid "Expected whitespace following '%s'\n" -msgstr "" +msgstr "Forventede blanktegn efter '%s'\n" #: ../clients/cli/nmcli.c:641 #, c-format msgid "Expected a value for '%s'\n" -msgstr "" +msgstr "Forventede en værdi til '%s'\n" #: ../clients/cli/nmcli.c:655 #, c-format msgid "Expected a line break following '%s'\n" -msgstr "" +msgstr "Forventede et linjeskift efter '%s'\n" #: ../clients/cli/nmcli.c:761 #, c-format @@ -3932,7 +3939,7 @@ msgstr "Fejl: Tilvalg '--pretty' kan ikke bruges sammen med '--terse'." #: ../clients/cli/nmcli.c:794 #, c-format msgid "Error: '%s' is not a valid argument for '%s' option." -msgstr "" +msgstr "Fejl: '%s' er ikke et gyldigt argument til tilvalget '%s'." #: ../clients/cli/nmcli.c:808 ../clients/cli/nmcli.c:820 #, c-format @@ -3942,7 +3949,7 @@ msgstr "Fejl: '%s' er ikke et gyldigt argument for tilvalget '%s'." #: ../clients/cli/nmcli.c:844 #, c-format msgid "Error: '%s' is not a valid timeout." -msgstr "" +msgstr "Fejl: '%s' er ikke en gyldig timeout." #: ../clients/cli/nmcli.c:851 #, c-format @@ -3976,12 +3983,12 @@ msgstr "" #: ../clients/cli/settings.c:32 #, c-format msgid "Do you also want to set '%s' to '%s'? [yes]: " -msgstr "" +msgstr "Vil du ogsÃ¥ indstille '%s' til '%s'? [ja]: " #: ../clients/cli/settings.c:34 #, c-format msgid "Do you also want to clear '%s'? [yes]: " -msgstr "" +msgstr "Vil du ogsÃ¥ rydde '%s'? [ja]: " #: ../clients/cli/settings.c:229 #, c-format @@ -3996,22 +4003,22 @@ msgstr "" #: ../clients/cli/settings.c:250 msgid "Do you want to remove them? [yes] " -msgstr "" +msgstr "Vil du fjerne dem? [ja] " #: ../clients/cli/settings.c:338 #, c-format msgid "Warning: %s is not an UUID of any existing connection profile\n" -msgstr "" +msgstr "Advarsel: %s er ikke et UUID pÃ¥ en eksisterende forbindelsesprofil\n" #: ../clients/cli/settings.c:343 ../clients/cli/settings.c:356 -#, fuzzy, c-format +#, c-format msgid "'%s' is not a VPN connection profile" -msgstr "VPN-forbindelse fejlede" +msgstr "'%s' er ikke en VPN-forbindelsesprofil" #: ../clients/cli/settings.c:350 #, c-format msgid "'%s' is not a name of any exiting profile" -msgstr "" +msgstr "'%s' er ikke et navn pÃ¥ en eksisterende profil" #: ../clients/cli/settings.c:394 #, c-format @@ -4029,7 +4036,7 @@ msgstr "" #: ../clients/cli/settings.c:578 msgid "the property can't be changed" -msgstr "" +msgstr "egenskaben kan ikke ændres" #: ../clients/cli/settings.c:656 msgid "[NM property description]" @@ -4067,12 +4074,12 @@ msgstr "Kunne ikke dekryptere den private nøgle." #: ../clients/cli/utils.c:1427 #, c-format msgid "Error reading nmcli output: %s\n" -msgstr "" +msgstr "Fejl ved læsning af nmcli-output: %s\n" #: ../clients/cli/utils.c:1432 #, c-format msgid "Error writing nmcli output: %s\n" -msgstr "" +msgstr "Fejl ved skrivning af nmcli-output: %s\n" #: ../clients/cli/utils.c:1458 #, c-format @@ -4128,17 +4135,17 @@ msgstr "Fejl: '%s' er ikke et gyldigt argument for tilvalget '%s'." #: ../clients/common/nm-client-utils.c:152 #, c-format msgid "'%s' is not valid; use [%s], [%s] or [%s]" -msgstr "" +msgstr "'%s' er ikke gyldigt; brug [%s], [%s] eller [%s]" #: ../clients/common/nm-client-utils.c:201 -#, fuzzy, c-format +#, c-format msgid "'%s' is ambiguous: %s" -msgstr "Fejl: '%s' er ikke et gyldigt argument for tilvalget '%s'." +msgstr "'%s' er flertydig: %s" #: ../clients/common/nm-client-utils.c:211 #, c-format msgid "missing name, try one of [%s]" -msgstr "" +msgstr "manglende navn, prøv en af [%s]" #: ../clients/common/nm-client-utils.c:253 msgid "unmanaged" @@ -4165,14 +4172,12 @@ msgid "connecting (getting IP configuration)" msgstr "forbinder (henter IP-konfiguration)" #: ../clients/common/nm-client-utils.c:260 -#, fuzzy msgid "connecting (checking IP connectivity)" -msgstr "forbinder (henter IP-konfiguration)" +msgstr "opretter forbindelse (tjekker IP-forbindelse)" #: ../clients/common/nm-client-utils.c:261 -#, fuzzy msgid "connecting (starting secondary connections)" -msgstr "forbinder (henter IP-konfiguration)" +msgstr "opretter forbindelse (starter sekundære forbindelser)" #: ../clients/common/nm-client-utils.c:264 msgid "connection failed" @@ -4184,28 +4189,25 @@ msgstr "forbindelse fejlet" #: ../clients/common/nm-client-utils.c:274 #: ../clients/common/nm-client-utils.c:275 #: ../clients/common/nm-client-utils.c:276 -#, fuzzy msgid "connecting (externally)" -msgstr "forbinder (forbereder)" +msgstr "opretter forbindelse (eksternt)" #: ../clients/common/nm-client-utils.c:277 -#, fuzzy msgid "connected (externally)" -msgstr "tilsluttet (kun sted)" +msgstr "forbundet (eksternt)" #: ../clients/common/nm-client-utils.c:278 #: ../clients/common/nm-client-utils.c:279 -#, fuzzy msgid "deactivating (externally)" -msgstr "deaktiverer" +msgstr "deaktiverer (eksternt)" #: ../clients/common/nm-client-utils.c:304 msgid "yes (guessed)" -msgstr "" +msgstr "ja (gættet)" #: ../clients/common/nm-client-utils.c:305 msgid "no (guessed)" -msgstr "" +msgstr "nej (gættet)" #. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason) #. TRANSLATORS: Unknown reason for a connection state change (NMActiveConnectionStateReason) @@ -4216,7 +4218,7 @@ msgstr "Ukendt" #: ../clients/common/nm-client-utils.c:312 msgid "No reason given" -msgstr "" +msgstr "Der er ikke angivet nogen Ã¥rsag" #: ../clients/common/nm-client-utils.c:314 msgid "Device is now managed" @@ -4261,64 +4263,56 @@ msgid "802.1X supplicant took too long to authenticate" msgstr "" #: ../clients/common/nm-client-utils.c:324 -#, fuzzy msgid "PPP service failed to start" -msgstr "VPN-tjenesten kunne ikke starte" +msgstr "PPP-tjeneste kunne ikke starte" #: ../clients/common/nm-client-utils.c:325 -#, fuzzy msgid "PPP service disconnected" -msgstr "VPN afbrudt" +msgstr "PPP-tjeneste afbrudt" #: ../clients/common/nm-client-utils.c:326 msgid "PPP failed" -msgstr "" +msgstr "PPP mislykkedes" #: ../clients/common/nm-client-utils.c:327 -#, fuzzy msgid "DHCP client failed to start" -msgstr "VPN-tjenesten kunne ikke starte" +msgstr "DHCP-klient kunne ikke starte" #: ../clients/common/nm-client-utils.c:328 msgid "DHCP client error" -msgstr "" +msgstr "Fejl ved DHCP-klient" #: ../clients/common/nm-client-utils.c:329 -#, fuzzy msgid "DHCP client failed" -msgstr "VPN-forbindelse fejlede" +msgstr "DHCP-klient mislykkedes" #: ../clients/common/nm-client-utils.c:330 -#, fuzzy msgid "Shared connection service failed to start" -msgstr "VPN-tjenesten kunne ikke starte" +msgstr "Delt forbindelsetjeneste kunne ikke starte" #: ../clients/common/nm-client-utils.c:331 -#, fuzzy msgid "Shared connection service failed" -msgstr "forbindelse fejlet" +msgstr "Delt forbindelsetjeneste mislykkedes" #: ../clients/common/nm-client-utils.c:332 -#, fuzzy msgid "AutoIP service failed to start" -msgstr "VPN-tjenesten kunne ikke starte" +msgstr "AutoIP-tjeneste kunne ikke starte" #: ../clients/common/nm-client-utils.c:333 msgid "AutoIP service error" -msgstr "" +msgstr "Fejl ved AutoIP-tjeneste" #: ../clients/common/nm-client-utils.c:334 -#, fuzzy msgid "AutoIP service failed" -msgstr "VPN-tjenesten kunne ikke starte" +msgstr "AutoIP-tjeneste mislykkedes" #: ../clients/common/nm-client-utils.c:335 msgid "The line is busy" -msgstr "" +msgstr "Linjen er optaget" #: ../clients/common/nm-client-utils.c:336 msgid "No dial tone" -msgstr "" +msgstr "Ingen ringetone" #: ../clients/common/nm-client-utils.c:337 msgid "No carrier could be established" @@ -4401,14 +4395,12 @@ msgid "The supplicant is now available" msgstr "" #: ../clients/common/nm-client-utils.c:355 -#, fuzzy msgid "The modem could not be found" -msgstr "'dhcpcd' blev fundet." +msgstr "Kunne ikke finde modemmet." #: ../clients/common/nm-client-utils.c:356 -#, fuzzy msgid "The Bluetooth connection failed or timed out" -msgstr "forbindelsesforsøget udløb" +msgstr "Bluetooth-forbindelse mislykkedes eller fik timeout" #: ../clients/common/nm-client-utils.c:357 msgid "GSM Modem's SIM card not inserted" @@ -4431,9 +4423,8 @@ msgid "InfiniBand device does not support connected mode" msgstr "" #: ../clients/common/nm-client-utils.c:362 -#, fuzzy msgid "A dependency of the connection failed" -msgstr "forbindelse fejlet" +msgstr "En afhængighed af forbindelsen mislykkedes" #: ../clients/common/nm-client-utils.c:363 msgid "A problem with the RFC 2684 Ethernet over ADSL bridge" @@ -4444,9 +4435,8 @@ msgid "ModemManager is unavailable" msgstr "" #: ../clients/common/nm-client-utils.c:365 -#, fuzzy msgid "The Wi-Fi network could not be found" -msgstr "'dhclient' blev fundet." +msgstr "Kunne ikke finde Wi-Fi-netværket" #: ../clients/common/nm-client-utils.c:366 msgid "A secondary connection of the base connection failed" @@ -4720,14 +4710,14 @@ msgid "invalid option '%s', use one of [%s]" msgstr "" #: ../clients/common/nm-meta-setting-desc.c:1714 -#, fuzzy, c-format +#, c-format msgid "%d (key)" -msgstr "%d (hex-ascii-nøgle)" +msgstr "%d (nøgle)" #: ../clients/common/nm-meta-setting-desc.c:1716 -#, fuzzy, c-format +#, c-format msgid "%d (passphrase)" -msgstr "%d (104/128-bit adgangsfrase)" +msgstr "%d (adgangsfrase)" #: ../clients/common/nm-meta-setting-desc.c:1719 #, c-format @@ -4755,9 +4745,8 @@ msgid "MVRP, " msgstr "" #: ../clients/common/nm-meta-setting-desc.c:1765 -#, fuzzy msgid "0 (none)" -msgstr "(ingen)" +msgstr "0 (ingen)" #: ../clients/common/nm-meta-setting-desc.c:1771 msgid "agent-owned, " @@ -4883,14 +4872,12 @@ msgid "the value '%s' is not a valid UUID" msgstr "Fejl: Værdi for tidsudløb \"%s\" er ikke korrekt." #: ../clients/common/nm-meta-setting-desc.c:2753 -#, fuzzy msgid "0 (disabled)" -msgstr "deaktiveret" +msgstr "0 (deaktiveret)" #: ../clients/common/nm-meta-setting-desc.c:2759 -#, fuzzy msgid "enabled, " -msgstr "aktiveret" +msgstr "aktiveret, " #: ../clients/common/nm-meta-setting-desc.c:2761 msgid "advertise, " @@ -4944,14 +4931,14 @@ msgid "default" msgstr "standard" #: ../clients/common/nm-meta-setting-desc.c:3235 -#, fuzzy, c-format +#, c-format msgid "invalid IPv%c address '%s'" -msgstr "ugyldigt felt '%s'" +msgstr "ugyldig IPv%c adresse '%s'" #: ../clients/common/nm-meta-setting-desc.c:3362 -#, fuzzy, c-format +#, c-format msgid "invalid gateway address '%s'" -msgstr "ugyldigt felt '%s'" +msgstr "ugyldig gatewayadresse '%s'" #: ../clients/common/nm-meta-setting-desc.c:3514 #, c-format @@ -5597,14 +5584,12 @@ msgstr "" #: ../clients/common/nm-meta-setting-desc.c:7912 #: ../src/devices/adsl/nm-device-adsl.c:117 -#, fuzzy msgid "ADSL connection" -msgstr "System forbindelser" +msgstr "ADSL-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7913 -#, fuzzy msgid "bluetooth connection" -msgstr "forbinder" +msgstr "bluetooth-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7914 msgid "Bond device" @@ -5673,9 +5658,8 @@ msgid "MACsec connection" msgstr "" #: ../clients/common/nm-meta-setting-desc.c:7929 -#, fuzzy msgid "macvlan connection" -msgstr "forbinder" +msgstr "macvlan-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7930 msgid "Match" @@ -5749,50 +5733,42 @@ msgstr "" #: ../clients/common/nm-meta-setting-desc.c:7947 #: ../src/devices/nm-device-vlan.c:385 -#, fuzzy msgid "VLAN connection" -msgstr "VPN-forbinder" +msgstr "VLAN-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7948 ../src/nm-manager.c:5714 -#, fuzzy msgid "VPN connection" -msgstr "VPN-forbinder" +msgstr "VPN-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7949 #: ../src/devices/nm-device-vrf.c:175 -#, fuzzy msgid "VRF connection" -msgstr "VPN-forbinder" +msgstr "VRF-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7950 #: ../src/devices/nm-device-vxlan.c:354 -#, fuzzy msgid "VXLAN connection" -msgstr "VPN-forbinder" +msgstr "VXLAN-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7951 -#, fuzzy msgid "Wi-Fi P2P connection" -msgstr "forbindelse fejlet" +msgstr "Wi-Fi P2P-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7952 -#, fuzzy msgid "WiMAX connection" -msgstr "Aktive forbindelser" +msgstr "WiMAX-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7953 -#, fuzzy msgid "Wired Ethernet" -msgstr "Aktive forbindelser" +msgstr "Kablet ethernet" #: ../clients/common/nm-meta-setting-desc.c:7954 msgid "WireGuard VPN settings" msgstr "" #: ../clients/common/nm-meta-setting-desc.c:7955 -#, fuzzy msgid "Wi-Fi connection" -msgstr "forbindelse fejlet" +msgstr "Wi-Fi-forbindelse" #: ../clients/common/nm-meta-setting-desc.c:7956 msgid "Wi-Fi security settings" @@ -5840,9 +5816,8 @@ msgid "Service" msgstr "" #: ../clients/common/nm-secret-agent-simple.c:473 -#, fuzzy msgid "WireGuard private-key" -msgstr "WireGuard" +msgstr "WireGuard private-key" #: ../clients/common/nm-secret-agent-simple.c:514 #, fuzzy, c-format @@ -5897,9 +5872,8 @@ msgid "PIN code is needed for the mobile broadband device" msgstr "Aktiver eller deaktiver mobile bredbÃ¥ndsenheder" #: ../clients/common/nm-secret-agent-simple.c:893 -#, fuzzy msgid "PIN" -msgstr "VPN" +msgstr "PIN" #: ../clients/common/nm-secret-agent-simple.c:898 #: ../clients/common/nm-secret-agent-simple.c:933 @@ -5921,18 +5895,17 @@ msgid "MACsec EAP authentication" msgstr "" #: ../clients/common/nm-secret-agent-simple.c:927 -#, fuzzy msgid "WireGuard VPN secret" -msgstr "WireGuard" +msgstr "WireGuard VPN-hemmelighed" #: ../clients/common/nm-secret-agent-simple.c:966 msgid "VPN password required" msgstr "" #: ../clients/common/nm-vpn-helpers.c:39 -#, fuzzy, c-format +#, c-format msgid "unknown VPN plugin \"%s\"" -msgstr "Ukendt logningsdomæne '%s'" +msgstr "ukendt VPN-plugin \"%s\"" #: ../clients/common/nm-vpn-helpers.c:50 #, c-format @@ -8890,9 +8863,8 @@ msgid "Short IEEE 802.15.4 address to be used within a restricted environment." msgstr "" #: ../clients/nm-online.c:77 -#, fuzzy msgid "Connecting" -msgstr "forbinder" +msgstr "Opretter forbindelse" #: ../clients/nm-online.c:193 #, fuzzy, c-format @@ -8930,8 +8902,7 @@ msgstr "" #: ../clients/nm-online.c:272 ../clients/nm-online.c:278 #, fuzzy msgid "Invalid option. Please use --help to see a list of valid options." -msgstr "" -"Ugyldigt tilvalg. Brug venligst --help for at se en liste af gyldige " +msgstr "Ugyldigt tilvalg. Brug venligst --help for at se en liste af gyldige " "tilvalg.\n" #: ../clients/tui/newt/nmt-newt-utils.c:163 ../clients/tui/nmt-editor.c:420 @@ -8962,18 +8933,18 @@ msgid "Ethernet" msgstr "" #: ../clients/tui/nm-editor-utils.c:139 -#, fuzzy, c-format +#, c-format msgid "Ethernet connection %d" -msgstr "Bruger forbindelser" +msgstr "Ethernet-forbindelse %d" #: ../clients/tui/nm-editor-utils.c:143 ../libnm/nm-device.c:1569 msgid "Wi-Fi" msgstr "" #: ../clients/tui/nm-editor-utils.c:147 -#, fuzzy, c-format +#, c-format msgid "Wi-Fi connection %d" -msgstr "forbindelse fejlet" +msgstr "Wi-Fi-forbindelse %d" #: ../clients/tui/nm-editor-utils.c:152 ../libnm-core/nm-connection.c:2713 #: ../libnm/nm-device.c:1585 @@ -8995,14 +8966,13 @@ msgid "Mobile broadband connection %d" msgstr "ingen enhed fundet til forbindelsen '%s'" #: ../clients/tui/nm-editor-utils.c:170 ../clients/tui/nmt-page-dsl.c:49 -#, fuzzy msgid "DSL" -msgstr "DNS" +msgstr "DSL" #: ../clients/tui/nm-editor-utils.c:174 -#, fuzzy, c-format +#, c-format msgid "DSL connection %d" -msgstr "forbindelse fejlet" +msgstr "DSL-forbindelse %d" #: ../clients/tui/nm-editor-utils.c:179 ../libnm-core/nm-connection.c:2705 #: ../libnm/nm-device.c:1587 @@ -9043,9 +9013,9 @@ msgid "VLAN" msgstr "VLAN" #: ../clients/tui/nm-editor-utils.c:210 -#, fuzzy, c-format +#, c-format msgid "VLAN connection %d" -msgstr "VPN-forbindelse fejlede" +msgstr "VLAN-forbindelse %d" #: ../clients/tui/nm-editor-utils.c:214 ../clients/tui/nmt-page-ip-tunnel.c:123 #, fuzzy @@ -9565,9 +9535,8 @@ msgid "WPA & WPA2 Personal" msgstr "WPA & WPA2 Personal" #: ../clients/tui/nmt-page-wifi.c:69 -#, fuzzy msgid "WPA3 Personal" -msgstr "WPA & WPA2 Personal" +msgstr "WPA3 Personal" #: ../clients/tui/nmt-page-wifi.c:70 msgid "WPA & WPA2 Enterprise" @@ -9725,9 +9694,8 @@ msgid "Could not deactivate connection: %s" msgstr "ingen aktiv forbindelse pÃ¥ enhed '%s'" #: ../clients/tui/nmtui-connect.c:252 -#, fuzzy msgid "Connecting..." -msgstr "forbinder" +msgstr "Opretter forbindelse ..." #: ../clients/tui/nmtui-connect.c:290 ../clients/tui/nmtui-connect.c:327 #, fuzzy, c-format @@ -9735,14 +9703,12 @@ msgid "Could not activate connection: %s" msgstr "ingen aktiv forbindelse pÃ¥ enhed '%s'" #: ../clients/tui/nmtui-connect.c:389 ../clients/tui/nmtui-connect.c:438 -#, fuzzy msgid "Activate" -msgstr "aktiveret" +msgstr "Aktivér" #: ../clients/tui/nmtui-connect.c:391 -#, fuzzy msgid "Deactivate" -msgstr "aktiveret" +msgstr "Deaktivér" #: ../clients/tui/nmtui-connect.c:443 ../clients/tui/nmtui-edit.c:105 #: ../clients/tui/nmtui.c:117 @@ -9778,9 +9744,8 @@ msgid "" msgstr "" #: ../clients/tui/nmtui-edit.c:401 ../clients/tui/nmtui-edit.c:417 -#, fuzzy msgid "New Connection" -msgstr "Bruger forbindelser" +msgstr "Ny forbindelse" #: ../clients/tui/nmtui-edit.c:456 #, fuzzy, c-format @@ -11023,9 +10988,8 @@ msgstr "ugyldigt felt '%s'" #: ../libnm-core/nm-setting-ip-config.c:1273 #: ../libnm-core/nm-setting-sriov.c:413 -#, fuzzy msgid "unknown attribute" -msgstr "ukendt Ã¥rsag" +msgstr "ukendt attribut" #: ../libnm-core/nm-setting-ip-config.c:1283 #: ../libnm-core/nm-setting-sriov.c:423 @@ -12748,8 +12712,7 @@ msgstr "Status for NetworkManager" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:4 #, fuzzy msgid "System policy prevents reloading NetworkManager" -msgstr "" -"Systempolitik forhindrer aktivering eller deaktivering af systemnetværk" +msgstr "Systempolitik forhindrer aktivering eller deaktivering af systemnetværk" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:5 msgid "" @@ -12812,8 +12775,7 @@ msgstr "Tillad kontrol af netværksforbindelser" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:16 #, fuzzy msgid "System policy prevents Wi-Fi scans" -msgstr "" -"Systempolitik forhindrer aktivering eller deaktivering af Wi-Fi-enheder" +msgstr "Systempolitik forhindrer aktivering eller deaktivering af Wi-Fi-enheder" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:17 msgid "Connection sharing via a protected Wi-Fi network" @@ -12891,8 +12853,7 @@ msgstr "Aktiver eller deaktiver Wi-Fi-enheder" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:32 #, fuzzy msgid "System policy prevents enabling or disabling device statistics" -msgstr "" -"Systempolitik forhindrer aktivering eller deaktivering af Wi-Fi-enheder" +msgstr "Systempolitik forhindrer aktivering eller deaktivering af Wi-Fi-enheder" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:33 #, fuzzy @@ -12902,8 +12863,7 @@ msgstr "Aktiver eller deaktiver systemnetværk" #: ../data/org.freedesktop.NetworkManager.policy.in.in.h:34 #, fuzzy msgid "System policy prevents enabling or disabling connectivity checking" -msgstr "" -"Systempolitik forhindrer aktivering eller deaktivering af systemnetværk" +msgstr "Systempolitik forhindrer aktivering eller deaktivering af systemnetværk" #: ../shared/nm-glib-aux/nm-shared-utils.c:2346 #, c-format @@ -13139,9 +13099,8 @@ msgid "connection does not match device" msgstr "ingen aktiv forbindelse eller enhed" #: ../src/devices/nm-device-6lowpan.c:177 -#, fuzzy msgid "6LOWPAN connection" -msgstr "VPN-forbinder" +msgstr "6LOWPAN-forbindelse" #: ../src/devices/nm-device-bond.c:57 #, fuzzy @@ -13159,19 +13118,17 @@ msgid "Dummy connection" msgstr "System forbindelser" #: ../src/devices/nm-device-ethernet.c:1618 -#, fuzzy msgid "PPPoE connection" -msgstr "VPN-forbinder" +msgstr "PPPoE-forbindelse" #: ../src/devices/nm-device-ethernet.c:1618 -#, fuzzy msgid "Wired connection" -msgstr "Aktive forbindelser" +msgstr "Kablet forbindelse" #: ../src/devices/nm-device-ethernet-utils.c:20 -#, fuzzy, c-format +#, c-format msgid "Wired connection %d" -msgstr "Aktive forbindelser" +msgstr "Kablet forbindelse %d" #: ../src/devices/nm-device-ip-tunnel.c:408 #, fuzzy @@ -13179,19 +13136,16 @@ msgid "IP tunnel connection" msgstr "System forbindelser" #: ../src/devices/nm-device-macvlan.c:365 -#, fuzzy msgid "MACVLAN connection" -msgstr "VPN-forbinder" +msgstr "MACVLAN-forbindelse" #: ../src/devices/nm-device-tun.c:142 -#, fuzzy msgid "TUN connection" -msgstr "Bruger forbindelser" +msgstr "TUN-forbindelse" #: ../src/devices/nm-device-wpan.c:54 -#, fuzzy msgid "WPAN connection" -msgstr "VPN-forbinder" +msgstr "WPAN-forbindelse" #: ../src/devices/team/nm-device-team.c:89 #, fuzzy @@ -13534,55 +13488,3 @@ msgstr "Ukendt logningsniveau '%s'" #, c-format msgid "Unknown log domain '%s'" msgstr "Ukendt logningsdomæne '%s'" - -#, c-format -#~ msgid "missing colon in 'password' entry '%s'" -#~ msgstr "manglende kolon i 'password'-indslaget '%s'" - -#, c-format -#~ msgid "missing dot in 'password' entry '%s'" -#~ msgstr "manglende punktum i 'password'-indslaget '%s'" - -#, c-format -#~ msgid "invalid setting name in 'password' entry '%s'" -#~ msgstr "ugyldig indstillingsnavn i 'password'-indslaget '%s'" - -#, c-format -#~ msgid "Unknown parameter: %s\n" -#~ msgstr "Ukendt parameter: %s\n" - -#, c-format -#~ msgid "Error: '%s': %s" -#~ msgstr "Fejl: '%s': %s" - -#, c-format -#~ msgid "Error: error adding bond option '%s=%s'." -#~ msgstr "Fejl: fejl ved tilføjelse af bindingstilvalget '%s=%s'." - -#, c-format -#~ msgid "Unknown parameter: %s" -#~ msgstr "Ukendt parameter: %s" - -#, fuzzy, c-format -#~ msgid "Error: Device activation failed: device was disconnected" -#~ msgstr "Fejl: Forbindelsesaktivering fejlede: %s" - -#, fuzzy, c-format -#~ msgid "Error: Unknown parameter %s." -#~ msgstr "Ukendt parameter: %s\n" - -#, fuzzy, c-format -#~ msgid "Authentication message: %s\n" -#~ msgstr "Aktiv forbindelsestilstand: %s\n" - -#, fuzzy, c-format -#~ msgid "Authentication error: %s\n" -#~ msgstr "Aktiv forbindelsestilstand: %s\n" - -#, fuzzy, c-format -#~ msgid "'%s' is not valid master; use ifname or connection UUID" -#~ msgstr "Fejl: '%s' er ikke et gyldigt argument for tilvalget '%s'." - -#, fuzzy, c-format -#~ msgid "unknown link watcher \"%s\"" -#~ msgstr "Ukendt logningsdomæne '%s'" @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/NetworkManager/NetworkMan" "ager/issues\n" -"POT-Creation-Date: 2020-10-11 03:28+0000\n" -"PO-Revision-Date: 2020-10-11 12:06+0300\n" +"POT-Creation-Date: 2020-11-29 03:30+0000\n" +"PO-Revision-Date: 2020-11-29 10:14+0200\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n" "Language: uk\n" @@ -108,7 +108,7 @@ msgstr "Помилка: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ агеР#: ../clients/cli/common.c:342 ../clients/cli/common.c:343 #: ../clients/cli/common.c:373 ../clients/cli/common.c:374 -#: ../clients/cli/connections.c:1568 +#: ../clients/cli/connections.c:1569 msgid "GROUP" msgstr "ГРУПÐ" @@ -178,8 +178,8 @@ msgstr "Помилка: помилка під Ñ‡Ð°Ñ Ñпроби з'єднатР#: ../clients/common/nm-client-utils.c:320 #: ../clients/common/nm-meta-setting-desc.c:1766 #: ../clients/common/nm-meta-setting-desc.c:1797 -#: ../clients/common/nm-meta-setting-desc.c:2738 -#: ../clients/common/nm-meta-setting-desc.c:2795 +#: ../clients/common/nm-meta-setting-desc.c:2741 +#: ../clients/common/nm-meta-setting-desc.c:2798 msgid "unknown" msgstr "невідомо" @@ -277,7 +277,7 @@ msgstr "VPN роз'єднано" msgid "never" msgstr "ніколи" -#: ../clients/cli/connections.c:922 +#: ../clients/cli/connections.c:923 #, c-format msgid "" "Usage: nmcli connection { COMMAND | help }\n" @@ -355,7 +355,7 @@ msgstr "" " export [id | uuid | path] <ідентифікатор> [<файл результатів>]\n" "\n" -#: ../clients/cli/connections.c:948 +#: ../clients/cli/connections.c:949 #, c-format msgid "" "Usage: nmcli connection show { ARGUMENTS | help }\n" @@ -403,7 +403,7 @@ msgstr "" "Якщо вказано параметр «--active», братимутьÑÑ Ð´Ð¾ уваги лише активні профілі. " "Загальний параметр --show-secrets покаже також пов'Ñзані паролі.\n" -#: ../clients/cli/connections.c:969 +#: ../clients/cli/connections.c:970 #, c-format msgid "" "Usage: nmcli connection up { ARGUMENTS | help }\n" @@ -449,7 +449,7 @@ msgstr "" "passwd-file - файл з паролÑми, потрібними Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— з'єднаннÑ\n" "\n" -#: ../clients/cli/connections.c:992 +#: ../clients/cli/connections.c:993 #, c-format msgid "" "Usage: nmcli connection down { ARGUMENTS | help }\n" @@ -471,7 +471,7 @@ msgstr "" "назвою, UUID або шлÑхом D-Bus.\n" "\n" -#: ../clients/cli/connections.c:1004 +#: ../clients/cli/connections.c:1005 #, c-format msgid "" "Usage: nmcli connection add { ARGUMENTS | help }\n" @@ -601,7 +601,7 @@ msgid "" " [tap yes|no]\n" "\n" " vxlan: id <VXLAN ID>\n" -" remote <IP of multicast group or remote address>\n" +" [remote <IP of multicast group or remote address>]\n" " [local <source IP>]\n" " [dev <parent device (ifname or connection UUID)>]\n" " [source-port-min <0-65535>]\n" @@ -763,7 +763,7 @@ msgstr "" " [tap yes|no]\n" "\n" " vxlan: id <ідентифікатор VXLAN>\n" -" remote <IP групи транÑлÑції або віддалена адреÑа>\n" +" [remote <IP групи транÑлÑції або віддалена адреÑа>]\n" " [local <IP джерела>]\n" " [dev <батьківÑький приÑтрій (назва інтерфейÑу або UUID " "з'єднаннÑ)>]\n" @@ -793,7 +793,7 @@ msgstr "" " [ip6 <адреÑа IPv6>] [gw6 <шлюз IPv6>]\n" "\n" -#: ../clients/cli/connections.c:1132 +#: ../clients/cli/connections.c:1133 #, c-format msgid "" "Usage: nmcli connection modify { ARGUMENTS | help }\n" @@ -850,7 +850,7 @@ msgstr "" "nmcli con mod em1-1 remove sriov\n" "\n" -#: ../clients/cli/connections.c:1160 +#: ../clients/cli/connections.c:1161 #, c-format msgid "" "Usage: nmcli connection clone { ARGUMENTS | help }\n" @@ -873,7 +873,7 @@ msgstr "" "ідентифікатора (задаєтьÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ <нова назва>).\n" "\n" -#: ../clients/cli/connections.c:1172 +#: ../clients/cli/connections.c:1173 #, c-format msgid "" "Usage: nmcli connection edit { ARGUMENTS | help }\n" @@ -901,7 +901,7 @@ msgstr "" "Додати новий профіль з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою інтерактивного редактора.\n" "\n" -#: ../clients/cli/connections.c:1187 +#: ../clients/cli/connections.c:1188 #, c-format msgid "" "Usage: nmcli connection delete { ARGUMENTS | help }\n" @@ -920,7 +920,7 @@ msgstr "" "Профіль можна вказати за допомогою назви, UUID або шлÑху D-Bus.\n" "\n" -#: ../clients/cli/connections.c:1198 +#: ../clients/cli/connections.c:1199 #, c-format msgid "" "Usage: nmcli connection monitor { ARGUMENTS | help }\n" @@ -942,7 +942,7 @@ msgstr "" "Стежить за уÑіма профілÑми з'єднань, Ñкщо конкретний профіль не вказано.\n" "\n" -#: ../clients/cli/connections.c:1210 +#: ../clients/cli/connections.c:1211 #, c-format msgid "" "Usage: nmcli connection reload { help }\n" @@ -955,7 +955,7 @@ msgstr "" "Перезавантажити уÑÑ–Ñ… файли з'єднань з диÑка.\n" "\n" -#: ../clients/cli/connections.c:1218 +#: ../clients/cli/connections.c:1219 #, c-format msgid "" "Usage: nmcli connection load { ARGUMENTS | help }\n" @@ -978,7 +978,7 @@ msgstr "" "того, щоб завантажити до NetworkManager найÑвіжіші налаштуваннÑ.\n" "\n" -#: ../clients/cli/connections.c:1231 +#: ../clients/cli/connections.c:1232 #, c-format msgid "" "Usage: nmcli connection import { ARGUMENTS | help }\n" @@ -1003,7 +1003,7 @@ msgstr "" "імпортуютьÑÑ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ°Ð¼Ð¸ VPN NetworkManager.\n" "\n" -#: ../clients/cli/connections.c:1244 +#: ../clients/cli/connections.c:1245 #, c-format msgid "" "Usage: nmcli connection export { ARGUMENTS | help }\n" @@ -1023,81 +1023,81 @@ msgstr "" "Дані ÑпрÑмовуватимутьÑÑ Ð´Ð¾ Ñтандартного Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ до вказаного файла.\n" "\n" -#: ../clients/cli/connections.c:1335 +#: ../clients/cli/connections.c:1336 #, c-format msgid "Error updating secrets for %s: %s\n" msgstr "Помилка під Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð¸ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ %s: %s\n" -#: ../clients/cli/connections.c:1386 +#: ../clients/cli/connections.c:1387 msgid "Connection profile details" msgstr "Параметри профілю з'єднаннÑ" -#: ../clients/cli/connections.c:1403 ../clients/cli/connections.c:1513 +#: ../clients/cli/connections.c:1404 ../clients/cli/connections.c:1514 #, c-format msgid "Error: 'connection show': %s" msgstr "Помилка: «connection show»: %s" -#: ../clients/cli/connections.c:1496 +#: ../clients/cli/connections.c:1497 msgid "Activate connection details" msgstr "Ðктивувати параметри з'єднаннÑ" -#: ../clients/cli/connections.c:1625 ../clients/cli/devices.c:1599 +#: ../clients/cli/connections.c:1626 ../clients/cli/devices.c:1599 #: ../clients/cli/devices.c:1616 ../clients/cli/devices.c:1634 #: ../clients/cli/devices.c:1653 ../clients/cli/devices.c:1720 #: ../clients/cli/devices.c:1849 msgid "NAME" msgstr "ÐÐЗВÐ" -#: ../clients/cli/connections.c:1725 +#: ../clients/cli/connections.c:1726 #, c-format msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s" msgstr "некоректне поле «%s»; дозволені полÑ: %s Ñ– %s або %s,%s" -#: ../clients/cli/connections.c:1742 ../clients/cli/connections.c:1753 +#: ../clients/cli/connections.c:1743 ../clients/cli/connections.c:1754 #, c-format msgid "'%s' has to be alone" msgstr "«%s» має бути єдиним" -#: ../clients/cli/connections.c:2007 +#: ../clients/cli/connections.c:2008 #, c-format msgid "incorrect string '%s' of '--order' option" msgstr "помилковий Ñ€Ñдок «%s» у параметрі «--order»" -#: ../clients/cli/connections.c:2031 +#: ../clients/cli/connections.c:2032 #, c-format msgid "incorrect item '%s' in '--order' option" msgstr "помилковий пункт «%s» у параметрі «--order»" -#: ../clients/cli/connections.c:2071 +#: ../clients/cli/connections.c:2072 msgid "No connection specified" msgstr "Ðе вказано з'єднаннÑ" -#: ../clients/cli/connections.c:2084 +#: ../clients/cli/connections.c:2085 #, c-format msgid "%s argument is missing" msgstr "пропущено аргумент %s" -#: ../clients/cli/connections.c:2105 +#: ../clients/cli/connections.c:2106 #, c-format msgid "unknown connection '%s'" msgstr "невідоме з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»" -#: ../clients/cli/connections.c:2134 +#: ../clients/cli/connections.c:2135 msgid "'--order' argument is missing" msgstr "пропущено аргумент «--order»" -#: ../clients/cli/connections.c:2198 +#: ../clients/cli/connections.c:2199 msgid "NetworkManager active profiles" msgstr "Ðктивні профілі NetworkManager" -#: ../clients/cli/connections.c:2199 +#: ../clients/cli/connections.c:2200 msgid "NetworkManager connection profiles" msgstr "Профілі з'єднань NetworkManager" -#: ../clients/cli/connections.c:2255 ../clients/cli/connections.c:2966 -#: ../clients/cli/connections.c:2978 ../clients/cli/connections.c:2990 -#: ../clients/cli/connections.c:3226 ../clients/cli/connections.c:9293 -#: ../clients/cli/connections.c:9315 ../clients/cli/devices.c:3285 +#: ../clients/cli/connections.c:2256 ../clients/cli/connections.c:2967 +#: ../clients/cli/connections.c:2979 ../clients/cli/connections.c:2991 +#: ../clients/cli/connections.c:3227 ../clients/cli/connections.c:9295 +#: ../clients/cli/connections.c:9317 ../clients/cli/devices.c:3285 #: ../clients/cli/devices.c:3298 ../clients/cli/devices.c:3310 #: ../clients/cli/devices.c:3614 ../clients/cli/devices.c:3625 #: ../clients/cli/devices.c:3644 ../clients/cli/devices.c:3653 @@ -1112,14 +1112,14 @@ msgstr "Профілі з'єднань NetworkManager" msgid "Error: %s argument is missing." msgstr "Помилка: пропущено аргумент %s." -#: ../clients/cli/connections.c:2290 +#: ../clients/cli/connections.c:2291 #, c-format msgid "Error: %s - no such connection profile." msgstr "Помилка: профілю з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %s не Ñ–Ñнує." -#: ../clients/cli/connections.c:2382 ../clients/cli/connections.c:2952 -#: ../clients/cli/connections.c:3026 ../clients/cli/connections.c:8827 -#: ../clients/cli/connections.c:8917 ../clients/cli/connections.c:9422 +#: ../clients/cli/connections.c:2383 ../clients/cli/connections.c:2953 +#: ../clients/cli/connections.c:3027 ../clients/cli/connections.c:8829 +#: ../clients/cli/connections.c:8919 ../clients/cli/connections.c:9424 #: ../clients/cli/devices.c:1949 ../clients/cli/devices.c:2219 #: ../clients/cli/devices.c:2392 ../clients/cli/devices.c:2516 #: ../clients/cli/devices.c:2703 ../clients/cli/devices.c:3485 @@ -1129,76 +1129,76 @@ msgstr "Помилка: профілю з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %s не Ñ–Ñнує." msgid "Error: %s." msgstr "Помилка: %s." -#: ../clients/cli/connections.c:2474 ../clients/cli/devices.c:4674 +#: ../clients/cli/connections.c:2475 ../clients/cli/devices.c:4674 #, c-format msgid "no active connection on device '%s'" msgstr "на приÑтрої «%s» немає активних з'єднань" -#: ../clients/cli/connections.c:2482 +#: ../clients/cli/connections.c:2483 msgid "no active connection or device" msgstr "немає активних з'єднань або приÑтроїв" -#: ../clients/cli/connections.c:2503 +#: ../clients/cli/connections.c:2504 #, c-format msgid "device '%s' not compatible with connection '%s': " msgstr "приÑтрій «%s» неÑуміÑний зі з'єднаннÑм «%s»: " -#: ../clients/cli/connections.c:2540 +#: ../clients/cli/connections.c:2541 #, c-format msgid "device '%s' not compatible with connection '%s'" msgstr "приÑтрій «%s» неÑуміÑний зі з'єднаннÑм «%s»" -#: ../clients/cli/connections.c:2547 +#: ../clients/cli/connections.c:2548 #, c-format msgid "no device found for connection '%s'" msgstr "не виÑвлено приÑтрою Ð´Ð»Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»" -#: ../clients/cli/connections.c:2598 +#: ../clients/cli/connections.c:2599 #, c-format msgid "Hint: use '%s' to get more details." msgstr "Підказка: ÑкориÑтайтеÑÑ Â«%s», щоб ознайомитиÑÑ Ñ–Ð· подробицÑми." -#: ../clients/cli/connections.c:2616 +#: ../clients/cli/connections.c:2617 #, c-format msgid "Connection successfully activated (%s) (D-Bus active path: %s)\n" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÑƒÑпішно задіÑно (%s) (активний шлÑÑ… D-Bus: %s)\n" -#: ../clients/cli/connections.c:2620 ../clients/cli/connections.c:2771 -#: ../clients/cli/connections.c:7109 +#: ../clients/cli/connections.c:2621 ../clients/cli/connections.c:2772 +#: ../clients/cli/connections.c:7111 #, c-format msgid "Connection successfully activated (D-Bus active path: %s)\n" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÑƒÑпішно задіÑно (активний шлÑÑ… D-Bus: %s)\n" -#: ../clients/cli/connections.c:2627 ../clients/cli/connections.c:2750 +#: ../clients/cli/connections.c:2628 ../clients/cli/connections.c:2751 #, c-format msgid "Error: Connection activation failed: %s" msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з'єднаннÑ: %s" -#: ../clients/cli/connections.c:2663 +#: ../clients/cli/connections.c:2664 #, c-format msgid "Error: Timeout expired (%d seconds)" msgstr "Помилка: перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ (%d Ñекунд)." -#: ../clients/cli/connections.c:2846 +#: ../clients/cli/connections.c:2847 #, c-format msgid "unknown device '%s'." msgstr "невідомий приÑтрій, «%s»." -#: ../clients/cli/connections.c:2854 +#: ../clients/cli/connections.c:2855 msgid "neither a valid connection nor device given" msgstr "не вказано ні коректного з'єднаннÑ, ні приÑтрою" -#: ../clients/cli/connections.c:2869 +#: ../clients/cli/connections.c:2870 #, c-format msgid "invalid passwd-file '%s' at line %zd: %s" msgstr "некоректний файл passwd «%s» у Ñ€Ñдку %zd: %s" -#: ../clients/cli/connections.c:2877 +#: ../clients/cli/connections.c:2878 #, c-format msgid "invalid passwd-file '%s': %s" msgstr "некоректний файл passwd «%s»: %s" -#: ../clients/cli/connections.c:3000 ../clients/cli/connections.c:9326 +#: ../clients/cli/connections.c:3001 ../clients/cli/connections.c:9328 #: ../clients/cli/devices.c:1906 ../clients/cli/devices.c:1955 #: ../clients/cli/devices.c:2398 ../clients/cli/devices.c:3345 #: ../clients/cli/devices.c:3723 ../clients/cli/devices.c:4343 @@ -1208,162 +1208,157 @@ msgstr "некоректний файл passwd «%s»: %s" msgid "Error: invalid extra argument '%s'." msgstr "Помилка: некоректний додатковий аргумент, «%s»." -#: ../clients/cli/connections.c:3034 +#: ../clients/cli/connections.c:3035 msgid "preparing" msgstr "приготуваннÑ" -#: ../clients/cli/connections.c:3142 +#: ../clients/cli/connections.c:3143 #, c-format msgid "Connection '%s' (%s) successfully deleted.\n" msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно вилучено.\n" -#: ../clients/cli/connections.c:3158 +#: ../clients/cli/connections.c:3159 #, c-format msgid "Connection '%s' successfully deactivated (D-Bus active path: %s)\n" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» уÑпішно вимкнено (активний шлÑÑ… D-Bus: %s)\n" -#: ../clients/cli/connections.c:3207 ../clients/cli/connections.c:9013 -#: ../clients/cli/connections.c:9045 ../clients/cli/connections.c:9220 +#: ../clients/cli/connections.c:3208 ../clients/cli/connections.c:9015 +#: ../clients/cli/connections.c:9047 ../clients/cli/connections.c:9222 #, c-format msgid "Error: No connection specified." msgstr "Помилка: не вказано з'єднаннÑ." -#: ../clients/cli/connections.c:3239 +#: ../clients/cli/connections.c:3240 #, c-format msgid "Error: '%s' is not an active connection.\n" msgstr "Помилка: «%s» не Ñ” активним з'єднаннÑм.\n" -#: ../clients/cli/connections.c:3240 +#: ../clients/cli/connections.c:3241 #, c-format msgid "Error: not all active connections found." msgstr "Помилка: не уÑÑ– активні з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾." -#: ../clients/cli/connections.c:3248 +#: ../clients/cli/connections.c:3249 #, c-format msgid "Error: no active connection provided." msgstr "Помилка: не надано активного з'єднаннÑ." -#: ../clients/cli/connections.c:3280 +#: ../clients/cli/connections.c:3281 #, c-format msgid "Connection '%s' deactivation failed: %s\n" msgstr "Ðевдала Ñпроба вимкнути з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s\n" -#: ../clients/cli/connections.c:3542 ../clients/cli/connections.c:3600 +#: ../clients/cli/connections.c:3543 ../clients/cli/connections.c:3601 #: ../clients/common/nm-client-utils.c:224 #, c-format msgid "'%s' not among [%s]" msgstr "«%s» немає Ñеред [%s]" #. We should not really come here -#: ../clients/cli/connections.c:3562 ../clients/cli/connections.c:3621 +#: ../clients/cli/connections.c:3563 ../clients/cli/connections.c:3622 #: ../clients/common/nm-client-utils.c:328 #, c-format msgid "Unknown error" msgstr "Ðевідома помилка" -#: ../clients/cli/connections.c:3754 +#: ../clients/cli/connections.c:3755 #, c-format msgid "Warning: master='%s' doesn't refer to any existing profile.\n" msgstr "" "ПопередженнÑ: master='%s' не поÑилаєтьÑÑ Ð½Ñ– на один з наÑвних профілів.\n" -#: ../clients/cli/connections.c:4129 +#: ../clients/cli/connections.c:4130 #, c-format msgid "Error: invalid property '%s': %s." msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ, «%s»: %s." -#: ../clients/cli/connections.c:4146 +#: ../clients/cli/connections.c:4147 #, c-format msgid "Error: failed to %s %s.%s: %s." msgstr "Помилка: не вдалоÑÑ %s %s.%s: %s." -#: ../clients/cli/connections.c:4199 +#: ../clients/cli/connections.c:4200 #, c-format msgid "Error: '%s' is mandatory." msgstr "Помилка: «%s» Ñ” обов'Ñзковим." -#: ../clients/cli/connections.c:4232 +#: ../clients/cli/connections.c:4233 #, c-format msgid "Error: invalid slave type; %s." msgstr "Помилка: некоректний тип підлеглого; %s." -#: ../clients/cli/connections.c:4243 +#: ../clients/cli/connections.c:4244 #, c-format msgid "Error: invalid connection type; %s." msgstr "Помилка: некоректний тип з'єднаннÑ; %s." -#: ../clients/cli/connections.c:4334 +#: ../clients/cli/connections.c:4335 #, c-format msgid "Error: bad connection type: %s" msgstr "Помилка: помилковий тип з'єднаннÑ: %s" -#: ../clients/cli/connections.c:4419 +#: ../clients/cli/connections.c:4420 msgid "Error: master is required" msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «master»" -#: ../clients/cli/connections.c:4520 +#: ../clients/cli/connections.c:4521 #, c-format msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n" msgstr "" "Помилка: «%s» не Ñ” коректним режимом ÑпоÑтереженнÑ; ÑкориÑтайтеÑÑ Â«%s» або " "«%s».\n" -#: ../clients/cli/connections.c:4561 +#: ../clients/cli/connections.c:4562 #, c-format msgid "Error: 'bt-type': '%s' not valid; use [%s, %s, %s (%s), %s]." msgstr "" "Помилка: «bt-type»: «%s» Ñ” некоректним; ÑкориÑтайтеÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм з переліку " "[%s, %s, %s (%s), %s]." -#: ../clients/cli/connections.c:4908 +#: ../clients/cli/connections.c:4909 #, c-format msgid "Error: setting '%s' is mandatory and cannot be removed." msgstr "Помилка: параметр «%s» Ñ” обов'Ñзковим, його не можна вилучати." -#: ../clients/cli/connections.c:4924 +#: ../clients/cli/connections.c:4925 #, c-format msgid "Error: value for '%s' is missing." msgstr "Помилка: не вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»." -#: ../clients/cli/connections.c:4971 +#: ../clients/cli/connections.c:4976 msgid "Error: <setting>.<property> argument is missing." msgstr "Помилка: пропущено аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>." -#: ../clients/cli/connections.c:5013 +#: ../clients/cli/connections.c:5018 msgid "Error: missing setting." msgstr "Помилка: пропущено параметр." -#: ../clients/cli/connections.c:5027 -#, c-format -msgid "Setting '%s' is not present in the connection." -msgstr "У з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s»." - -#: ../clients/cli/connections.c:5033 +#: ../clients/cli/connections.c:5032 #, c-format msgid "Error: invalid setting argument '%s'." msgstr "Помилка: некоректний аргумент параметра, «%s»." -#: ../clients/cli/connections.c:5059 +#: ../clients/cli/connections.c:5063 #, c-format msgid "Error: invalid or not allowed setting '%s': %s." msgstr "Помилка: некоректний або заборонений параметр, «%s»: %s." -#: ../clients/cli/connections.c:5120 ../clients/cli/connections.c:5141 +#: ../clients/cli/connections.c:5122 ../clients/cli/connections.c:5143 #, c-format msgid "Error: '%s' is ambiguous (%s.%s or %s.%s)." msgstr "Помилка: «%s» Ñ” неоднозначним (%s.%s або %s.%s)." -#: ../clients/cli/connections.c:5165 +#: ../clients/cli/connections.c:5167 #, c-format msgid "Error: invalid <setting>.<property> '%s'." msgstr "Помилка: некоректний аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>, «%s»." -#: ../clients/cli/connections.c:5202 ../clients/cli/connections.c:8865 +#: ../clients/cli/connections.c:5204 ../clients/cli/connections.c:8867 #, c-format msgid "Error: Failed to add '%s' connection: %s" msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s" -#: ../clients/cli/connections.c:5221 +#: ../clients/cli/connections.c:5223 #, c-format msgid "" "Warning: There is another connection with the name '%1$s'. Reference the " @@ -1384,32 +1379,32 @@ msgstr[3] "" "ПопередженнÑ: Ñ–Ñнує інше з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· назвою «%1$s». ПоÑилайтеÑÑ Ð½Ð° з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ " "за його UUID, «%2$s»\n" -#: ../clients/cli/connections.c:5232 +#: ../clients/cli/connections.c:5234 #, c-format msgid "Connection '%s' (%s) successfully added.\n" msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно додано.\n" -#: ../clients/cli/connections.c:5289 ../clients/cli/connections.c:7216 -#: ../clients/cli/connections.c:7217 ../clients/cli/devices.c:577 +#: ../clients/cli/connections.c:5291 ../clients/cli/connections.c:7218 +#: ../clients/cli/connections.c:7219 ../clients/cli/devices.c:577 #: ../clients/cli/devices.c:583 ../clients/cli/devices.c:1346 #: ../clients/cli/general.c:92 ../clients/cli/utils.h:311 #: ../clients/common/nm-client-utils.c:317 #: ../clients/common/nm-meta-setting-desc.c:877 -#: ../clients/common/nm-meta-setting-desc.c:2733 +#: ../clients/common/nm-meta-setting-desc.c:2736 msgid "no" msgstr "ні" -#: ../clients/cli/connections.c:5290 ../clients/cli/connections.c:7216 -#: ../clients/cli/connections.c:7217 ../clients/cli/devices.c:577 +#: ../clients/cli/connections.c:5292 ../clients/cli/connections.c:7218 +#: ../clients/cli/connections.c:7219 ../clients/cli/devices.c:577 #: ../clients/cli/devices.c:583 ../clients/cli/devices.c:1346 #: ../clients/cli/general.c:91 ../clients/cli/utils.h:311 #: ../clients/common/nm-client-utils.c:316 #: ../clients/common/nm-meta-setting-desc.c:877 -#: ../clients/common/nm-meta-setting-desc.c:2730 +#: ../clients/common/nm-meta-setting-desc.c:2733 msgid "yes" msgstr "так" -#: ../clients/cli/connections.c:5376 +#: ../clients/cli/connections.c:5378 #, c-format msgid "" "You can specify this option more than once. Press <Enter> when you're done.\n" @@ -1418,7 +1413,7 @@ msgstr "" "завершите.\n" #. Ask for optional arguments. -#: ../clients/cli/connections.c:5476 +#: ../clients/cli/connections.c:5478 #, c-format msgid "There is %d optional setting for %s.\n" msgid_plural "There are %d optional settings for %s.\n" @@ -1427,7 +1422,7 @@ msgstr[1] "Ð”Ð»Ñ Â«%2$s» передбачено %1$d додатковий па msgstr[2] "Ð”Ð»Ñ Ð·'єднань типу «%2$s» передбачено %1$d додаткових аргументів.\n" msgstr[3] "Ð”Ð»Ñ Ð·'єднань типу «%2$s» передбачено %1$d додатковий аргумент.\n" -#: ../clients/cli/connections.c:5483 +#: ../clients/cli/connections.c:5485 #, c-format msgid "Do you want to provide it? %s" msgid_plural "Do you want to provide them? %s" @@ -1436,22 +1431,22 @@ msgstr[1] "Хочете вказати Ñ—Ñ…? %s" msgstr[2] "Хочете вказати Ñ—Ñ…? %s" msgstr[3] "Хочете вказати його? %s" -#: ../clients/cli/connections.c:5610 ../clients/cli/utils.c:280 +#: ../clients/cli/connections.c:5612 ../clients/cli/utils.c:280 #, c-format msgid "Error: value for '%s' argument is required." msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» аргументу." -#: ../clients/cli/connections.c:5617 +#: ../clients/cli/connections.c:5619 #, c-format msgid "Error: 'save': %s." msgstr "Помилка: «save»: %s." -#: ../clients/cli/connections.c:5702 ../clients/cli/connections.c:5715 +#: ../clients/cli/connections.c:5704 ../clients/cli/connections.c:5717 #, c-format msgid "Error: '%s' argument is required." msgstr "Помилка: Ñлід вказати параметр «%s»." -#: ../clients/cli/connections.c:6666 +#: ../clients/cli/connections.c:6668 #, c-format msgid "['%s' setting values]\n" msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n" @@ -1459,7 +1454,7 @@ msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n" #. TRANSLATORS: do not translate command names and keywords before :: #. * However, you should translate terms enclosed in <>. #. -#: ../clients/cli/connections.c:6774 +#: ../clients/cli/connections.c:6776 #, c-format msgid "" "---[ Main menu ]---\n" @@ -1493,7 +1488,7 @@ msgstr "" "nmcli <параметр-налашт.> <знач.> :: Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli\n" "quit :: завершити роботу nmcli\n" -#: ../clients/cli/connections.c:6801 +#: ../clients/cli/connections.c:6803 #, c-format msgid "" "goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n" @@ -1514,7 +1509,7 @@ msgstr "" " nmcli connection> goto secondaries\n" " nmcli> goto ipv4.addresses\n" -#: ../clients/cli/connections.c:6809 +#: ../clients/cli/connections.c:6811 #, c-format msgid "" "remove <setting>[.<prop>] :: remove setting or reset property value\n" @@ -1536,7 +1531,7 @@ msgstr "" "Приклади: nmcli> remove wifi-sec\n" " nmcli> remove eth.mtu\n" -#: ../clients/cli/connections.c:6816 +#: ../clients/cli/connections.c:6818 #, c-format msgid "" "set [<setting>.<prop> <value>] :: set property value\n" @@ -1552,7 +1547,7 @@ msgstr "" "\n" "Приклад: nmcli> s con.id My connection\n" -#: ../clients/cli/connections.c:6821 +#: ../clients/cli/connections.c:6823 #, c-format msgid "" "describe [<setting>.<prop>] :: describe property\n" @@ -1565,7 +1560,7 @@ msgstr "" "Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна " "знайти на Ñторінці довідника (man) nm-settings(5).\n" -#: ../clients/cli/connections.c:6826 +#: ../clients/cli/connections.c:6828 #, c-format msgid "" "print [all] :: print setting or connection values\n" @@ -1580,7 +1575,7 @@ msgstr "" "\n" "Приклад: nmcli ipv4> print all\n" -#: ../clients/cli/connections.c:6832 +#: ../clients/cli/connections.c:6834 #, c-format msgid "" "verify [all | fix] :: verify setting or connection validity\n" @@ -1605,7 +1600,7 @@ msgstr "" " nmcli> verify fix\n" " nmcli bond> verify\n" -#: ../clients/cli/connections.c:6842 +#: ../clients/cli/connections.c:6844 #, c-format msgid "" "save [persistent|temporary] :: save the connection\n" @@ -1632,7 +1627,7 @@ msgstr "" "потрібно\n" "повніÑÑ‚ÑŽ вилучити поÑтійне з'єднаннÑ, вам доведетьÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ його профіль.\n" -#: ../clients/cli/connections.c:6853 +#: ../clients/cli/connections.c:6855 #, c-format msgid "" "activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n" @@ -1653,7 +1648,7 @@ msgstr "" "/<ap>|<nsp> - AP (Wi-Fi) або NSP (WiMAX) (додайте на початку «/», Ñкщо не " "вказано <інтерфейÑ>)\n" -#: ../clients/cli/connections.c:6861 ../clients/cli/connections.c:7020 +#: ../clients/cli/connections.c:6863 ../clients/cli/connections.c:7022 #, c-format msgid "" "back :: go to upper menu level\n" @@ -1662,7 +1657,7 @@ msgstr "" "back :: піднÑтиÑÑ Ñƒ меню на один рівень\n" "\n" -#: ../clients/cli/connections.c:6864 +#: ../clients/cli/connections.c:6866 #, c-format msgid "" "help/? [<command>] :: help for the nmcli commands\n" @@ -1671,7 +1666,7 @@ msgstr "" "help/? [<команда>] :: довідка з команди nmcli\n" "\n" -#: ../clients/cli/connections.c:6867 +#: ../clients/cli/connections.c:6869 #, c-format msgid "" "nmcli [<conf-option> <value>] :: nmcli configuration\n" @@ -1698,7 +1693,7 @@ msgstr "" " nmcli> nmcli save-confirmation no\n" " nmcli> nmcli prompt-color 3\n" -#: ../clients/cli/connections.c:6889 ../clients/cli/connections.c:7026 +#: ../clients/cli/connections.c:6891 ../clients/cli/connections.c:7028 #, c-format msgid "" "quit :: exit nmcli\n" @@ -1712,8 +1707,8 @@ msgstr "" "Ð·Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ було збережено, кориÑтувачеві буде запропоновано " "підтвердити дію з виходу з програми.\n" -#: ../clients/cli/connections.c:6894 ../clients/cli/connections.c:7031 -#: ../clients/cli/connections.c:7418 ../clients/cli/connections.c:8438 +#: ../clients/cli/connections.c:6896 ../clients/cli/connections.c:7033 +#: ../clients/cli/connections.c:7420 ../clients/cli/connections.c:8440 #, c-format msgid "Unknown command: '%s'\n" msgstr "Ðевідома команда «%s».\n" @@ -1721,7 +1716,7 @@ msgstr "Ðевідома команда «%s».\n" #. TRANSLATORS: do not translate command names and keywords before :: #. * However, you should translate terms enclosed in <>. #. -#: ../clients/cli/connections.c:6959 +#: ../clients/cli/connections.c:6961 #, c-format msgid "" "---[ Property menu ]---\n" @@ -1748,7 +1743,7 @@ msgstr "" "help/? [<команда>] :: вивеÑти цю довідку або Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸\n" "quit :: вийти з nmcli\n" -#: ../clients/cli/connections.c:6983 +#: ../clients/cli/connections.c:6985 #, c-format msgid "" "set [<value>] :: set new value\n" @@ -1760,7 +1755,7 @@ msgstr "" "За допомогою цієї команди можна змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– на вказане " "<значеннÑ>\n" -#: ../clients/cli/connections.c:6987 +#: ../clients/cli/connections.c:6989 #, c-format msgid "" "add [<value>] :: append new value to the property\n" @@ -1775,7 +1770,7 @@ msgstr "" "Ñкщо влаÑтивіÑÑ‚ÑŒ належить до типу контейнерів. Якщо влаÑтивіÑÑ‚ÑŒ ÑкладаєтьÑÑ " "лише з одного значеннÑ, це Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ замінено (те Ñаме, що Ñ– «set»).\n" -#: ../clients/cli/connections.c:6993 +#: ../clients/cli/connections.c:6995 #, c-format msgid "" "change :: change current value\n" @@ -1786,7 +1781,7 @@ msgstr "" "\n" "Показує поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– надає змогу його редагувати.\n" -#: ../clients/cli/connections.c:6998 +#: ../clients/cli/connections.c:7000 #, c-format msgid "" "remove [<value>|<index>|<option name>] :: delete the value\n" @@ -1819,7 +1814,7 @@ msgstr "" " nmcli bond.options> remove downdelay\n" "\n" -#: ../clients/cli/connections.c:7009 +#: ../clients/cli/connections.c:7011 #, c-format msgid "" "describe :: describe property\n" @@ -1832,7 +1827,7 @@ msgstr "" "Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна " "знайти на Ñторінці довідника (man) nm-settings(5).\n" -#: ../clients/cli/connections.c:7014 +#: ../clients/cli/connections.c:7016 #, c-format msgid "" "print [property|setting|connection] :: print property (setting, connection) " @@ -1847,7 +1842,7 @@ msgstr "" "Виводить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. За допомогою аргументу команди ви можете " "виводити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑƒÑього параметра або уÑього запиÑу з'єднаннÑ.\n" -#: ../clients/cli/connections.c:7023 +#: ../clients/cli/connections.c:7025 #, c-format msgid "" "help/? [<command>] :: help for nmcli commands\n" @@ -1856,24 +1851,24 @@ msgstr "" "help/? [<команда>] :: довідка з команди nmcli\n" "\n" -#: ../clients/cli/connections.c:7115 +#: ../clients/cli/connections.c:7117 #, c-format msgid "Error: Connection activation failed.\n" msgstr "Помилка: невдала Ñпроба активації з'єднаннÑ.\n" #. TRANSLATORS: status line in nmcli connection editor -#: ../clients/cli/connections.c:7212 +#: ../clients/cli/connections.c:7214 #, c-format msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n" msgstr "[ Тип: %s | Ðазва: %s | UUID: %s | Ðе збережено: %s | Тимч.: %s ]\n" -#: ../clients/cli/connections.c:7250 +#: ../clients/cli/connections.c:7252 #, c-format msgid "The connection is not saved. Do you really want to quit? %s" msgstr "" "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збережено. Ви Ñправді хочете завершити роботу програми? %s" -#: ../clients/cli/connections.c:7294 +#: ../clients/cli/connections.c:7296 #, c-format msgid "" "The connection profile has been removed from another client. You may type " @@ -1882,60 +1877,60 @@ msgstr "" "Профіль з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save» у " "головному меню, щоб відновити його.\n" -#: ../clients/cli/connections.c:7326 ../clients/cli/connections.c:7714 -#: ../clients/cli/connections.c:7784 +#: ../clients/cli/connections.c:7328 ../clients/cli/connections.c:7716 +#: ../clients/cli/connections.c:7786 #, c-format msgid "Allowed values for '%s' property: %s\n" msgstr "Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n" -#: ../clients/cli/connections.c:7328 ../clients/cli/connections.c:7717 -#: ../clients/cli/connections.c:7786 +#: ../clients/cli/connections.c:7330 ../clients/cli/connections.c:7719 +#: ../clients/cli/connections.c:7788 #, c-format msgid "Enter '%s' value: " msgstr "Введіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: " -#: ../clients/cli/connections.c:7341 ../clients/cli/connections.c:7358 -#: ../clients/cli/connections.c:7725 ../clients/cli/connections.c:7797 +#: ../clients/cli/connections.c:7343 ../clients/cli/connections.c:7360 +#: ../clients/cli/connections.c:7727 ../clients/cli/connections.c:7799 #, c-format msgid "Error: failed to set '%s' property: %s\n" msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n" -#: ../clients/cli/connections.c:7350 +#: ../clients/cli/connections.c:7352 #, c-format msgid "Edit '%s' value: " msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: " -#: ../clients/cli/connections.c:7371 ../clients/cli/settings.c:440 +#: ../clients/cli/connections.c:7373 ../clients/cli/settings.c:440 #, c-format msgid "Error: %s\n" msgstr "Помилка: %s\n" -#: ../clients/cli/connections.c:7390 +#: ../clients/cli/connections.c:7392 #, c-format msgid "Unknown command argument: '%s'\n" msgstr "Ðевідомий аргумент команди: «%s»\n" -#: ../clients/cli/connections.c:7485 +#: ../clients/cli/connections.c:7487 #, c-format msgid "Available settings: %s\n" msgstr "ДоÑтупні параметри: %s\n" -#: ../clients/cli/connections.c:7496 +#: ../clients/cli/connections.c:7498 #, c-format msgid "Error: invalid setting name; %s\n" msgstr "Помилка: некоректна назва параметра; %s\n" -#: ../clients/cli/connections.c:7513 +#: ../clients/cli/connections.c:7515 #, c-format msgid "Available properties: %s\n" msgstr "ДоÑтупні влаÑтивоÑÑ‚Ñ–: %s\n" -#: ../clients/cli/connections.c:7521 +#: ../clients/cli/connections.c:7523 #, c-format msgid "Error: property %s\n" msgstr "Помилка: влаÑтивіÑÑ‚ÑŒ %s\n" -#: ../clients/cli/connections.c:7563 +#: ../clients/cli/connections.c:7565 #, c-format msgid "" "Saving the connection with 'autoconnect=yes'. That might result in an " @@ -1946,12 +1941,12 @@ msgstr "" "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° може призвеÑти до негайного задіÑÐ½Ð½Ñ Ð·'єднаннÑ.\n" "Хочете зберегти запиÑ? %s" -#: ../clients/cli/connections.c:7649 +#: ../clients/cli/connections.c:7651 #, c-format msgid "You may edit the following settings: %s\n" msgstr "Можна редагувати такі параметри: %s\n" -#: ../clients/cli/connections.c:7677 +#: ../clients/cli/connections.c:7679 #, c-format msgid "" "The connection profile has been removed from another client. You may type " @@ -1960,234 +1955,234 @@ msgstr "" "Профіль з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save», " "щоб відновити його.\n" -#: ../clients/cli/connections.c:7731 ../clients/cli/connections.c:8012 -#: ../clients/cli/connections.c:8045 +#: ../clients/cli/connections.c:7733 ../clients/cli/connections.c:8014 +#: ../clients/cli/connections.c:8047 #, c-format msgid "Error: no setting selected; valid are [%s]\n" msgstr "" "Помилка: не вибрано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°; коректними значеннÑми Ñ” такі: [%s]\n" -#: ../clients/cli/connections.c:7732 +#: ../clients/cli/connections.c:7734 #, c-format msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n" msgstr "" "Ñпочатку ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ «goto <параметр>» або командою «set " "<параметр>.<влаÑтивіÑÑ‚ÑŒ>»\n" -#: ../clients/cli/connections.c:7752 ../clients/cli/connections.c:7929 -#: ../clients/cli/connections.c:8034 +#: ../clients/cli/connections.c:7754 ../clients/cli/connections.c:7931 +#: ../clients/cli/connections.c:8036 #, c-format msgid "Error: invalid setting argument '%s'; valid are [%s]\n" msgstr "" "Помилка: некоректний аргумент параметра, «%s»; коректними Ñ” такі ПÐÐ ÐМЕТРИ: " "[%s]\n" -#: ../clients/cli/connections.c:7762 +#: ../clients/cli/connections.c:7764 #, c-format msgid "Error: missing setting for '%s' property\n" msgstr "Помилка: не вказано параметра Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»\n" -#: ../clients/cli/connections.c:7769 +#: ../clients/cli/connections.c:7771 #, c-format msgid "Error: invalid property: %s\n" msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s\n" -#: ../clients/cli/connections.c:7830 +#: ../clients/cli/connections.c:7832 #, c-format msgid "Error: unknown setting '%s'\n" msgstr "Помилка: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»\n" -#: ../clients/cli/connections.c:7856 +#: ../clients/cli/connections.c:7858 #, c-format msgid "You may edit the following properties: %s\n" msgstr "Можна редагувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… влаÑтивоÑтей: %s\n" -#: ../clients/cli/connections.c:7902 ../clients/cli/connections.c:7962 +#: ../clients/cli/connections.c:7904 ../clients/cli/connections.c:7964 #, c-format msgid "Error: failed to remove value of '%s': %s\n" msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: %s\n" -#: ../clients/cli/connections.c:7908 +#: ../clients/cli/connections.c:7910 #, c-format msgid "Error: no argument given; valid are [%s]\n" msgstr "Помилка: не вказано аргументу; коректними аргументами Ñ” такі: [%s]\n" -#: ../clients/cli/connections.c:7927 +#: ../clients/cli/connections.c:7929 #, c-format msgid "Setting '%s' is not present in the connection.\n" msgstr "У з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s».\n" -#: ../clients/cli/connections.c:7988 +#: ../clients/cli/connections.c:7990 #, c-format msgid "Error: %s properties, nor it is a setting name.\n" msgstr "Помилка: влаÑтивоÑÑ‚Ñ– %s Ñ– не Ñ” назвою параметра.\n" -#: ../clients/cli/connections.c:8013 ../clients/cli/connections.c:8046 +#: ../clients/cli/connections.c:8015 ../clients/cli/connections.c:8048 #, c-format msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n" msgstr "" "ÑкориÑтайтеÑÑ Ñпочатку командою «goto <параметр> або командою «describe " "<параметр>.<влаÑтивіÑÑ‚ÑŒ>»\n" -#: ../clients/cli/connections.c:8069 +#: ../clients/cli/connections.c:8071 #, c-format msgid "Error: invalid property: %s, neither a valid setting name.\n" msgstr "" "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s Ñ– не Ñ” коректною назвою параметра.\n" -#: ../clients/cli/connections.c:8099 +#: ../clients/cli/connections.c:8101 #, c-format msgid "Error: unknown setting: '%s'\n" msgstr "Помилка: невідомий параметр: «%s»\n" -#: ../clients/cli/connections.c:8104 +#: ../clients/cli/connections.c:8106 #, c-format msgid "Error: '%s' setting not present in the connection\n" msgstr "Помилка: у з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s».\n" -#: ../clients/cli/connections.c:8136 +#: ../clients/cli/connections.c:8138 #, c-format msgid "Error: invalid property: %s%s\n" msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s%s\n" -#: ../clients/cli/connections.c:8138 +#: ../clients/cli/connections.c:8140 msgid ", neither a valid setting name" msgstr ", Ñ– не Ñ” коректною назвою параметра" -#: ../clients/cli/connections.c:8154 +#: ../clients/cli/connections.c:8156 #, c-format msgid "Invalid verify option: %s\n" msgstr "Ðекоректний параметр verify: %s\n" -#: ../clients/cli/connections.c:8162 +#: ../clients/cli/connections.c:8164 #, c-format msgid "Verify setting '%s': %s\n" msgstr "Перевірка параметра «%s»: %s\n" -#: ../clients/cli/connections.c:8177 +#: ../clients/cli/connections.c:8179 #, c-format msgid "Verify connection: %s\n" msgstr "Перевірка з'єднаннÑ: %s\n" -#: ../clients/cli/connections.c:8179 +#: ../clients/cli/connections.c:8181 #, c-format msgid "The error cannot be fixed automatically.\n" msgstr "Помилку не можна виправити у автоматичному режимі.\n" -#: ../clients/cli/connections.c:8199 +#: ../clients/cli/connections.c:8201 #, c-format msgid "Error: invalid argument '%s'\n" msgstr "Помилка: некоректний аргумент «%s»\n" -#: ../clients/cli/connections.c:8249 +#: ../clients/cli/connections.c:8251 #, c-format msgid "Error: Failed to save '%s' (%s) connection: %s\n" msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s\n" -#: ../clients/cli/connections.c:8255 +#: ../clients/cli/connections.c:8257 #, c-format msgid "Error: Timeout saving '%s' (%s) connection\n" msgstr "" "Помилка: Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s)\n" -#: ../clients/cli/connections.c:8259 +#: ../clients/cli/connections.c:8261 #, c-format msgid "Connection '%s' (%s) successfully saved.\n" msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно збережено.\n" -#: ../clients/cli/connections.c:8260 +#: ../clients/cli/connections.c:8262 #, c-format msgid "Connection '%s' (%s) successfully updated.\n" msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно оновлено.\n" -#: ../clients/cli/connections.c:8294 +#: ../clients/cli/connections.c:8296 #, c-format msgid "Error: connection verification failed: %s\n" msgstr "Помилка: з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ пройшло перевірки: %s\n" -#: ../clients/cli/connections.c:8295 +#: ../clients/cli/connections.c:8297 msgid "(unknown error)" msgstr "(невідома помилка)" -#: ../clients/cli/connections.c:8296 +#: ../clients/cli/connections.c:8298 #, c-format msgid "You may try running 'verify fix' to fix errors.\n" msgstr "Ви можете Ñпробувати запуÑтити «verify fix» Ð´Ð»Ñ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº.\n" #. TRANSLATORS: do not translate 'save', leave it as it is -#: ../clients/cli/connections.c:8319 +#: ../clients/cli/connections.c:8321 #, c-format msgid "Error: connection is not saved. Type 'save' first.\n" msgstr "Помилка: з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збережено. Спочатку введіть «save».\n" -#: ../clients/cli/connections.c:8323 +#: ../clients/cli/connections.c:8325 #, c-format msgid "Error: connection is not valid: %s\n" msgstr "Помилка: некоректне з'єднаннÑ: %s\n" -#: ../clients/cli/connections.c:8339 +#: ../clients/cli/connections.c:8341 #, c-format msgid "Error: Cannot activate connection: %s.\n" msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з'єднаннÑ: %s.\n" -#: ../clients/cli/connections.c:8348 +#: ../clients/cli/connections.c:8350 #, c-format msgid "Error: Failed to activate '%s' (%s) connection: %s\n" msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s\n" -#: ../clients/cli/connections.c:8355 +#: ../clients/cli/connections.c:8357 msgid "Monitoring connection activation (press any key to continue)\n" msgstr "" "СпоÑтерігаємо за активацією з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (натиÑніть будь-Ñку клавішу, щоб " "продовжити)\n" -#: ../clients/cli/connections.c:8390 +#: ../clients/cli/connections.c:8392 #, c-format msgid "Error: status-line: %s\n" msgstr "Помилка: Ñ€Ñдок Ñтану: %s\n" -#: ../clients/cli/connections.c:8398 +#: ../clients/cli/connections.c:8400 #, c-format msgid "Error: save-confirmation: %s\n" msgstr "Помилка: save-confirmation: %s\n" -#: ../clients/cli/connections.c:8406 +#: ../clients/cli/connections.c:8408 #, c-format msgid "Error: show-secrets: %s\n" msgstr "Помилка: show-secrets: %s\n" -#: ../clients/cli/connections.c:8414 +#: ../clients/cli/connections.c:8416 #, c-format msgid "Current nmcli configuration:\n" msgstr "Поточне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ nmcli:\n" -#: ../clients/cli/connections.c:8422 +#: ../clients/cli/connections.c:8424 #, c-format msgid "Invalid configuration option '%s'; allowed [%s]\n" msgstr "" "Ðекоректний параметр налаштуваннÑ, «%s»; можна викориÑтовувати лише такі: " "[%s]\n" -#: ../clients/cli/connections.c:8653 +#: ../clients/cli/connections.c:8655 #, c-format msgid "Error: only one of 'id', 'filename', uuid, or 'path' can be provided." msgstr "" "Помилка: можна вказувати лише один з параметрів «id», «filename», uuid або " "«path»." -#: ../clients/cli/connections.c:8668 ../clients/cli/connections.c:8835 +#: ../clients/cli/connections.c:8670 ../clients/cli/connections.c:8837 #, c-format msgid "Error: Unknown connection '%s'." msgstr "Помилка: невідоме з'єднаннÑ, «%s»." -#: ../clients/cli/connections.c:8685 +#: ../clients/cli/connections.c:8687 #, c-format msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n" msgstr "" "ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент " "«type» проігноровано\n" -#: ../clients/cli/connections.c:8689 +#: ../clients/cli/connections.c:8691 #, c-format msgid "" "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n" @@ -2195,201 +2190,201 @@ msgstr "" "ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент " "«con-name» проігноровано\n" -#: ../clients/cli/connections.c:8716 +#: ../clients/cli/connections.c:8718 #, c-format msgid "Valid connection types: %s\n" msgstr "Коректні типи з'єднань: %s\n" -#: ../clients/cli/connections.c:8718 +#: ../clients/cli/connections.c:8720 #, c-format msgid "Error: invalid connection type; %s\n" msgstr "Помилка: некоректний тип з'єднаннÑ; %s\n" -#: ../clients/cli/connections.c:8757 +#: ../clients/cli/connections.c:8759 #, c-format msgid "===| nmcli interactive connection editor |===" msgstr "===| Інтерактивний редактор з'єднань nmcli |===" -#: ../clients/cli/connections.c:8760 +#: ../clients/cli/connections.c:8762 #, c-format msgid "Editing existing '%s' connection: '%s'" msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñвного з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: «%s»" -#: ../clients/cli/connections.c:8762 +#: ../clients/cli/connections.c:8764 #, c-format msgid "Adding a new '%s' connection" msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»" #. TRANSLATORS: do not translate 'help', leave it as it is -#: ../clients/cli/connections.c:8765 +#: ../clients/cli/connections.c:8767 #, c-format msgid "Type 'help' or '?' for available commands." msgstr "Введіть «help» або «?», щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком доÑтупних команд." #. TRANSLATORS: do not translate 'print', leave it as it is -#: ../clients/cli/connections.c:8768 +#: ../clients/cli/connections.c:8770 #, c-format msgid "Type 'print' to show all the connection properties." msgstr "Введіть «print», щоб побачити уÑÑ– влаÑтивоÑÑ‚Ñ– з'єднаннÑ." #. TRANSLATORS: do not translate 'describe', leave it as it is -#: ../clients/cli/connections.c:8771 +#: ../clients/cli/connections.c:8773 #, c-format msgid "Type 'describe [<setting>.<prop>]' for detailed property description." msgstr "" "Щоб ознайомитиÑÑ Ð· докладним опиÑом влаÑтивоÑÑ‚Ñ–, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ " "«describe [<параметр>.<влаÑтивіÑÑ‚ÑŒ>]." -#: ../clients/cli/connections.c:8798 +#: ../clients/cli/connections.c:8800 #, c-format msgid "Error: Failed to modify connection '%s': %s" msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до запиÑу з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s" -#: ../clients/cli/connections.c:8804 +#: ../clients/cli/connections.c:8806 #, c-format msgid "Connection '%s' (%s) successfully modified.\n" msgstr "Зміни до з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно внеÑено.\n" -#: ../clients/cli/connections.c:8870 +#: ../clients/cli/connections.c:8872 #, c-format msgid "%s (%s) cloned as %s (%s).\n" msgstr "%s (%s) клоновано Ñк %s (%s).\n" -#: ../clients/cli/connections.c:8928 +#: ../clients/cli/connections.c:8930 msgid "New connection name: " msgstr "Ðова назва з'єднаннÑ: " -#: ../clients/cli/connections.c:8930 +#: ../clients/cli/connections.c:8932 #, c-format msgid "Error: <new name> argument is missing." msgstr "Помилка: не вказано параметр <нова назва>." -#: ../clients/cli/connections.c:8936 ../clients/cli/connections.c:9433 +#: ../clients/cli/connections.c:8938 ../clients/cli/connections.c:9435 #, c-format msgid "Error: unknown extra argument: '%s'." msgstr "Помилка: невідомий зайвий параметр: «%s»." -#: ../clients/cli/connections.c:8970 +#: ../clients/cli/connections.c:8972 #, c-format msgid "Error: not all connections deleted." msgstr "Помилка: вилучено не уÑÑ– з'єднаннÑ." -#: ../clients/cli/connections.c:8971 +#: ../clients/cli/connections.c:8973 #, c-format msgid "Error: Connection deletion failed: %s\n" msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з'єднаннÑ: %s\n" -#: ../clients/cli/connections.c:9026 ../clients/cli/connections.c:9151 +#: ../clients/cli/connections.c:9028 ../clients/cli/connections.c:9153 #, c-format msgid "Error: %s.\n" msgstr "Помилка: %s.\n" -#: ../clients/cli/connections.c:9027 ../clients/cli/connections.c:9152 +#: ../clients/cli/connections.c:9029 ../clients/cli/connections.c:9154 #, c-format msgid "Error: not all connections found." msgstr "Помилка: знайдено не уÑÑ– з'єднаннÑ." -#: ../clients/cli/connections.c:9083 +#: ../clients/cli/connections.c:9085 #, c-format msgid "Error: cannot delete unknown connection(s): %s." msgstr "Помилка: не можна вилучати невідомі з'єднаннÑ: %s." -#: ../clients/cli/connections.c:9092 +#: ../clients/cli/connections.c:9094 #, c-format msgid "%s: connection profile changed\n" msgstr "%s: змінено профіль з'єднаннÑ\n" -#: ../clients/cli/connections.c:9118 +#: ../clients/cli/connections.c:9120 #, c-format msgid "%s: connection profile created\n" msgstr "%s: Ñтворено профіль з'єднаннÑ\n" -#: ../clients/cli/connections.c:9127 +#: ../clients/cli/connections.c:9129 #, c-format msgid "%s: connection profile removed\n" msgstr "%s: вилучено профіль з'єднаннÑ\n" -#: ../clients/cli/connections.c:9204 +#: ../clients/cli/connections.c:9206 #, c-format msgid "Error: failed to reload connections: %s." msgstr "Помилка: не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ з'єднаннÑ: %s." -#: ../clients/cli/connections.c:9235 +#: ../clients/cli/connections.c:9237 #, c-format msgid "Error: failed to load connection: %s." msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ з'єднаннÑ: %s." -#: ../clients/cli/connections.c:9243 +#: ../clients/cli/connections.c:9245 #, c-format msgid "Could not load file '%s'\n" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл «%s»\n" -#: ../clients/cli/connections.c:9247 +#: ../clients/cli/connections.c:9249 msgid "File to import: " msgstr "Файл Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ: " -#: ../clients/cli/connections.c:9278 +#: ../clients/cli/connections.c:9280 #, c-format msgid "Error: No arguments provided." msgstr "Помилка: не надано аргументів." -#: ../clients/cli/connections.c:9309 +#: ../clients/cli/connections.c:9311 #, c-format msgid "Warning: 'type' already specified, ignoring extra one.\n" msgstr "" "ПопередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«type» вже задано, зайве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾.\n" -#: ../clients/cli/connections.c:9324 +#: ../clients/cli/connections.c:9326 #, c-format msgid "Warning: 'file' already specified, ignoring extra one.\n" msgstr "" "ПопередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«file» вже задано, зайве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ–Ð³Ð½Ð¾Ñ€Ð¾Ð²Ð°Ð½Ð¾.\n" -#: ../clients/cli/connections.c:9338 +#: ../clients/cli/connections.c:9340 #, c-format msgid "Error: 'type' argument is required." msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«type»." -#: ../clients/cli/connections.c:9343 +#: ../clients/cli/connections.c:9345 #, c-format msgid "Error: 'file' argument is required." msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«file»." -#: ../clients/cli/connections.c:9353 +#: ../clients/cli/connections.c:9355 #, c-format msgid "Error: failed to find VPN plugin for %s." msgstr "Помилка: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ додаток VPN Ð´Ð»Ñ %s." -#: ../clients/cli/connections.c:9362 ../clients/cli/connections.c:9454 +#: ../clients/cli/connections.c:9364 ../clients/cli/connections.c:9456 #, c-format msgid "Error: failed to load VPN plugin: %s." msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ додаток VPN: %s." -#: ../clients/cli/connections.c:9373 +#: ../clients/cli/connections.c:9375 #, c-format msgid "Error: failed to import '%s': %s." msgstr "Помилка: не вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ «%s»: %s." -#: ../clients/cli/connections.c:9439 +#: ../clients/cli/connections.c:9441 msgid "Output file name: " msgstr "Ðазва файла результатів: " -#: ../clients/cli/connections.c:9444 +#: ../clients/cli/connections.c:9446 #, c-format msgid "Error: the connection is not VPN." msgstr "Помилка: з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ належить до типу VPN." -#: ../clients/cli/connections.c:9468 +#: ../clients/cli/connections.c:9470 #, c-format msgid "Error: failed to create temporary file %s." msgstr "Помилка: не вдалоÑÑ Ñтворити тимчаÑовий файл %s." -#: ../clients/cli/connections.c:9478 +#: ../clients/cli/connections.c:9480 #, c-format msgid "Error: failed to export '%s': %s." msgstr "Помилка: не вдалоÑÑ ÐµÐºÑпортувати «%s»: %s." -#: ../clients/cli/connections.c:9492 +#: ../clients/cli/connections.c:9494 #, c-format msgid "Error: failed to read temporary file '%s': %s." msgstr "Помилка: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ тимчаÑовий файл «%s»: %s." @@ -4188,11 +4183,11 @@ msgstr "Ðе вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ конвеєр пейджера msgid "(unknown)" msgstr "(невідомо)" -#: ../clients/cli/utils.h:317 ../clients/common/nm-meta-setting-desc.c:4203 +#: ../clients/cli/utils.h:317 ../clients/common/nm-meta-setting-desc.c:4206 msgid "on" msgstr "увімкн." -#: ../clients/cli/utils.h:317 ../clients/common/nm-meta-setting-desc.c:4203 +#: ../clients/cli/utils.h:317 ../clients/common/nm-meta-setting-desc.c:4206 msgid "off" msgstr "вимкн." @@ -4755,7 +4750,7 @@ msgstr "%s (%s)" #: ../clients/common/nm-meta-setting-desc.c:1373 #: ../clients/common/nm-meta-setting-desc.c:1381 -#: ../clients/common/nm-meta-setting-desc.c:4225 +#: ../clients/common/nm-meta-setting-desc.c:4228 msgid "'%s' is out of range [%" msgstr "«%s» поза діапазоном [%" @@ -4780,7 +4775,7 @@ msgid "invalid option '%s', use a combination of [%s]" msgstr "некоректний параметр «%s», ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ”ÑŽ [%s]" #: ../clients/common/nm-meta-setting-desc.c:1621 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1056 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1101 #, c-format msgid "invalid option '%s', use one of [%s]" msgstr "" @@ -4861,7 +4856,7 @@ msgstr "" "номерів)" #: ../clients/common/nm-meta-setting-desc.c:2105 -#: ../clients/common/nm-meta-setting-desc.c:4098 +#: ../clients/common/nm-meta-setting-desc.c:4101 #: ../libnm-core/nm-setting-ovs-bridge.c:187 ../src/nm-config.c:548 #, c-format msgid "'%s' is not valid" @@ -4889,17 +4884,12 @@ msgstr "" "забагато аргументів. Будь лаÑка, вкажіть файл закритого ключа Ñ–, " "необов'Ñзково, пароль" -#: ../clients/common/nm-meta-setting-desc.c:2406 -#, c-format -msgid "failed to unset bond option \"%s\"" -msgstr "не вдалоÑÑ ÑкаÑувати вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° bond «%s»" - -#: ../clients/common/nm-meta-setting-desc.c:2427 +#: ../clients/common/nm-meta-setting-desc.c:2423 #, c-format msgid "failed to set bond option \"%s\"" msgstr "не вдалоÑÑ Ð²Ñтановити параметр bond «%s»" -#: ../clients/common/nm-meta-setting-desc.c:2472 +#: ../clients/common/nm-meta-setting-desc.c:2470 #, c-format msgid "" "Enter a list of bonding options formatted as:\n" @@ -4937,125 +4927,125 @@ msgstr "" #. * hacky: we can not see if the type is already set, because #. * nmc_setting_set_property() is called only after the property #. * we're setting (type) has been removed. -#: ../clients/common/nm-meta-setting-desc.c:2537 +#: ../clients/common/nm-meta-setting-desc.c:2535 #, c-format msgid "Can not change the connection type" msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ тип з'єднаннÑ" -#: ../clients/common/nm-meta-setting-desc.c:2614 +#: ../clients/common/nm-meta-setting-desc.c:2617 #, c-format msgid "invalid permission \"%s\"" msgstr "некоректні права доÑтупу «%s»" -#: ../clients/common/nm-meta-setting-desc.c:2713 +#: ../clients/common/nm-meta-setting-desc.c:2716 #, c-format msgid "the value '%s' is not a valid UUID" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не Ñ” коректним UUID" -#: ../clients/common/nm-meta-setting-desc.c:2782 +#: ../clients/common/nm-meta-setting-desc.c:2785 msgid "0 (disabled)" msgstr "0 (вимкнено)" -#: ../clients/common/nm-meta-setting-desc.c:2788 +#: ../clients/common/nm-meta-setting-desc.c:2791 msgid "enabled, " msgstr "увімкнено, " -#: ../clients/common/nm-meta-setting-desc.c:2790 +#: ../clients/common/nm-meta-setting-desc.c:2793 msgid "advertise, " msgstr "оголошеннÑ, " -#: ../clients/common/nm-meta-setting-desc.c:2792 +#: ../clients/common/nm-meta-setting-desc.c:2795 msgid "willing, " msgstr "наданнÑ, " -#: ../clients/common/nm-meta-setting-desc.c:2876 +#: ../clients/common/nm-meta-setting-desc.c:2879 #, c-format msgid "'%s' is not a valid DCB flag" msgstr "«%s» не Ñ” коректним прапорцем DCB" -#: ../clients/common/nm-meta-setting-desc.c:2903 +#: ../clients/common/nm-meta-setting-desc.c:2906 msgid "must contain 8 comma-separated numbers" msgstr "має міÑтити 8 чиÑел, відокремлених комами" -#: ../clients/common/nm-meta-setting-desc.c:2919 +#: ../clients/common/nm-meta-setting-desc.c:2922 #, c-format msgid "'%s' not a number between 0 and %u (inclusive) or %u" msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно) або %u" -#: ../clients/common/nm-meta-setting-desc.c:2927 +#: ../clients/common/nm-meta-setting-desc.c:2930 #, c-format msgid "'%s' not a number between 0 and %u (inclusive)" msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно)" -#: ../clients/common/nm-meta-setting-desc.c:2953 +#: ../clients/common/nm-meta-setting-desc.c:2956 #, c-format msgid "changes will have no effect until '%s' includes 1 (enabled)" msgstr "зміни не буде задіÑно, доки «%s» не включатиме 1 (увімкнено)" -#: ../clients/common/nm-meta-setting-desc.c:2984 +#: ../clients/common/nm-meta-setting-desc.c:2987 #, c-format msgid "bandwidth percentages must total 100%%" msgstr "Ñума чаÑтин каналу у відÑотках має Ñкладати 100%%" -#: ../clients/common/nm-meta-setting-desc.c:3058 -#: ../clients/common/nm-meta-setting-desc.c:3067 +#: ../clients/common/nm-meta-setting-desc.c:3061 +#: ../clients/common/nm-meta-setting-desc.c:3070 msgid "SIM operator ID must be a 5 or 6 number MCCMNC code" msgstr "" "Ідентифікатор оператора SIM має бути п'Ñти- або шеÑтицифровим кодом MCCMNC" -#: ../clients/common/nm-meta-setting-desc.c:3087 +#: ../clients/common/nm-meta-setting-desc.c:3090 #, c-format msgid "'%s' is not a valid IBoIP P_Key" msgstr "«%s» не Ñ” коректним закритим ключем IBoIP" -#: ../clients/common/nm-meta-setting-desc.c:3109 +#: ../clients/common/nm-meta-setting-desc.c:3112 msgid "default" msgstr "типовий" -#: ../clients/common/nm-meta-setting-desc.c:3268 +#: ../clients/common/nm-meta-setting-desc.c:3271 #, c-format msgid "invalid IPv%c address '%s'" msgstr "некоректна адреÑа IPv%c, «%s»" -#: ../clients/common/nm-meta-setting-desc.c:3394 +#: ../clients/common/nm-meta-setting-desc.c:3397 #, c-format msgid "invalid gateway address '%s'" msgstr "некоректна адреÑа шлюзу, «%s»" -#: ../clients/common/nm-meta-setting-desc.c:3542 +#: ../clients/common/nm-meta-setting-desc.c:3545 #, c-format msgid "'%s' is not a valid channel; use <1-13>" msgstr "«%s» не Ñ” коректним каналом; канал має належати діапазону <1-13>" -#: ../clients/common/nm-meta-setting-desc.c:3621 +#: ../clients/common/nm-meta-setting-desc.c:3624 msgid "The valid syntax is: vf [attribute=value]... [,vf [attribute=value]...]" msgstr "" "Коректна ÑинтакÑична конÑтрукціÑ: vf [атрибут=значеннÑ]... [,vf " "[атрибут=значеннÑ]...]" -#: ../clients/common/nm-meta-setting-desc.c:3647 -#: ../clients/common/nm-meta-setting-desc.c:3729 +#: ../clients/common/nm-meta-setting-desc.c:3650 +#: ../clients/common/nm-meta-setting-desc.c:3732 msgid "" "The valid syntax is: '[root | parent <handle>] [handle <handle>] <kind>'" msgstr "" "Коректний ÑинтакÑиÑ: '[root | parent <деÑкриптор>] [handle <деÑкриптор>] " "<тип>'" -#: ../clients/common/nm-meta-setting-desc.c:3673 +#: ../clients/common/nm-meta-setting-desc.c:3676 msgid "The valid syntax is: '<vid>[-<vid>] [pvid] [untagged]'" msgstr "Коректний ÑинтакÑиÑ: '<vid>[-<vid>] [pvid] [untagged]'" -#: ../clients/common/nm-meta-setting-desc.c:3870 +#: ../clients/common/nm-meta-setting-desc.c:3873 #, c-format msgid "invalid priority map '%s'" msgstr "некоректне Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–, «%s»" -#: ../clients/common/nm-meta-setting-desc.c:3958 +#: ../clients/common/nm-meta-setting-desc.c:3961 #, c-format msgid "'%s' is not valid; 2 or 3 strings should be provided" msgstr "«%s» не Ñ” коректним значеннÑм; Ñлід вказати 2 або 3 Ñ€Ñдки" -#: ../clients/common/nm-meta-setting-desc.c:3994 +#: ../clients/common/nm-meta-setting-desc.c:3997 #, c-format msgid "" "Enter a list of S/390 options formatted as:\n" @@ -5066,17 +5056,17 @@ msgstr "" " параметр = <значеннÑ>, параметр = <значеннÑ>,...\n" "Коректні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²: %s\n" -#: ../clients/common/nm-meta-setting-desc.c:4026 +#: ../clients/common/nm-meta-setting-desc.c:4029 #, c-format msgid "'%s' is not a valid channel" msgstr "«%s» не Ñ” коректним каналом" -#: ../clients/common/nm-meta-setting-desc.c:4032 +#: ../clients/common/nm-meta-setting-desc.c:4035 #, c-format msgid "'%ld' is not a valid channel" msgstr "«%ld» не Ñ” коректним каналом" -#: ../clients/common/nm-meta-setting-desc.c:4048 +#: ../clients/common/nm-meta-setting-desc.c:4051 #: ../libnm-core/nm-setting-sriov.c:424 ../libnm-core/nm-setting-wired.c:753 #: ../libnm-core/nm-setting-wired.c:769 ../libnm-core/nm-setting-wired.c:833 #: ../libnm-core/nm-setting-wired.c:891 ../libnm-core/nm-setting-wireless.c:944 @@ -5085,7 +5075,7 @@ msgstr "«%ld» не Ñ” коректним каналом" msgid "'%s' is not a valid MAC address" msgstr "%s не Ñ” припуÑтимою MAC-адреÑою" -#: ../clients/common/nm-meta-setting-desc.c:4109 +#: ../clients/common/nm-meta-setting-desc.c:4112 #, c-format msgid "" "'%s' not compatible with %s '%s', please change the key or set the right %s " @@ -5094,64 +5084,64 @@ msgstr "" "«%s» Ñ” неÑуміÑним з %s «%s», будь лаÑка, Ñпочатку змініть ключ або " "вÑтановіть правильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s." -#: ../clients/common/nm-meta-setting-desc.c:4124 +#: ../clients/common/nm-meta-setting-desc.c:4127 #, c-format msgid "WEP key is guessed to be of '%s'" msgstr "ПрипуÑкаємо, що ключем WEP Ñ” «%s»" -#: ../clients/common/nm-meta-setting-desc.c:4130 +#: ../clients/common/nm-meta-setting-desc.c:4133 #, c-format msgid "WEP key index set to '%d'" msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ»ÑŽÑ‡Ð° WEP вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d»" -#: ../clients/common/nm-meta-setting-desc.c:4169 +#: ../clients/common/nm-meta-setting-desc.c:4172 #, c-format msgid "'%s' is not compatible with '%s' type, please change or delete the key." msgstr "«%s» неÑуміÑний з типом «%s». Будь лаÑка, змініть або вилучіть ключ." -#: ../clients/common/nm-meta-setting-desc.c:4249 +#: ../clients/common/nm-meta-setting-desc.c:4252 #, c-format msgid "'%s' is not valid; use 'on', 'off', or 'ignore'" msgstr "" "«%s» не Ñ” коректним значеннÑм; можна викориÑтовувати лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«on», " "«off» або «ignore»" -#: ../clients/common/nm-meta-setting-desc.c:4315 +#: ../clients/common/nm-meta-setting-desc.c:4318 msgid "Bonding primary interface [none]" msgstr "ОÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¸Ð²'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]" #. this is a virtual property, only needed during "ask" mode. -#: ../clients/common/nm-meta-setting-desc.c:4322 +#: ../clients/common/nm-meta-setting-desc.c:4325 msgid "Bonding monitoring mode" msgstr "Режим ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв'Ñзком" -#: ../clients/common/nm-meta-setting-desc.c:4331 +#: ../clients/common/nm-meta-setting-desc.c:4334 msgid "Bonding miimon [100]" msgstr "ЧаÑтота ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ MII прив'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 100]" -#: ../clients/common/nm-meta-setting-desc.c:4339 +#: ../clients/common/nm-meta-setting-desc.c:4342 msgid "Bonding downdelay [0]" msgstr "downdelay прив'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]" -#: ../clients/common/nm-meta-setting-desc.c:4347 +#: ../clients/common/nm-meta-setting-desc.c:4350 msgid "Bonding updelay [0]" msgstr "updelay прив'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]" -#: ../clients/common/nm-meta-setting-desc.c:4355 +#: ../clients/common/nm-meta-setting-desc.c:4358 msgid "Bonding arp-interval [0]" msgstr "arp-interval прив'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]" -#: ../clients/common/nm-meta-setting-desc.c:4363 +#: ../clients/common/nm-meta-setting-desc.c:4366 msgid "Bonding arp-ip-target [none]" msgstr "arp-ip-target прив'ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:4371 +#: ../clients/common/nm-meta-setting-desc.c:4374 msgid "LACP rate ('slow' or 'fast') [slow]" msgstr "ШвидкіÑÑ‚ÑŒ LACP (slow або fast) [slow]" #. macro that returns @func as const (guint32(*)(NMSetting*)) type, but checks #. * that the actual type is (guint32(*)(type *)). -#: ../clients/common/nm-meta-setting-desc.c:4538 +#: ../clients/common/nm-meta-setting-desc.c:4541 msgid "" "nmcli can accepts both direct JSON configuration data and a file name " "containing the configuration. In the latter case the file is read and the " @@ -5170,7 +5160,7 @@ msgstr "" "\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n" " set team.config /etc/my-team.conf\n" -#: ../clients/common/nm-meta-setting-desc.c:4546 +#: ../clients/common/nm-meta-setting-desc.c:4549 msgid "" "Enter a list of link watchers formatted as dictionaries where the keys are " "teamd properties. Dictionary pairs are in the form: key=value and pairs are " @@ -5219,11 +5209,11 @@ msgstr "" " name=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, " "name=ethtool delay-up=3\n" -#: ../clients/common/nm-meta-setting-desc.c:4595 +#: ../clients/common/nm-meta-setting-desc.c:4598 msgid "IEEE 802.15.4 (WPAN) parent device or connection UUID" msgstr "БатьківÑький приÑтрій або UUID з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ IEEE 802.15.4 (WPAN)" -#: ../clients/common/nm-meta-setting-desc.c:4631 +#: ../clients/common/nm-meta-setting-desc.c:4634 msgid "" "Enter file path to CA certificate (optionally prefixed with file://).\n" " [file://]<file path>\n" @@ -5236,7 +5226,7 @@ msgstr "" "форматі проÑтого маÑиву даних.\n" "Приклад: /home/cimrman/cacert.crt\n" -#: ../clients/common/nm-meta-setting-desc.c:4673 +#: ../clients/common/nm-meta-setting-desc.c:4676 msgid "" "Enter file path to client certificate (optionally prefixed with file://).\n" " [file://]<file path>\n" @@ -5250,7 +5240,7 @@ msgstr "" "форматі проÑтого маÑиву даних.\n" "Приклад: /home/cimrman/jara.crt\n" -#: ../clients/common/nm-meta-setting-desc.c:4730 +#: ../clients/common/nm-meta-setting-desc.c:4733 msgid "" "Enter file path to CA certificate for inner authentication (optionally " "prefixed\n" @@ -5266,7 +5256,7 @@ msgstr "" "форматі проÑтого маÑиву даних.\n" "Приклад: /home/cimrman/ca-zweite-phase.crt\n" -#: ../clients/common/nm-meta-setting-desc.c:4773 +#: ../clients/common/nm-meta-setting-desc.c:4776 msgid "" "Enter file path to client certificate for inner authentication (optionally " "prefixed\n" @@ -5282,7 +5272,7 @@ msgstr "" "форматі проÑтого маÑиву даних.\n" "Приклад: /home/cimrman/jara-zweite-phase.crt\n" -#: ../clients/common/nm-meta-setting-desc.c:4800 +#: ../clients/common/nm-meta-setting-desc.c:4803 msgid "" "Enter bytes as a list of hexadecimal values.\n" "Two formats are accepted:\n" @@ -5304,8 +5294,8 @@ msgstr "" "Приклади: ab0455a6ea3a74C2\n" " ab 4 55 0xa6 ea 3a 74 C2\n" -#: ../clients/common/nm-meta-setting-desc.c:4817 -#: ../clients/common/nm-meta-setting-desc.c:4835 +#: ../clients/common/nm-meta-setting-desc.c:4820 +#: ../clients/common/nm-meta-setting-desc.c:4838 msgid "" "Enter path to a private key and the key password (if not set yet):\n" " [file://]<file path> [<password>]\n" @@ -5319,84 +5309,84 @@ msgstr "" "форматі проÑтого маÑиву даних.\n" "Приклад: /home/cimrman/jara-priv-key Dardanely\n" -#: ../clients/common/nm-meta-setting-desc.c:4874 +#: ../clients/common/nm-meta-setting-desc.c:4877 #: ../clients/common/nm-secret-agent-simple.c:270 #: ../clients/common/nm-secret-agent-simple.c:357 #: ../clients/tui/nmt-page-dsl.c:49 ../clients/tui/nmt-page-wifi.c:333 msgid "Username" msgstr "КориÑтувач" -#: ../clients/common/nm-meta-setting-desc.c:4880 -#: ../clients/common/nm-meta-setting-desc.c:5164 -#: ../clients/common/nm-meta-setting-desc.c:5591 -#: ../clients/common/nm-meta-setting-desc.c:6579 +#: ../clients/common/nm-meta-setting-desc.c:4883 +#: ../clients/common/nm-meta-setting-desc.c:5167 +#: ../clients/common/nm-meta-setting-desc.c:5594 +#: ../clients/common/nm-meta-setting-desc.c:6600 msgid "Password [none]" msgstr "Пароль [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:4926 +#: ../clients/common/nm-meta-setting-desc.c:4929 msgid "Bluetooth device address" msgstr "ÐдреÑа приÑтрою Bluetooth" -#: ../clients/common/nm-meta-setting-desc.c:4974 -#: ../clients/common/nm-meta-setting-desc.c:5644 -#: ../clients/common/nm-meta-setting-desc.c:7287 -#: ../clients/common/nm-meta-setting-desc.c:7325 -#: ../clients/common/nm-meta-setting-desc.c:7507 -#: ../clients/common/nm-meta-setting-desc.c:7740 +#: ../clients/common/nm-meta-setting-desc.c:4977 +#: ../clients/common/nm-meta-setting-desc.c:5665 +#: ../clients/common/nm-meta-setting-desc.c:7320 +#: ../clients/common/nm-meta-setting-desc.c:7358 +#: ../clients/common/nm-meta-setting-desc.c:7540 +#: ../clients/common/nm-meta-setting-desc.c:7773 msgid "MAC [none]" msgstr "MAC [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:4980 +#: ../clients/common/nm-meta-setting-desc.c:4983 msgid "Enable STP [no]" msgstr "Увімкнути STP [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:4986 +#: ../clients/common/nm-meta-setting-desc.c:4989 msgid "STP priority [32768]" msgstr "Пріоритет STP [типово 32768]" -#: ../clients/common/nm-meta-setting-desc.c:4992 +#: ../clients/common/nm-meta-setting-desc.c:4995 msgid "Forward delay [15]" msgstr "Затримка переÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ [типово 15]" -#: ../clients/common/nm-meta-setting-desc.c:4998 +#: ../clients/common/nm-meta-setting-desc.c:5001 msgid "Hello time [2]" msgstr "Ð§Ð°Ñ Ð½Ð° Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ [типово 2]" -#: ../clients/common/nm-meta-setting-desc.c:5004 +#: ../clients/common/nm-meta-setting-desc.c:5007 msgid "Max age [20]" msgstr "МакÑ. вік [типово 20]" -#: ../clients/common/nm-meta-setting-desc.c:5010 +#: ../clients/common/nm-meta-setting-desc.c:5013 msgid "MAC address ageing time [300]" msgstr "Ð§Ð°Ñ Ð·Ð°ÑÑ‚Ð°Ñ€Ñ–Ð²Ð°Ð½Ð½Ñ MAC-адреÑи [типово 300]" -#: ../clients/common/nm-meta-setting-desc.c:5020 +#: ../clients/common/nm-meta-setting-desc.c:5023 msgid "Group forward mask [0]" msgstr "МаÑка групового переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ [0]" -#: ../clients/common/nm-meta-setting-desc.c:5062 +#: ../clients/common/nm-meta-setting-desc.c:5065 msgid "Enable IGMP snooping [no]" msgstr "Увімкнути підглÑÐ´Ð°Ð½Ð½Ñ IGMP [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:5120 +#: ../clients/common/nm-meta-setting-desc.c:5123 msgid "Bridge port priority [32]" msgstr "Пріоритетний порт міÑтка [типово 32]" -#: ../clients/common/nm-meta-setting-desc.c:5126 +#: ../clients/common/nm-meta-setting-desc.c:5129 msgid "Bridge port STP path cost [100]" msgstr "ВартіÑÑ‚ÑŒ маршруту STP порту міÑтка [типово 100]" -#: ../clients/common/nm-meta-setting-desc.c:5132 +#: ../clients/common/nm-meta-setting-desc.c:5135 msgid "Hairpin [no]" msgstr "Початкова зона [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5158 -#: ../clients/common/nm-meta-setting-desc.c:5585 -#: ../clients/common/nm-meta-setting-desc.c:7133 +#: ../clients/common/nm-meta-setting-desc.c:5161 +#: ../clients/common/nm-meta-setting-desc.c:5588 +#: ../clients/common/nm-meta-setting-desc.c:7167 msgid "Username [none]" msgstr "КориÑтувач [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5260 +#: ../clients/common/nm-meta-setting-desc.c:5263 msgid "" "Enter a list of user permissions. This is a list of user names formatted " "as:\n" @@ -5411,7 +5401,7 @@ msgstr "" "\n" "Приклад: alice bob charlie\n" -#: ../clients/common/nm-meta-setting-desc.c:5313 +#: ../clients/common/nm-meta-setting-desc.c:5316 msgid "" "Enter secondary connections that should be activated when this connection " "is\n" @@ -5432,7 +5422,7 @@ msgstr "" "\n" "Приклад: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n" -#: ../clients/common/nm-meta-setting-desc.c:5336 +#: ../clients/common/nm-meta-setting-desc.c:5339 msgid "" "Enter a value which indicates whether the connection is subject to a data\n" "quota, usage costs or other limitations. Accepted options are:\n" @@ -5448,25 +5438,25 @@ msgstr "" "«unknown» — дозволити NetworkManager вибирати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð° допомогою " "евриÑтики\n" -#: ../clients/common/nm-meta-setting-desc.c:5601 +#: ../clients/common/nm-meta-setting-desc.c:5604 msgid "APN" msgstr "APN" -#: ../clients/common/nm-meta-setting-desc.c:5653 -#: ../clients/common/nm-meta-setting-desc.c:7356 -#: ../clients/common/nm-meta-setting-desc.c:7547 +#: ../clients/common/nm-meta-setting-desc.c:5674 +#: ../clients/common/nm-meta-setting-desc.c:7389 +#: ../clients/common/nm-meta-setting-desc.c:7580 msgid "MTU [auto]" msgstr "MTU [типово авто]" -#: ../clients/common/nm-meta-setting-desc.c:5672 +#: ../clients/common/nm-meta-setting-desc.c:5693 msgid "P_KEY [none]" msgstr "P_KEY [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5681 +#: ../clients/common/nm-meta-setting-desc.c:5702 msgid "Parent interface [none]" msgstr "БатьківÑький Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:5708 +#: ../clients/common/nm-meta-setting-desc.c:5729 msgid "" "Enter a list of IPv4 addresses of DNS servers.\n" "\n" @@ -5476,11 +5466,11 @@ msgstr "" "\n" "Приклад: 8.8.8.8, 8.8.4.4\n" -#: ../clients/common/nm-meta-setting-desc.c:5756 +#: ../clients/common/nm-meta-setting-desc.c:5777 msgid "IPv4 address (IP[/plen]) [none]" msgstr "ÐдреÑа IPv4 (IP[/plen]) [немає]" -#: ../clients/common/nm-meta-setting-desc.c:5758 +#: ../clients/common/nm-meta-setting-desc.c:5779 msgid "" "Enter a list of IPv4 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5494,11 +5484,11 @@ msgstr "" "\n" "Приклад: 192.168.1.5/24, 10.0.0.11/24\n" -#: ../clients/common/nm-meta-setting-desc.c:5777 +#: ../clients/common/nm-meta-setting-desc.c:5798 msgid "IPv4 gateway [none]" msgstr "Шлюз IPv4 [немає]" -#: ../clients/common/nm-meta-setting-desc.c:5785 +#: ../clients/common/nm-meta-setting-desc.c:5806 msgid "" "Enter a list of IPv4 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5521,7 +5511,7 @@ msgstr "" "Приклади: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n" " 10.1.2.0/24\n" -#: ../clients/common/nm-meta-setting-desc.c:5825 +#: ../clients/common/nm-meta-setting-desc.c:5846 msgid "" "Enter a list of IPv4 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" @@ -5531,7 +5521,7 @@ msgstr "" " priority [пріоритетніÑÑ‚ÑŒ] [from [джерело]] [to [призначеннÑ]], ,...\n" "\n" -#: ../clients/common/nm-meta-setting-desc.c:5932 +#: ../clients/common/nm-meta-setting-desc.c:5953 msgid "" "Enter a list of IPv6 addresses of DNS servers. If the IPv6 configuration " "method is 'auto' these DNS servers are appended to those (if any) returned " @@ -5552,11 +5542,11 @@ msgstr "" "\n" "Приклад: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n" -#: ../clients/common/nm-meta-setting-desc.c:5986 +#: ../clients/common/nm-meta-setting-desc.c:6007 msgid "IPv6 address (IP[/plen]) [none]" msgstr "ÐдреÑа IPv6 (IP[/plen]) [немає]" -#: ../clients/common/nm-meta-setting-desc.c:5988 +#: ../clients/common/nm-meta-setting-desc.c:6009 msgid "" "Enter a list of IPv6 addresses formatted as:\n" " ip[/prefix], ip[/prefix],...\n" @@ -5570,11 +5560,11 @@ msgstr "" "\n" "Приклад: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n" -#: ../clients/common/nm-meta-setting-desc.c:6007 +#: ../clients/common/nm-meta-setting-desc.c:6028 msgid "IPv6 gateway [none]" msgstr "Шлюз IPv6 [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6015 +#: ../clients/common/nm-meta-setting-desc.c:6036 msgid "" "Enter a list of IPv6 routes formatted as:\n" " ip[/prefix] [next-hop] [metric],...\n" @@ -5599,7 +5589,7 @@ msgstr "" "db8:beef::3 2\n" " abbe::/64 55\n" -#: ../clients/common/nm-meta-setting-desc.c:6055 +#: ../clients/common/nm-meta-setting-desc.c:6076 msgid "" "Enter a list of IPv6 routing rules formatted as:\n" " priority [prio] [from [src]] [to [dst]], ,...\n" @@ -5609,170 +5599,174 @@ msgstr "" " priority [пріоритетніÑÑ‚ÑŒ] [from [джерело]] [to [призначеннÑ]], ,...\n" "\n" -#: ../clients/common/nm-meta-setting-desc.c:6162 -#: ../clients/common/nm-meta-setting-desc.c:7186 +#: ../clients/common/nm-meta-setting-desc.c:6183 +#: ../clients/common/nm-meta-setting-desc.c:7220 msgid "Parent device [none]" msgstr "БатьківÑький приÑтрій [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6168 +#: ../clients/common/nm-meta-setting-desc.c:6189 msgid "Local endpoint [none]" msgstr "Локальна кінцева точка [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6175 -#: ../clients/common/nm-meta-setting-desc.c:7206 +#: ../clients/common/nm-meta-setting-desc.c:6196 +#: ../clients/common/nm-meta-setting-desc.c:7239 msgid "Remote" msgstr "Віддалений" -#: ../clients/common/nm-meta-setting-desc.c:6220 +#: ../clients/common/nm-meta-setting-desc.c:6241 msgid "MACsec parent device or connection UUID" msgstr "БатьківÑький приÑтрій MACsec або UUID з'єднаннÑ" -#: ../clients/common/nm-meta-setting-desc.c:6241 +#: ../clients/common/nm-meta-setting-desc.c:6262 msgid "Enable encryption [yes]" msgstr "Увімкнути ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ [типово «так»]" -#: ../clients/common/nm-meta-setting-desc.c:6247 +#: ../clients/common/nm-meta-setting-desc.c:6268 #: ../clients/common/nm-secret-agent-simple.c:929 msgid "MKA CAK" msgstr "MKA CAK" -#: ../clients/common/nm-meta-setting-desc.c:6257 +#: ../clients/common/nm-meta-setting-desc.c:6278 msgid "MKA_CKN" msgstr "MKA_CKN" -#: ../clients/common/nm-meta-setting-desc.c:6263 +#: ../clients/common/nm-meta-setting-desc.c:6284 msgid "SCI port [1]" msgstr "Порт SCI [1]" -#: ../clients/common/nm-meta-setting-desc.c:6289 +#: ../clients/common/nm-meta-setting-desc.c:6310 msgid "MACVLAN parent device or connection UUID" msgstr "БатьківÑький приÑтрій MACVLAN або UUID з'єднаннÑ" -#: ../clients/common/nm-meta-setting-desc.c:6310 +#: ../clients/common/nm-meta-setting-desc.c:6331 msgid "Tap [no]" msgstr "Tap [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:6377 -#: ../clients/common/nm-meta-setting-desc.c:7461 +#: ../clients/common/nm-meta-setting-desc.c:6398 +#: ../clients/common/nm-meta-setting-desc.c:7494 #: ../clients/tui/nmt-page-wifi.c:202 msgid "SSID" msgstr "SSID" -#: ../clients/common/nm-meta-setting-desc.c:6386 +#: ../clients/common/nm-meta-setting-desc.c:6407 msgid "OLPC Mesh channel [1]" msgstr "Канал OLPC Mesh [типово 1]" -#: ../clients/common/nm-meta-setting-desc.c:6395 +#: ../clients/common/nm-meta-setting-desc.c:6416 msgid "DHCP anycast MAC address [none]" msgstr "MAC-адреÑа довільного надÑÐ¸Ð»Ð°Ð½Ð½Ñ (anycast) DHCP [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6560 +#: ../clients/common/nm-meta-setting-desc.c:6581 msgid "PPPoE parent device" msgstr "БатьківÑький приÑтрій PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:6566 +#: ../clients/common/nm-meta-setting-desc.c:6587 msgid "Service [none]" msgstr "Служба [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:6573 +#: ../clients/common/nm-meta-setting-desc.c:6594 msgid "PPPoE username" msgstr "КориÑтувач PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:6609 +#: ../clients/common/nm-meta-setting-desc.c:6630 msgid "Browser only [no]" msgstr "Лише навігатор [типово «ні»]" -#: ../clients/common/nm-meta-setting-desc.c:6615 +#: ../clients/common/nm-meta-setting-desc.c:6636 msgid "PAC URL" msgstr "ÐдреÑа PAC" -#: ../clients/common/nm-meta-setting-desc.c:6621 +#: ../clients/common/nm-meta-setting-desc.c:6642 msgid "PAC script" msgstr "Скрипт PAC" -#: ../clients/common/nm-meta-setting-desc.c:6745 -#: ../clients/common/nm-meta-setting-desc.c:6933 +#: ../clients/common/nm-meta-setting-desc.c:6766 +#: ../clients/common/nm-meta-setting-desc.c:6954 msgid "Team JSON configuration [none]" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ JSON команди [немає]" -#: ../clients/common/nm-meta-setting-desc.c:7036 +#: ../clients/common/nm-meta-setting-desc.c:7057 msgid "User ID [none]" msgstr "Ідентифікатор кориÑтувача [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7042 +#: ../clients/common/nm-meta-setting-desc.c:7063 msgid "Group ID [none]" msgstr "Ідентифікатор групи [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7048 +#: ../clients/common/nm-meta-setting-desc.c:7069 msgid "Enable PI [no]" msgstr "Увімкнути PI [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7054 +#: ../clients/common/nm-meta-setting-desc.c:7075 msgid "Enable VNET header [no]" msgstr "Увімкнути заголовок VNET [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7060 +#: ../clients/common/nm-meta-setting-desc.c:7081 msgid "Enable multi queue [no]" msgstr "Увімкнути декілька черг [типово ні]" -#: ../clients/common/nm-meta-setting-desc.c:7073 +#: ../clients/common/nm-meta-setting-desc.c:7094 +msgid "veth peer" +msgstr "вузол veth" + +#: ../clients/common/nm-meta-setting-desc.c:7107 msgid "VLAN parent device or connection UUID" msgstr "БатьківÑький приÑтрій VLAN або UUID з'єднаннÑ" -#: ../clients/common/nm-meta-setting-desc.c:7080 +#: ../clients/common/nm-meta-setting-desc.c:7114 msgid "VLAN ID (<0-4094>)" msgstr "Ід. VLAN (<0-4094>)" -#: ../clients/common/nm-meta-setting-desc.c:7086 +#: ../clients/common/nm-meta-setting-desc.c:7120 msgid "VLAN flags (<0-7>) [none]" msgstr "Прапорці VLAN (<0-7>) [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7095 +#: ../clients/common/nm-meta-setting-desc.c:7129 msgid "Ingress priority maps [none]" msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вхідного доÑтупу [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7105 +#: ../clients/common/nm-meta-setting-desc.c:7139 msgid "Egress priority maps [none]" msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вихідного доÑтупу [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7173 +#: ../clients/common/nm-meta-setting-desc.c:7207 msgid "Table [0]" msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ [0]" -#: ../clients/common/nm-meta-setting-desc.c:7193 +#: ../clients/common/nm-meta-setting-desc.c:7227 msgid "VXLAN ID" msgstr "Ід. VXLAN" -#: ../clients/common/nm-meta-setting-desc.c:7199 +#: ../clients/common/nm-meta-setting-desc.c:7233 msgid "Local address [none]" msgstr "Локальна адреÑа [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7212 +#: ../clients/common/nm-meta-setting-desc.c:7245 msgid "Minimum source port [0]" msgstr "Мінімальний порт джерела [0]" -#: ../clients/common/nm-meta-setting-desc.c:7218 +#: ../clients/common/nm-meta-setting-desc.c:7251 msgid "Maximum source port [0]" msgstr "МакÑимальний порт джерела [0]" -#: ../clients/common/nm-meta-setting-desc.c:7224 +#: ../clients/common/nm-meta-setting-desc.c:7257 msgid "Destination port [8472]" msgstr "Порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ [типово 8472]" -#: ../clients/common/nm-meta-setting-desc.c:7264 +#: ../clients/common/nm-meta-setting-desc.c:7297 msgid "Peer" msgstr "Вузол" -#: ../clients/common/nm-meta-setting-desc.c:7294 +#: ../clients/common/nm-meta-setting-desc.c:7327 msgid "WiMAX NSP name" msgstr "Ðазва NSP WiMAX" -#: ../clients/common/nm-meta-setting-desc.c:7331 -#: ../clients/common/nm-meta-setting-desc.c:7512 +#: ../clients/common/nm-meta-setting-desc.c:7364 +#: ../clients/common/nm-meta-setting-desc.c:7545 msgid "Cloned MAC [none]" msgstr "Клонований MAC [типово немає]" -#: ../clients/common/nm-meta-setting-desc.c:7364 +#: ../clients/common/nm-meta-setting-desc.c:7397 msgid "" "Enter a list of subchannels (comma or space separated).\n" "\n" @@ -5782,7 +5776,7 @@ msgstr "" "\n" "Приклад: 0.0.0e20 0.0.0e21 0.0.0e22\n" -#: ../clients/common/nm-meta-setting-desc.c:7689 +#: ../clients/common/nm-meta-setting-desc.c:7722 msgid "" "Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, " "and 2 or passphrase.\n" @@ -5790,221 +5784,235 @@ msgstr "" "Вкажіть тип ключів WEP. Можливі значеннÑ: 0 або unknown (невідомо), 1 або " "key (ключ) та 2 або passphrase (пароль).\n" -#: ../clients/common/nm-meta-setting-desc.c:7748 +#: ../clients/common/nm-meta-setting-desc.c:7781 msgid "Short address (<0x0000-0xffff>)" msgstr "Коротка адреÑа (<0x0000-0xffff>)" -#: ../clients/common/nm-meta-setting-desc.c:7764 +#: ../clients/common/nm-meta-setting-desc.c:7797 msgid "PAN Identifier (<0x0000-0xffff>)" msgstr "Ідентифікатор PAN (<0x0000-0xffff>)" -#: ../clients/common/nm-meta-setting-desc.c:7779 +#: ../clients/common/nm-meta-setting-desc.c:7812 msgid "Page (<default|0-31>)" msgstr "Сторінка (<default|0-31>)" -#: ../clients/common/nm-meta-setting-desc.c:7793 +#: ../clients/common/nm-meta-setting-desc.c:7826 msgid "Channel (<default|0-26>)" msgstr "Канал (<default|0-26>)" #. *************************************************************************** -#: ../clients/common/nm-meta-setting-desc.c:7928 +#: ../clients/common/nm-meta-setting-desc.c:7961 msgid "6LOWPAN settings" msgstr "Параметри 6LOWPAN" -#: ../clients/common/nm-meta-setting-desc.c:7929 +#: ../clients/common/nm-meta-setting-desc.c:7962 msgid "802-1x settings" msgstr "Параметри 802-1x" -#: ../clients/common/nm-meta-setting-desc.c:7930 +#: ../clients/common/nm-meta-setting-desc.c:7963 #: ../src/devices/adsl/nm-device-adsl.c:117 msgid "ADSL connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ADSL" -#: ../clients/common/nm-meta-setting-desc.c:7931 +#: ../clients/common/nm-meta-setting-desc.c:7964 msgid "bluetooth connection" msgstr "з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ bluetooth" -#: ../clients/common/nm-meta-setting-desc.c:7932 +#: ../clients/common/nm-meta-setting-desc.c:7965 msgid "Bond device" msgstr "ПриÑтрій Bond" -#: ../clients/common/nm-meta-setting-desc.c:7933 +#: ../clients/common/nm-meta-setting-desc.c:7966 msgid "Bridge device" msgstr "ПриÑтрій міÑтка" -#: ../clients/common/nm-meta-setting-desc.c:7934 +#: ../clients/common/nm-meta-setting-desc.c:7967 msgid "Bridge port" msgstr "Порт міÑтка" -#: ../clients/common/nm-meta-setting-desc.c:7935 +#: ../clients/common/nm-meta-setting-desc.c:7968 msgid "CDMA mobile broadband connection" msgstr "мобільне широкоÑмугове з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ CDMA" -#: ../clients/common/nm-meta-setting-desc.c:7936 +#: ../clients/common/nm-meta-setting-desc.c:7969 msgid "General settings" msgstr "Загальні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7937 +#: ../clients/common/nm-meta-setting-desc.c:7970 msgid "DCB settings" msgstr "Параметри DCB" -#: ../clients/common/nm-meta-setting-desc.c:7938 +#: ../clients/common/nm-meta-setting-desc.c:7971 msgid "Dummy settings" msgstr "Фіктивні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7939 +#: ../clients/common/nm-meta-setting-desc.c:7972 msgid "Ethtool settings" msgstr "Параметри Ethtool" -#: ../clients/common/nm-meta-setting-desc.c:7940 +#: ../clients/common/nm-meta-setting-desc.c:7973 msgid "Generic settings" msgstr "Загальні параметри" -#: ../clients/common/nm-meta-setting-desc.c:7941 +#: ../clients/common/nm-meta-setting-desc.c:7974 msgid "GSM mobile broadband connection" msgstr "мобільне широкоÑмугове з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ GSM" -#: ../clients/common/nm-meta-setting-desc.c:7942 +#: ../clients/common/nm-meta-setting-desc.c:7975 +msgid "Hostname settings" +msgstr "Параметри назви вузла" + +#: ../clients/common/nm-meta-setting-desc.c:7976 #: ../src/devices/nm-device-infiniband.c:161 msgid "InfiniBand connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ InfiniBand" -#: ../clients/common/nm-meta-setting-desc.c:7943 +#: ../clients/common/nm-meta-setting-desc.c:7977 msgid "IPv4 protocol" msgstr "Протокол IPv4" -#: ../clients/common/nm-meta-setting-desc.c:7944 +#: ../clients/common/nm-meta-setting-desc.c:7978 msgid "IPv6 protocol" msgstr "Протокол IPv6" -#: ../clients/common/nm-meta-setting-desc.c:7945 +#: ../clients/common/nm-meta-setting-desc.c:7979 msgid "IP-tunnel settings" msgstr "Параметри IP-тунелюваннÑ" -#: ../clients/common/nm-meta-setting-desc.c:7946 +#: ../clients/common/nm-meta-setting-desc.c:7980 msgid "MACsec connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ MACsec" -#: ../clients/common/nm-meta-setting-desc.c:7947 +#: ../clients/common/nm-meta-setting-desc.c:7981 msgid "macvlan connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ MACVLAN" -#: ../clients/common/nm-meta-setting-desc.c:7948 +#: ../clients/common/nm-meta-setting-desc.c:7982 msgid "Match" msgstr "ВідповідніÑÑ‚ÑŒ" -#: ../clients/common/nm-meta-setting-desc.c:7949 +#: ../clients/common/nm-meta-setting-desc.c:7983 msgid "OLPC Mesh connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ OLPC Mesh" -#: ../clients/common/nm-meta-setting-desc.c:7950 +#: ../clients/common/nm-meta-setting-desc.c:7984 msgid "Open vSwitch bridge settings" msgstr "Параметри міÑтка Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7951 +#: ../clients/common/nm-meta-setting-desc.c:7985 msgid "Open vSwitch DPDK interface settings" msgstr "Параметри інтерфейÑу Open vSwitch DPDK" -#: ../clients/common/nm-meta-setting-desc.c:7952 +#: ../clients/common/nm-meta-setting-desc.c:7986 +msgid "OVS External IDs" +msgstr "Зовнішні ідентифікатори OVS" + +#: ../clients/common/nm-meta-setting-desc.c:7987 msgid "Open vSwitch interface settings" msgstr "Параметри інтерфейÑу Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7953 +#: ../clients/common/nm-meta-setting-desc.c:7988 msgid "Open vSwitch patch interface settings" msgstr "Параметри інтерфейÑу латок Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7954 +#: ../clients/common/nm-meta-setting-desc.c:7989 msgid "Open vSwitch port settings" msgstr "Параметри портів Open vSwitch" -#: ../clients/common/nm-meta-setting-desc.c:7955 +#: ../clients/common/nm-meta-setting-desc.c:7990 msgid "PPP settings" msgstr "Параметри PPP" -#: ../clients/common/nm-meta-setting-desc.c:7956 +#: ../clients/common/nm-meta-setting-desc.c:7991 msgid "PPPoE" msgstr "PPPoE" -#: ../clients/common/nm-meta-setting-desc.c:7957 +#: ../clients/common/nm-meta-setting-desc.c:7992 msgid "Proxy" msgstr "ПрокÑÑ–" -#: ../clients/common/nm-meta-setting-desc.c:7958 +#: ../clients/common/nm-meta-setting-desc.c:7993 msgid "Serial settings" msgstr "Параметри поÑлідовного з'єднаннÑ" -#: ../clients/common/nm-meta-setting-desc.c:7959 +#: ../clients/common/nm-meta-setting-desc.c:7994 msgid "SR-IOV settings" msgstr "Параметри SR-IOV" -#: ../clients/common/nm-meta-setting-desc.c:7960 +#: ../clients/common/nm-meta-setting-desc.c:7995 msgid "Traffic controls" msgstr "ЗаÑоби ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ð¾Ð¼ даними" -#: ../clients/common/nm-meta-setting-desc.c:7961 +#: ../clients/common/nm-meta-setting-desc.c:7996 msgid "Team device" msgstr "ПриÑтрій Team" -#: ../clients/common/nm-meta-setting-desc.c:7962 +#: ../clients/common/nm-meta-setting-desc.c:7997 msgid "Team port" msgstr "Порт Team" -#: ../clients/common/nm-meta-setting-desc.c:7963 +#: ../clients/common/nm-meta-setting-desc.c:7998 msgid "Tun device" msgstr "ПриÑтрій TUN" -#: ../clients/common/nm-meta-setting-desc.c:7964 +#: ../clients/common/nm-meta-setting-desc.c:7999 msgid "User settings" msgstr "Параметри кориÑтувача" -#: ../clients/common/nm-meta-setting-desc.c:7965 +#: ../clients/common/nm-meta-setting-desc.c:8000 +#: ../src/devices/nm-device-veth.c:138 +#| msgid "VPN connection" +msgid "Veth connection" +msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ veth" + +#: ../clients/common/nm-meta-setting-desc.c:8001 #: ../src/devices/nm-device-vlan.c:400 msgid "VLAN connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VLAN" -#: ../clients/common/nm-meta-setting-desc.c:7966 ../src/nm-manager.c:5837 +#: ../clients/common/nm-meta-setting-desc.c:8002 ../src/nm-manager.c:5866 msgid "VPN connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN" -#: ../clients/common/nm-meta-setting-desc.c:7967 +#: ../clients/common/nm-meta-setting-desc.c:8003 #: ../src/devices/nm-device-vrf.c:181 msgid "VRF connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VRF" -#: ../clients/common/nm-meta-setting-desc.c:7968 -#: ../src/devices/nm-device-vxlan.c:380 +#: ../clients/common/nm-meta-setting-desc.c:8004 +#: ../src/devices/nm-device-vxlan.c:382 msgid "VXLAN connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VXLAN" -#: ../clients/common/nm-meta-setting-desc.c:7969 +#: ../clients/common/nm-meta-setting-desc.c:8005 msgid "Wi-Fi P2P connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ P2P Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:7970 +#: ../clients/common/nm-meta-setting-desc.c:8006 msgid "WiMAX connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ WiMAX" -#: ../clients/common/nm-meta-setting-desc.c:7971 +#: ../clients/common/nm-meta-setting-desc.c:8007 msgid "Wired Ethernet" msgstr "Дротовий Ethernet" -#: ../clients/common/nm-meta-setting-desc.c:7972 +#: ../clients/common/nm-meta-setting-desc.c:8008 msgid "WireGuard VPN settings" msgstr "Параметри VPN WireGuard" -#: ../clients/common/nm-meta-setting-desc.c:7973 +#: ../clients/common/nm-meta-setting-desc.c:8009 msgid "Wi-Fi connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:7974 +#: ../clients/common/nm-meta-setting-desc.c:8010 msgid "Wi-Fi security settings" msgstr "Параметри захиÑту Wi-Fi" -#: ../clients/common/nm-meta-setting-desc.c:7975 +#: ../clients/common/nm-meta-setting-desc.c:8011 msgid "WPAN settings" msgstr "Параметри WPAN" -#: ../clients/common/nm-meta-setting-desc.c:8354 +#: ../clients/common/nm-meta-setting-desc.c:8411 msgid "name" msgstr "назва" @@ -7004,7 +7012,7 @@ msgstr "" #: ../clients/common/settings-docs.h.in:108 #: ../clients/common/settings-docs.h.in:150 #: ../clients/common/settings-docs.h.in:200 -#: ../clients/common/settings-docs.h.in:325 +#: ../clients/common/settings-docs.h.in:330 msgid "Flags indicating how to handle the \"password\" property." msgstr "Прапорці, Ñкі позначають, Ñк оброблÑти влаÑтивіÑÑ‚ÑŒ «password»." @@ -7969,7 +7977,7 @@ msgstr "" #: ../clients/common/settings-docs.h.in:147 #: ../clients/common/settings-docs.h.in:196 -#: ../clients/common/settings-docs.h.in:207 +#: ../clients/common/settings-docs.h.in:211 msgid "" "If non-zero, only transmit packets of the specified size or smaller, " "breaking larger packets up into multiple frames." @@ -8312,23 +8320,21 @@ msgid "" "similar to \"${CONNECTION}\" and uses a unique, fixed ID for the connection." msgstr "" "Відповідає ідентифікатору з'єднаннÑ, Ñкий викориÑтовуєтьÑÑ Ð· різною метою. " -"Він надає змогу налаштовувати декілька профілів Ð´Ð»Ñ Ñпільного викориÑтаннÑ" -" ідентифікатора. " -"Крім того, Ñтабільний ідентифікатор може міÑтити Ñимволи-замінники, вміÑÑ‚ " -"Ñких визначаєтьÑÑ Ñƒ динамічному режимі Ñ– визначеним чином залежить від" -" контекÑту. Стабільні ідентифікатори викориÑтовуютьÑÑ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ " -"Ñтабільних у IPv6 приватних Ð°Ð´Ñ€ÐµÑ Ð·Ð° допомогою" -" ipv6.addr-gen-mode=stable-privacy. Він також викориÑтовуютьÑÑ Ñк початкове" -" Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ " -"клонованих MAC-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ ethernet.cloned-mac-address=stable Ñ– wifi.cloned-" -"mac-address=stable. Він також викориÑтовуєтьÑÑ Ñк ідентифікатор клієнта DHCP " -"з ipv4.dhcp-client-id=stable Ñ– Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ…Ñ–Ð´Ð½Ð¾Ð³Ð¾ DUID DHCP з ipv6." -"dhcp-duid=stable-[llt,ll,uuid]. Зауважте, що, залежно від контекÑту, де його " -"викориÑтано, до алгоритму Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° може бути включено інші " -"параметри. Ðаприклад, чаÑто викориÑтовуєтьÑÑ Ð¾ÐºÑ€ÐµÐ¼Ð¸Ð¹ ключ вузла, щоб у " -"різних ÑиÑтем були різні ідентифікатори. Якщо вказано ipv6.addr-gen-" -"mode=stable-privacy, до обчиÑÐ»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ включено назву приÑтрою, щоб різні " -"інтерфейÑи мали різні адреÑи. Символ «$» Ñ” Ñпеціальним Ñимволом Ð´Ð»Ñ " +"Він надає змогу налаштовувати декілька профілів Ð´Ð»Ñ Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ " +"ідентифікатора. Крім того, Ñтабільний ідентифікатор може міÑтити Ñимволи-" +"замінники, вміÑÑ‚ Ñких визначаєтьÑÑ Ñƒ динамічному режимі Ñ– визначеним чином " +"залежить від контекÑту. Стабільні ідентифікатори викориÑтовуютьÑÑ Ð´Ð»Ñ " +"ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñтабільних у IPv6 приватних Ð°Ð´Ñ€ÐµÑ Ð·Ð° допомогою ipv6.addr-gen-" +"mode=stable-privacy. Він також викориÑтовуютьÑÑ Ñк початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ " +"ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ð¾Ð½Ð¾Ð²Ð°Ð½Ð¸Ñ… MAC-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ ethernet.cloned-mac-address=stable Ñ– wifi." +"cloned-mac-address=stable. Він також викориÑтовуєтьÑÑ Ñк ідентифікатор " +"клієнта DHCP з ipv4.dhcp-client-id=stable Ñ– Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ…Ñ–Ð´Ð½Ð¾Ð³Ð¾ DUID " +"DHCP з ipv6.dhcp-duid=stable-[llt,ll,uuid]. Зауважте, що, залежно від " +"контекÑту, де його викориÑтано, до алгоритму Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° може " +"бути включено інші параметри. Ðаприклад, чаÑто викориÑтовуєтьÑÑ Ð¾ÐºÑ€ÐµÐ¼Ð¸Ð¹ ключ " +"вузла, щоб у різних ÑиÑтем були різні ідентифікатори. Якщо вказано ipv6.addr-" +"gen-mode=stable-privacy, до обчиÑÐ»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ включено назву приÑтрою, щоб " +"різні інтерфейÑи мали різні адреÑи. Символ «$» Ñ” Ñпеціальним Ñимволом Ð´Ð»Ñ " "Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ підÑтавлÑÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸. У поточній верÑÑ–Ñ— " "передбачено підтримку ідентифікаторів «${CONNECTION}», «${DEVICE}», " "«${MAC}», «${BOOT}», «${RANDOM}». ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ†Ð¸Ñ… ідентифікаторів " @@ -8694,6 +8700,78 @@ msgstr "" #: ../clients/common/settings-docs.h.in:206 msgid "" +"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)." +msgstr "" +"Визначає, чи може бути визначено назву вузла ÑиÑтеми з DHCP у цьому " +"з'єднанні. Якщо вÑтановити NM_TERNARY_DEFAULT (-1), буде викориÑтано " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· загальних налаштувань. Якщо влаÑтивіÑÑ‚ÑŒ не має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ " +"загальних налаштуваннÑÑ…, NetworkManager припуÑкає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NM_TERNARY_TRUE " +"(1)." + +#: ../clients/common/settings-docs.h.in:207 +msgid "" +"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)." +msgstr "" +"Визначає, чи може бути визначено назву вузла ÑиÑтеми з оберненого пошуку DNS " +"Ð°Ð´Ñ€ÐµÑ Ñ†ÑŒÐ¾Ð³Ð¾ приÑтрою. Якщо вÑтановити NM_TERNARY_DEFAULT (-1), буде " +"викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· загальних налаштувань. Якщо влаÑтивіÑÑ‚ÑŒ не має " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ загальних налаштуваннÑÑ…, NetworkManager припуÑкає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " +"NM_TERNARY_TRUE (1)." + +#: ../clients/common/settings-docs.h.in:208 +msgid "" +"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_TRUE (1)." +msgstr "" +"Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NM_TERNARY_TRUE (1), NetworkManager намагатиметьÑÑ " +"отримати назву вузла за допомогою DHCPv4/DHCPv6 або зворотного пошуку DNS на " +"цьому приÑтрої, Ñкщо приÑтрій має типовий маршрут Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¾Ð³Ð¾ ÑімейÑтва " +"Ð°Ð´Ñ€ÐµÑ (IPv4/IPv6). Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NM_TERNARY_FALSE (0), назву " +"вузла може бути вÑтановлено з цього приÑтрою, навіть Ñкщо Ð´Ð»Ñ Ð½ÑŒÐ¾Ð³Ð¾ немає " +"типового маршруту. Якщо вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NM_TERNARY_DEFAULT (-1), буде " +"викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· загальних налаштувань. Якщо у влаÑтивоÑÑ‚Ñ– немає " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ загальних налаштуваннÑÑ…, NetworkManager припуÑкає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " +"NM_TERNARY_TRUE (1)." + +#: ../clients/common/settings-docs.h.in:209 +msgid "" +"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." +msgstr "" +"ВідноÑна пріоритетніÑÑ‚ÑŒ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸ визначенні назви вузла ÑиÑтеми. Чим " +"меншим Ñ” чиÑлове значеннÑ, тим вищою Ñ” пріоритетніÑÑ‚ÑŒ. З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· вищою " +"пріоритетніÑÑ‚ÑŽ буде розглÑнуто перед з'єднаннÑми із меншою пріоритетніÑÑ‚ÑŽ. " +"Якщо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ” нульовим, його може бути перевизначено загальним значеннÑм з " +"налаштувань NetworkManager. Якщо у влаÑтивоÑÑ‚Ñ– немає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ загальних " +"налаштуваннÑÑ…, буде викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 100. Від'ємні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´ÑÑ‚ÑŒ " +"до оÑобливої поведінки: Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ–Ð½ÑˆÐ¸Ñ… з'єднань із більшим чиÑловим " +"значеннÑм пріоритетноÑÑ‚Ñ–. Отже, Ñкщо Ñ–Ñнує принаймні один Ð·Ð°Ð¿Ð¸Ñ Ñ–Ð· від'ємною " +"пріоритетніÑÑ‚ÑŽ, Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ вузла буде викориÑтано лише з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ " +"із найнижчим значеннÑм пріоритетноÑÑ‚Ñ–." + +#: ../clients/common/settings-docs.h.in:210 +msgid "" "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)." @@ -8702,7 +8780,7 @@ msgstr "" "відповідною Ñталою адреÑою MAC. Ð¦Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ не змінює MAC-адреÑи приÑтрою " "(таку зміну називають підміною MAC)." -#: ../clients/common/settings-docs.h.in:208 +#: ../clients/common/settings-docs.h.in:212 msgid "" "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 " @@ -8713,7 +8791,7 @@ msgstr "" "Інші Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути вказано у форматі 16-бітового цілого чиÑла без знаку, " "Ñтарший біт Ñкого дорівнює одиниці, Ñкщо P_Key Ñ” ключем «повного членÑтва»." -#: ../clients/common/settings-docs.h.in:209 +#: ../clients/common/settings-docs.h.in:213 msgid "" "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 " @@ -8724,14 +8802,14 @@ msgstr "" "вказати базовий приÑтрій або вÑтановленнÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ–, " "або вÑтановленнÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «mac-address»." -#: ../clients/common/settings-docs.h.in:210 +#: ../clients/common/settings-docs.h.in:214 msgid "" "The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\"." msgstr "" "Режим Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ IP-over-InfiniBand. Можливі значеннÑ: «datagram» або " "«connected»." -#: ../clients/common/settings-docs.h.in:211 +#: ../clients/common/settings-docs.h.in:215 msgid "" "How many additional levels of encapsulation are permitted to be prepended to " "packets. This property applies only to IPv6 tunnels." @@ -8739,7 +8817,7 @@ msgstr "" "КількіÑÑ‚ÑŒ додаткових рівнів вкладеноÑÑ‚Ñ–, Ñкі дозволено допиÑувати до " "пакетів. Цю влаÑтивіÑÑ‚ÑŒ ÑтоÑуєтьÑÑ Ð»Ð¸ÑˆÐµ тунелів IPv6." -#: ../clients/common/settings-docs.h.in:212 +#: ../clients/common/settings-docs.h.in:216 msgid "" "Tunnel flags. Currently, the following values are supported: " "NM_IP_TUNNEL_FLAG_IP6_IGN_ENCAP_LIMIT (0x1), " @@ -8757,14 +8835,14 @@ msgstr "" "(0x10), NM_IP_TUNNEL_FLAG_IP6_USE_ORIG_FWMARK (0x20). Ці Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ” " "коректними лише Ð´Ð»Ñ Ñ‚ÑƒÐ½ÐµÐ»Ñ–Ð² IPv6." -#: ../clients/common/settings-docs.h.in:213 +#: ../clients/common/settings-docs.h.in:217 msgid "" "The flow label to assign to tunnel packets. This property applies only to " "IPv6 tunnels." msgstr "" "Мітка потоку Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ñ–Ð² тунелю. Ð¦Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ ÑтоÑуєтьÑÑ Ð»Ð¸ÑˆÐµ тунелів IPv6." -#: ../clients/common/settings-docs.h.in:214 +#: ../clients/common/settings-docs.h.in:218 msgid "" "The key used for tunnel input packets; the property is valid only for " "certain tunnel modes (GRE, IP6GRE). If empty, no key is used." @@ -8773,7 +8851,7 @@ msgstr "" "лише Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… режимів роботи тунелю (GRE, IP6GRE). Якщо порожній, ключ не " "викориÑтовуєтьÑÑ." -#: ../clients/common/settings-docs.h.in:215 +#: ../clients/common/settings-docs.h.in:219 msgid "" "The local endpoint of the tunnel; the value can be empty, otherwise it must " "contain an IPv4 or IPv6 address." @@ -8781,7 +8859,7 @@ msgstr "" "Локальна кінцева точка тунелю; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути порожнім або має міÑтити " "адреÑу IPv4 або IPv6." -#: ../clients/common/settings-docs.h.in:216 +#: ../clients/common/settings-docs.h.in:220 msgid "" "The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or " "NM_IP_TUNNEL_MODE_GRE (2)." @@ -8789,7 +8867,7 @@ msgstr "" "Режим тунелюваннÑ, наприклад NM_IP_TUNNEL_MODE_IPIP (1) або " "NM_IP_TUNNEL_MODE_GRE (2)." -#: ../clients/common/settings-docs.h.in:217 +#: ../clients/common/settings-docs.h.in:221 msgid "" "If non-zero, only transmit packets of the specified size or smaller, " "breaking larger packets up into multiple fragments." @@ -8797,7 +8875,7 @@ msgstr "" "Якщо має ненульове значеннÑ, передавати пакети лише вказаного або меншого " "розміру, розбиваючи великі пакети на декілька фрагментів." -#: ../clients/common/settings-docs.h.in:218 +#: ../clients/common/settings-docs.h.in:222 msgid "" "The key used for tunnel output packets; the property is valid only for " "certain tunnel modes (GRE, IP6GRE). If empty, no key is used." @@ -8806,7 +8884,7 @@ msgstr "" "чинною лише Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… режимів роботи тунелю (GRE, IP6GRE). Якщо порожній, " "ключ не викориÑтовуєтьÑÑ." -#: ../clients/common/settings-docs.h.in:219 +#: ../clients/common/settings-docs.h.in:223 msgid "" "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 " @@ -8816,18 +8894,18 @@ msgstr "" "з'єднаннÑ, до Ñкого буде прив'Ñзано новий приÑтрій так, що тунельовані " "пакети маршрутизуватимутьÑÑ Ð»Ð¸ÑˆÐµ крізь цей інтерфейÑ." -#: ../clients/common/settings-docs.h.in:220 +#: ../clients/common/settings-docs.h.in:224 msgid "Whether to enable Path MTU Discovery on this tunnel." msgstr "Визначає, чи Ñлід вмикати Path MTU Discovery Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ тунелю." -#: ../clients/common/settings-docs.h.in:221 +#: ../clients/common/settings-docs.h.in:225 msgid "" "The remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 " "address." msgstr "" "Віддалена кінцева точка тунелю; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” міÑтити адреÑу IPv4 або IPv6." -#: ../clients/common/settings-docs.h.in:222 +#: ../clients/common/settings-docs.h.in:226 msgid "" "The type of service (IPv4) or traffic class (IPv6) field to be set on " "tunneled packets." @@ -8835,7 +8913,7 @@ msgstr "" "Поле типу Ñлужби (IPv4) або клаÑу Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… (IPv6), Ñке Ñлід " "вÑтановити Ð´Ð»Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ¾Ð²Ð°Ð½Ð¸Ñ… пакетів." -#: ../clients/common/settings-docs.h.in:223 +#: ../clients/common/settings-docs.h.in:227 msgid "" "The TTL to assign to tunneled packets. 0 is a special value meaning that " "packets inherit the TTL value." @@ -8843,13 +8921,13 @@ msgstr "" "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TTL, Ñке Ñлід призначити Ð´Ð»Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ¾Ð²Ð°Ð½Ð¸Ñ… пакетів. 0 — Ñпеціальне " "значеннÑ, Ñке означає, що пакети уÑпадковують Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TTL." -#: ../clients/common/settings-docs.h.in:224 -#: ../clients/common/settings-docs.h.in:249 +#: ../clients/common/settings-docs.h.in:228 +#: ../clients/common/settings-docs.h.in:253 msgid "Array of IP addresses." msgstr "МаÑив IP-адреÑ." -#: ../clients/common/settings-docs.h.in:225 -#: ../clients/common/settings-docs.h.in:250 +#: ../clients/common/settings-docs.h.in:229 +#: ../clients/common/settings-docs.h.in:254 msgid "" "Timeout in milliseconds used to check for the presence of duplicate IP " "addresses on the network. If an address conflict is detected, the " @@ -8866,7 +8944,7 @@ msgstr "" "перевищує нуль, вважатиметьÑÑ Ñ‡Ð°Ñом Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ міліÑекундах. Цю " "влаÑтивіÑÑ‚ÑŒ у поточній верÑÑ–Ñ— реалізовано лише Ð´Ð»Ñ IPv4." -#: ../clients/common/settings-docs.h.in:226 +#: ../clients/common/settings-docs.h.in:230 msgid "" "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 " @@ -8910,7 +8988,7 @@ msgstr "" "налаштоване значеннÑ. Якщо Ñ– це Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ налаштовано, типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "залежатиме від додатка DHCP." -#: ../clients/common/settings-docs.h.in:227 +#: ../clients/common/settings-docs.h.in:231 msgid "" "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-" @@ -8920,8 +8998,8 @@ msgstr "" "адреÑи до Ñервера DHCP буде надіÑлано вказану FDQN. Цю влаÑтивіÑÑ‚ÑŒ не можна " "викориÑтовувати разом із влаÑтивіÑÑ‚ÑŽ «dhcp-hostname»." -#: ../clients/common/settings-docs.h.in:228 -#: ../clients/common/settings-docs.h.in:252 +#: ../clients/common/settings-docs.h.in:232 +#: ../clients/common/settings-docs.h.in:256 msgid "" "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-" @@ -8931,8 +9009,8 @@ msgstr "" "адреÑи до Ñервера DHCP буде надіÑлано вказану назву. Цю влаÑтивіÑÑ‚ÑŒ не можна " "викориÑтовувати разом із влаÑтивіÑÑ‚ÑŽ «dhcp-fqdn»." -#: ../clients/common/settings-docs.h.in:229 -#: ../clients/common/settings-docs.h.in:253 +#: ../clients/common/settings-docs.h.in:233 +#: ../clients/common/settings-docs.h.in:257 msgid "" "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 " @@ -8969,8 +9047,8 @@ msgstr "" "NM_DHCP_HOSTNAME_FLAG_NONE (0x0), у запитах DHCP надÑилатимутьÑÑ Ñтандартні " "прапорці FQDN, опиÑані вище." -#: ../clients/common/settings-docs.h.in:230 -#: ../clients/common/settings-docs.h.in:254 +#: ../clients/common/settings-docs.h.in:234 +#: ../clients/common/settings-docs.h.in:258 msgid "" "A string containing the \"Identity Association Identifier\" (IAID) used by " "the DHCP client. The property is a 32-bit decimal value or a special value " @@ -8999,8 +9077,8 @@ msgstr "" "буде проігноровано у dhclient, Ñкий завжди визначає IAID на оÑнові MAC-" "адреÑи." -#: ../clients/common/settings-docs.h.in:231 -#: ../clients/common/settings-docs.h.in:255 +#: ../clients/common/settings-docs.h.in:235 +#: ../clients/common/settings-docs.h.in:259 msgid "" "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 " @@ -9015,8 +9093,8 @@ msgstr "" "\"192.168.122.0/24\"). У поточній верÑÑ–Ñ— цю влаÑтивіÑÑ‚ÑŒ не реалізовано Ð´Ð»Ñ " "DHCPv6." -#: ../clients/common/settings-docs.h.in:232 -#: ../clients/common/settings-docs.h.in:256 +#: ../clients/common/settings-docs.h.in:236 +#: ../clients/common/settings-docs.h.in:260 msgid "" "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 " @@ -9031,8 +9109,8 @@ msgstr "" "влаÑтивоÑÑ‚Ñ– вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TRUE, буде надіÑлано поточну Ñтану назву вузла " "комп'ютера." -#: ../clients/common/settings-docs.h.in:233 -#: ../clients/common/settings-docs.h.in:257 +#: ../clients/common/settings-docs.h.in:237 +#: ../clients/common/settings-docs.h.in:261 msgid "" "A timeout for a DHCP transaction in seconds. If zero (the default), a " "globally configured default is used. If still unspecified, a device specific " @@ -9046,7 +9124,7 @@ msgstr "" "Ñекунд). Ð’Ñтановіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 2147483647 (MAXINT32), Ñкщо Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” " "бути необмеженим." -#: ../clients/common/settings-docs.h.in:234 +#: ../clients/common/settings-docs.h.in:238 msgid "" "The Vendor Class Identifier DHCP option (60). Special characters in the data " "string may be escaped using C-style escapes, nevertheless this property " @@ -9062,13 +9140,13 @@ msgstr "" "визначити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–, цей параметр DHCP не буде надіÑлано на " "Ñервер. Реалізовано з верÑÑ–Ñ— 1.28" -#: ../clients/common/settings-docs.h.in:235 -#: ../clients/common/settings-docs.h.in:258 +#: ../clients/common/settings-docs.h.in:239 +#: ../clients/common/settings-docs.h.in:262 msgid "Array of IP addresses of DNS servers." msgstr "МаÑив IP-Ð°Ð´Ñ€ÐµÑ Ñерверів DNS." -#: ../clients/common/settings-docs.h.in:236 -#: ../clients/common/settings-docs.h.in:259 +#: ../clients/common/settings-docs.h.in:240 +#: ../clients/common/settings-docs.h.in:263 msgid "" "Array of DNS options as described in man 5 resolv.conf. NULL means that the " "options are unset and left at the default. In this case NetworkManager will " @@ -9092,34 +9170,8 @@ msgstr "" "уваги, лише Ñкщо профіль вказує Ñервери назв у resolv.conf Ñ– Ð´Ð»Ñ Ð²ÑÑ–Ñ… " "відповідних профілів увімкнено «trust-ad»." -#: ../clients/common/settings-docs.h.in:237 -#: ../clients/common/settings-docs.h.in:260 -#| msgid "" -#| "DNS servers priority. The relative priority for DNS servers specified by " -#| "this setting. A lower value is better (higher priority). 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 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. 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. Negative " -#| "values have the special effect of excluding other configurations with a " -#| "greater priority value; so in presence of at least one negative priority, " -#| "only DNS servers from connections with the lowest priority value will be " -#| "used. When using a DNS resolver that supports Conditional Forwarding as " -#| "dns=dnsmasq or dns=systemd-resolved, each connection is used to query " -#| "domains in its search list. 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 highest priority (lowest " -#| "numerical value) wins. If a connection specifies a domain which is " -#| "subdomain of another domain with a negative DNS priority value, the " -#| "subdomain is ignored." +#: ../clients/common/settings-docs.h.in:241 +#: ../clients/common/settings-docs.h.in:264 msgid "" "DNS servers priority. The relative priority for DNS servers specified by " "this setting. A lower numerical value is better (higher priority). Negative " @@ -9129,7 +9181,7 @@ msgid "" "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 " +"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 " @@ -9159,56 +9211,49 @@ msgid "" "of the desired interface are configured." msgstr "" "ПріоритетніÑÑ‚ÑŒ Ñерверів DNS. Цим параметром визначаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ñна " -"пріоритетніÑÑ‚ÑŒ Ñерверів DNS. Менше Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°Ñ” вищу пріоритетніÑÑ‚ÑŒ." -" Від'ємні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” оÑобливі: вони виключають інші конфігурації із більшим" -" чиÑловим значеннÑм пріоритетноÑÑ‚Ñ–. Тому, Ñкщо Ñ” принаймні одне від'ємне" -" Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–, буде викориÑтано лише Ñервери DNS зі з'єднань із" -" найнижчим значеннÑм пріоритетноÑÑ‚Ñ–. Щоб уникнути уÑÑ–Ñ… витоків DNS," -" вÑтановіть пріоритетніÑÑ‚ÑŒ профілю, Ñкий Ñлід викориÑтовувати, у найбільше за" -" модулем від'ємне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· уÑÑ–Ñ… активних профілів з'єднань. Ðульове" -" Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” налаштованому на загальному рівні типовому " -"значенню. Якщо такого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” або воно Ñ” теж нульовим, типовим " -"значеннÑм вважатиметьÑÑ 50 Ð´Ð»Ñ VPN (включно із WireGuard) Ñ– 100 Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¸Ñ… " -"з'єднань. Зауважте, що пріоритетніÑÑ‚ÑŒ призначено Ð´Ð»Ñ ÑƒÐ¿Ð¾Ñ€ÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ " -"параметрів DNS Ð´Ð»Ñ Ñитуації із декількома активними з'єднаннÑми. Вона не " -"призводить до двозначноÑÑ‚Ñ– при виборі із декількох Ñерверів DNS у межах " -"одного профілю з'єднаннÑ. Якщо однакову пріоритетніÑÑ‚ÑŒ налаштовано длÑ" -" декількох приÑтроїв, Ñпочатку буде взÑто до уваги VPN, потім приÑтрої із" -" найкращим типовим маршрутом (маршрутом із найнижчою метрикою), а потім уÑÑ–" -" інші приÑтрої. Якщо викориÑтано dns=default, Ñервери з вищою " -"пріоритетніÑÑ‚ÑŽ будуть у верхній чаÑтині ÑпиÑку resolv.conf. Ð”Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " -"пріоритетноÑÑ‚Ñ– у межах одного профілю проÑто вкажіть Ñервери DNS у бажаному " -"порÑдку викориÑтаннÑ. Зауважте, що чаÑто заÑіб розв'ÑÐ·Ð°Ð½Ð½Ñ Ð½Ð°Ð¼Ð°Ð³Ð°Ñ”Ñ‚ÑŒÑÑ" -" викориÑтати Ñервери назв з /etc/resolv.conf за порÑдком зі ÑпиÑку," -" переходÑчи до наÑтупного Ñервера у ÑпиÑку, Ñкщо трапитьÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Див.," -" наприклад, варіант «rotate» Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° dns-options. Якщо від'ємних" -" пріоритетноÑтей DNS немає, буде розглÑнуто лише Ñервери назв із приÑтроїв із" -" найнижчою пріоритетніÑÑ‚ÑŽ. При викориÑтанні розв'Ñзувача DNS, у Ñкому" -" передбачено підтримку умовного переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ поділу DNS (із" -" параметрами dns=dnsmasq або dns=systemd-resolved), Ð´Ð»Ñ Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ–Ð² у" -" його ÑпиÑку пошуку кожне з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтовуєтьÑÑ. Домени пошуку" -" визначають, Ñкі з Ñерверів назв опитувати, а пріоритетніÑÑ‚ÑŒ DNS" -" викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– Ñерверів назв на оÑнові" -" домену. Запити Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ–Ð², Ñких немає у " -"жодному зі ÑпиÑків пошуку переÑпрÑмовуютьÑÑ Ñ‡ÐµÑ€ÐµÐ· з'єднаннÑ, Ñкі мають " -"оÑобливих домен-замінник «~.», Ñкий додаєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ до з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· " -"типовим маршрутом (або може бути доданий вручну). Якщо декілька з'єднань " -"визначають один домен, викориÑтовуватиметьÑÑ Ð´Ð¾Ð¼ÐµÐ½ із вищим значеннÑм " -"пріоритетноÑÑ‚Ñ– (меншим чиÑловим значеннÑм). Якщо підлеглий домен налаштовано" -" на інший інтерфейÑ, його буде прийнÑто незалежно від пріоритетноÑÑ‚Ñ–, Ñкщо на" -" батьківÑькому домені не іншому інтерфейÑÑ– не вÑтановлено від'ємної" -" пріоритетноÑÑ‚Ñ–, Ñка ÑпричинÑÑ” Ð·Ð°Ñ‚Ñ–Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ домену. З поділом DNS" -" можна уникнути небажаних витоків DNS належним Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾Ñтей" -" DNS та доменів пошуку, так, щоб було налаштовано лише Ñервери назв бажаного" -" інтерфейÑу." +"пріоритетніÑÑ‚ÑŒ Ñерверів DNS. Менше Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°Ñ” вищу пріоритетніÑÑ‚ÑŒ. " +"Від'ємні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ â€” оÑобливі: вони виключають інші конфігурації із більшим " +"чиÑловим значеннÑм пріоритетноÑÑ‚Ñ–. Тому, Ñкщо Ñ” принаймні одне від'ємне " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–, буде викориÑтано лише Ñервери DNS зі з'єднань із " +"найнижчим значеннÑм пріоритетноÑÑ‚Ñ–. Щоб уникнути уÑÑ–Ñ… витоків DNS, " +"вÑтановіть пріоритетніÑÑ‚ÑŒ профілю, Ñкий Ñлід викориÑтовувати, у найбільше за " +"модулем від'ємне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· уÑÑ–Ñ… активних профілів з'єднань. Ðульове " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð°Ñ” налаштованому на загальному рівні типовому значенню. " +"Якщо такого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” або воно Ñ” теж нульовим, типовим значеннÑм " +"вважатиметьÑÑ 50 Ð´Ð»Ñ VPN (включно із WireGuard) Ñ– 100 Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¸Ñ… з'єднань. " +"Зауважте, що пріоритетніÑÑ‚ÑŒ призначено Ð´Ð»Ñ ÑƒÐ¿Ð¾Ñ€ÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² DNS " +"Ð´Ð»Ñ Ñитуації із декількома активними з'єднаннÑми. Вона не призводить до " +"двозначноÑÑ‚Ñ– при виборі із декількох Ñерверів DNS у межах одного профілю " +"з'єднаннÑ. Якщо однакову пріоритетніÑÑ‚ÑŒ налаштовано Ð´Ð»Ñ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… приÑтроїв, " +"Ñпочатку буде взÑто до уваги VPN, потім приÑтрої із найкращим типовим " +"маршрутом (маршрутом із найнижчою метрикою), а потім уÑÑ– інші приÑтрої. Якщо " +"викориÑтано dns=default, Ñервери з вищою пріоритетніÑÑ‚ÑŽ будуть у верхній " +"чаÑтині ÑпиÑку resolv.conf. Ð”Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– у межах одного " +"профілю проÑто вкажіть Ñервери DNS у бажаному порÑдку викориÑтаннÑ. " +"Зауважте, що чаÑто заÑіб розв'ÑÐ·Ð°Ð½Ð½Ñ Ð½Ð°Ð¼Ð°Ð³Ð°Ñ”Ñ‚ÑŒÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати Ñервери назв з /" +"etc/resolv.conf за порÑдком зі ÑпиÑку, переходÑчи до наÑтупного Ñервера у " +"ÑпиÑку, Ñкщо трапитьÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Див., наприклад, варіант «rotate» Ð´Ð»Ñ " +"параметра dns-options. Якщо від'ємних пріоритетноÑтей DNS немає, буде " +"розглÑнуто лише Ñервери назв із приÑтроїв із найнижчою пріоритетніÑÑ‚ÑŽ. При " +"викориÑтанні розв'Ñзувача DNS, у Ñкому передбачено підтримку умовного " +"переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ поділу DNS (із параметрами dns=dnsmasq або dns=systemd-" +"resolved), Ð´Ð»Ñ Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ–Ð² у його ÑпиÑку пошуку кожне з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ " +"викориÑтовуєтьÑÑ. Домени пошуку визначають, Ñкі з Ñерверів назв опитувати, а " +"пріоритетніÑÑ‚ÑŒ DNS викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– Ñерверів " +"назв на оÑнові домену. Запити Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ–Ð², Ñких немає у жодному зі ÑпиÑків " +"пошуку переÑпрÑмовуютьÑÑ Ñ‡ÐµÑ€ÐµÐ· з'єднаннÑ, Ñкі мають оÑобливих домен-замінник " +"«~.», Ñкий додаєтьÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ до з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· типовим маршрутом (або може " +"бути доданий вручну). Якщо декілька з'єднань визначають один домен, " +"викориÑтовуватиметьÑÑ Ð´Ð¾Ð¼ÐµÐ½ із вищим значеннÑм пріоритетноÑÑ‚Ñ– (меншим " +"чиÑловим значеннÑм). Якщо підлеглий домен налаштовано на інший інтерфейÑ, " +"його буде прийнÑто незалежно від пріоритетноÑÑ‚Ñ–, Ñкщо на батьківÑькому " +"домені не іншому інтерфейÑÑ– не вÑтановлено від'ємної пріоритетноÑÑ‚Ñ–, Ñка " +"ÑпричинÑÑ” Ð·Ð°Ñ‚Ñ–Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ домену. З поділом DNS можна уникнути " +"небажаних витоків DNS належним Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾Ñтей DNS та доменів " +"пошуку, так, щоб було налаштовано лише Ñервери назв бажаного інтерфейÑу." -#: ../clients/common/settings-docs.h.in:238 -#: ../clients/common/settings-docs.h.in:261 -#| msgid "" -#| "Array 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." +#: ../clients/common/settings-docs.h.in:242 +#: ../clients/common/settings-docs.h.in:265 msgid "" "Array of DNS search domains. Domains starting with a tilde ('~') are " "considered 'routing' domains and are used only to decide the interface over " @@ -9221,14 +9266,14 @@ msgstr "" "МаÑив доменів пошуку DNS. ЗапиÑи доменів, Ñкі починаютьÑÑ Ð· тильди («~») " "вважатимутьÑÑ Ð·Ð°Ð¿Ð¸Ñами «маршрутних» доменів Ñ– викориÑтовуватимутьÑÑ Ð´Ð»Ñ " "Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу, крізь Ñкий Ñлід ÑпрÑмовувати запит; такі запиÑи не " -"викориÑтовуватимутьÑÑ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ñ… назв вузлів. При викориÑтанні" -" додатка DNS, у Ñкому передбачено умовне переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ поділ DNS" -" домени пошуку вказують, Ñкі Ñервери назв Ñлід опитувати. Це робить поведінку" -" відмінною від запуÑку зі звичайним /etc/resolv.conf. Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ," -" ознайомтеÑÑ Ñ–Ð· довідкою до параметра dns-priority." +"викориÑтовуватимутьÑÑ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ñ… назв вузлів. При викориÑтанні " +"додатка DNS, у Ñкому передбачено умовне переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ поділ DNS " +"домени пошуку вказують, Ñкі Ñервери назв Ñлід опитувати. Це робить поведінку " +"відмінною від запуÑку зі звичайним /etc/resolv.conf. Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ, " +"ознайомтеÑÑ Ñ–Ð· довідкою до параметра dns-priority." -#: ../clients/common/settings-docs.h.in:239 -#: ../clients/common/settings-docs.h.in:262 +#: ../clients/common/settings-docs.h.in:243 +#: ../clients/common/settings-docs.h.in:266 msgid "" "The gateway associated with this configuration. This is only meaningful if " "\"addresses\" is also set. The gateway's main purpose is to control the next " @@ -9244,13 +9289,8 @@ msgstr "" "налаштувань IP вказано never-default. Ðльтернативою вÑтановленню шлюзу Ñ” " "Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñтатичного типового маршруту з довжиною префікÑа /0." -#: ../clients/common/settings-docs.h.in:240 -#: ../clients/common/settings-docs.h.in:263 -#| msgid "" -#| "When \"method\" is set to \"auto\" and this property to TRUE, " -#| "automatically configured nameservers and search domains are ignored and " -#| "only nameservers and search domains specified in the \"dns\" and \"dns-" -#| "search\" properties, if any, are used." +#: ../clients/common/settings-docs.h.in:244 +#: ../clients/common/settings-docs.h.in:267 msgid "" "When \"method\" is set to \"auto\" and this property to TRUE, automatically " "configured name servers and search domains are ignored and only name servers " @@ -9263,8 +9303,8 @@ msgstr "" "пошуку, вказані за допомогою влаÑтивоÑтей «dns» Ñ– «dns-search», Ñкщо буде " "вказано ÑкіÑÑŒ запиÑи Ñерверів Ñ– доменів Ð´Ð»Ñ Ñ†Ð¸Ñ… влаÑтивоÑтей." -#: ../clients/common/settings-docs.h.in:241 -#: ../clients/common/settings-docs.h.in:264 +#: ../clients/common/settings-docs.h.in:245 +#: ../clients/common/settings-docs.h.in:268 msgid "" "When \"method\" is set to \"auto\" and this property to TRUE, automatically " "configured routes are ignored and only routes specified in the \"routes\" " @@ -9275,8 +9315,8 @@ msgstr "" "викориÑтовуватимутьÑÑ Ð»Ð¸ÑˆÐµ маршрути, вказані за допомогою влаÑтивоÑÑ‚Ñ– " "«routes», Ñкщо такі Ñ–Ñнують." -#: ../clients/common/settings-docs.h.in:242 -#: ../clients/common/settings-docs.h.in:266 +#: ../clients/common/settings-docs.h.in:246 +#: ../clients/common/settings-docs.h.in:270 msgid "" "If TRUE, allow overall network configuration to proceed even if the " "configuration specified by this property times out. Note that at least one " @@ -9293,8 +9333,8 @@ msgstr "" "NMSettingIP4Config уможливлює уÑпішне Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑієї мережі, Ñкщо не " "вдаєтьÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ IPv4, але IPv6 налаштовано уÑпішно." -#: ../clients/common/settings-docs.h.in:243 -#: ../clients/common/settings-docs.h.in:267 +#: ../clients/common/settings-docs.h.in:247 +#: ../clients/common/settings-docs.h.in:271 msgid "" "IP configuration method. NMSettingIP4Config and NMSettingIP6Config both " "support \"disabled\", \"auto\", \"manual\", and \"link-local\". See the " @@ -9323,8 +9363,8 @@ msgstr "" "налаштовано на інтерфейÑÑ–, Ñкий надає Ñпільний доÑтуп до інтернету Ð´Ð»Ñ " "підмережі, а не на з'єднанні, Ñке надаєтьÑÑ Ñƒ Ñпільний доÑтуп." -#: ../clients/common/settings-docs.h.in:244 -#: ../clients/common/settings-docs.h.in:268 +#: ../clients/common/settings-docs.h.in:248 +#: ../clients/common/settings-docs.h.in:272 msgid "" "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." @@ -9333,8 +9373,8 @@ msgstr "" "IP, що означає, що його ніколи не буде пов'Ñзано із типовим маршрутом у " "NetworkManager." -#: ../clients/common/settings-docs.h.in:245 -#: ../clients/common/settings-docs.h.in:270 +#: ../clients/common/settings-docs.h.in:249 +#: ../clients/common/settings-docs.h.in:274 msgid "" "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 " @@ -9354,8 +9394,8 @@ msgstr "" "наÑправді означає, що вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 1024. Ð”Ð»Ñ IPv4 нуль Ñ” звичайним " "значеннÑм Ð´Ð»Ñ Ð¼ÐµÑ‚Ñ€Ð¸ÐºÐ¸." -#: ../clients/common/settings-docs.h.in:246 -#: ../clients/common/settings-docs.h.in:271 +#: ../clients/common/settings-docs.h.in:250 +#: ../clients/common/settings-docs.h.in:275 msgid "" "Enable policy routing (source routing) and set the routing table used when " "adding routes. This affects all routes, including device-routes, IPv4LL, " @@ -9387,12 +9427,12 @@ msgstr "" "таблиці. Так зроблено, щоб зберегти зворотну ÑуміÑніÑÑ‚ÑŒ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів, " "Ñкі змінюють таблиці маршрутизації з-поза меж NetworkManager." -#: ../clients/common/settings-docs.h.in:247 -#: ../clients/common/settings-docs.h.in:272 +#: ../clients/common/settings-docs.h.in:251 +#: ../clients/common/settings-docs.h.in:276 msgid "Array of IP routes." msgstr "МаÑив IP-маршрутів." -#: ../clients/common/settings-docs.h.in:248 +#: ../clients/common/settings-docs.h.in:252 msgid "" "Configure method for creating the address for use with RFC4862 IPv6 " "Stateless Address Autoconfiguration. The permitted values are: " @@ -9433,7 +9473,7 @@ msgstr "" "конфіденційноÑÑ‚Ñ–, Ñкі налаштовуютьÑÑ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŽ «ip6-privacy», Ñ– не впливає " "на тимчаÑові адреÑи, Ñкі налаштовано за допомогою відповідної влаÑтивоÑÑ‚Ñ–." -#: ../clients/common/settings-docs.h.in:251 +#: ../clients/common/settings-docs.h.in:255 msgid "" "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 " @@ -9490,7 +9530,7 @@ msgstr "" "викориÑтано загальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Â«ipv6.dhcp-duid». Якщо загальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "не вказано, буде викориÑтано типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«lease»." -#: ../clients/common/settings-docs.h.in:265 +#: ../clients/common/settings-docs.h.in:269 msgid "" "Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If " "enabled, it makes the kernel generate a temporary IPv6 address in addition " @@ -9521,7 +9561,7 @@ msgstr "" "увімкнено за допомогою параметра «stable-privacy» влаÑтивоÑÑ‚Ñ– «addr-gen-" "mode», Ñк інший ÑпоÑіб уникнути ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° вузлом за допомогою Ð°Ð´Ñ€ÐµÑ IPv6." -#: ../clients/common/settings-docs.h.in:269 +#: ../clients/common/settings-docs.h.in:273 msgid "" "A timeout for waiting Router Advertisements in seconds. If zero (the " "default), a globally configured default is used. If still unspecified, the " @@ -9534,7 +9574,7 @@ msgstr "" "залежатиме від параметрів sysctl приÑтрою. Ð’Ñтановіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 2147483647 " "(MAXINT32), Ñкщо Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути необмеженим." -#: ../clients/common/settings-docs.h.in:273 +#: ../clients/common/settings-docs.h.in:277 msgid "" "Configure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 " "tokenized interface identifiers. Useful with eui64 addr-gen-mode." @@ -9543,22 +9583,22 @@ msgstr "" "chown-6man-tokenised-ipv6-identifiers-02. КориÑне у поєднанні зі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "addr-gen-mode eui64." -#: ../clients/common/settings-docs.h.in:274 +#: ../clients/common/settings-docs.h.in:278 msgid "Whether the transmitted traffic must be encrypted." msgstr "Визначає, чи Ñлід шифрувати дані, Ñкі передаютьÑÑ." -#: ../clients/common/settings-docs.h.in:275 +#: ../clients/common/settings-docs.h.in:279 msgid "" "The pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement." msgstr "" "Попереднього поширений CAK (ключ прив'Ñзки з'єднань) Ð´Ð»Ñ ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð² " "MACsec." -#: ../clients/common/settings-docs.h.in:276 +#: ../clients/common/settings-docs.h.in:280 msgid "Flags indicating how to handle the \"mka-cak\" property." msgstr "Прапорці, Ñкі позначають, Ñк оброблÑти влаÑтивіÑÑ‚ÑŒ «mka-cak»." -#: ../clients/common/settings-docs.h.in:277 +#: ../clients/common/settings-docs.h.in:281 msgid "" "The pre-shared CKN (Connectivity-association Key Name) for MACsec Key " "Agreement." @@ -9566,7 +9606,7 @@ msgstr "" "Попереднього поширена CKN (назва ключа ключ прив'Ñзки з'єднань) Ð´Ð»Ñ " "ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð² MACsec." -#: ../clients/common/settings-docs.h.in:278 +#: ../clients/common/settings-docs.h.in:282 msgid "" "Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key " "Agreement) is obtained." @@ -9574,7 +9614,7 @@ msgstr "" "Визначає ÑпоÑіб Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ CAK (ключа прив'Ñзки з'єднань) Ð´Ð»Ñ MKA (ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ " "ключів MACsec)." -#: ../clients/common/settings-docs.h.in:279 +#: ../clients/common/settings-docs.h.in:283 msgid "" "If given, specifies the parent interface name or parent connection UUID from " "which this MACSEC interface should be created. If this property is not " @@ -9586,7 +9626,7 @@ msgstr "" "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– не вказано, Ð·Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” міÑтити " "параметр «802-3-ethernet» із влаÑтивіÑÑ‚ÑŽ «mac-address»." -#: ../clients/common/settings-docs.h.in:280 +#: ../clients/common/settings-docs.h.in:284 msgid "" "The port component of the SCI (Secure Channel Identifier), between 1 and " "65534." @@ -9594,17 +9634,17 @@ msgstr "" "Компонент порту SCI (ідентифікатора безпечного каналу), Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ 1 до " "65534." -#: ../clients/common/settings-docs.h.in:281 +#: ../clients/common/settings-docs.h.in:285 msgid "" "Specifies whether the SCI (Secure Channel Identifier) is included in every " "packet." msgstr "Вказує, чи включено SCI (Secure Channel Identifier) до кожного пакета." -#: ../clients/common/settings-docs.h.in:282 +#: ../clients/common/settings-docs.h.in:286 msgid "Specifies the validation mode for incoming frames." msgstr "Визначає режим перевірки Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… кадрів." -#: ../clients/common/settings-docs.h.in:283 +#: ../clients/common/settings-docs.h.in:287 msgid "" "The macvlan mode, which specifies the communication mechanism between " "multiple macvlans on the same lower device." @@ -9612,7 +9652,7 @@ msgstr "" "Режим macvlan, Ñкий визначає механізм обміну даними між декількома macvlan " "на одному приÑтрої нижнього рівнÑ." -#: ../clients/common/settings-docs.h.in:284 +#: ../clients/common/settings-docs.h.in:288 msgid "" "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 " @@ -9624,15 +9664,15 @@ msgstr "" "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– не вказано, Ð·Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” міÑтити " "параметр «802-3-ethernet» із влаÑтивіÑÑ‚ÑŽ «mac-address»." -#: ../clients/common/settings-docs.h.in:285 +#: ../clients/common/settings-docs.h.in:289 msgid "Whether the interface should be put in promiscuous mode." msgstr "Визначає, чи Ñлід переводити Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñƒ нерозбірливий режим." -#: ../clients/common/settings-docs.h.in:286 +#: ../clients/common/settings-docs.h.in:290 msgid "Whether the interface should be a MACVTAP." msgstr "Визначає, чи має бути Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом MACVTAP." -#: ../clients/common/settings-docs.h.in:287 +#: ../clients/common/settings-docs.h.in:291 msgid "" "A list of driver names to match. Each element is a shell wildcard pattern. " "See NMSettingMatch:interface-name for how special characters '|', '&', '!' " @@ -9645,7 +9685,7 @@ msgstr "" "Ñимволами — «|», «&», «!» та «\\» — Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñзкових Ñ– " "обов'Ñзкових відповідноÑтей та Ñ–Ð½Ð²ÐµÑ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð·Ñ–Ñ€Ñ†Ñ–Ð²." -#: ../clients/common/settings-docs.h.in:288 +#: ../clients/common/settings-docs.h.in:292 msgid "" "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 " @@ -9677,7 +9717,7 @@ msgstr "" "початку взірцÑ. Ðаприклад, «&\\!a» Ñ” обов'Ñзковою умовою Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ " "відповідноÑÑ‚Ñ– Ñ€Ñдку «!a»." -#: ../clients/common/settings-docs.h.in:289 +#: ../clients/common/settings-docs.h.in:293 msgid "" "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 if prefixed with " @@ -9701,7 +9741,7 @@ msgstr "" "ÑкориÑтатиÑÑ Ñпеціальними Ñимволами — «|», «&», «!» та «\\» — Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "необов'Ñзкових Ñ– обов'Ñзкових відповідноÑтей та Ñ–Ð½Ð²ÐµÑ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð·Ñ–Ñ€Ñ†Ñ–Ð²." -#: ../clients/common/settings-docs.h.in:290 +#: ../clients/common/settings-docs.h.in:294 msgid "" "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 " @@ -9729,35 +9769,39 @@ msgstr "" "«\\» — Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñзкових Ñ– обов'Ñзкових відповідноÑтей та " "Ñ–Ð½Ð²ÐµÑ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð·Ñ–Ñ€Ñ†Ñ–Ð²." -#: ../clients/common/settings-docs.h.in:291 +#: ../clients/common/settings-docs.h.in:295 msgid "The data path type. One of \"system\", \"netdev\" or empty." msgstr "" "Тип шлÑху до даних. Одне з таких значень: «system», «netdev» або порожнє " "значеннÑ." -#: ../clients/common/settings-docs.h.in:292 +#: ../clients/common/settings-docs.h.in:296 msgid "The bridge failure mode. One of \"secure\", \"standalone\" or empty." msgstr "" "Режим відмови міÑтка. Одне з таких значень: «secure», «standalone» або " "порожнє значеннÑ." -#: ../clients/common/settings-docs.h.in:293 +#: ../clients/common/settings-docs.h.in:297 msgid "Enable or disable multicast snooping." msgstr "Увімкнути або вимкнути переÑтавлÑÐ½Ð½Ñ ÑƒÐ½Ñ–Ð²ÐµÑ€Ñальної транÑлÑції." -#: ../clients/common/settings-docs.h.in:294 +#: ../clients/common/settings-docs.h.in:298 msgid "Enable or disable RSTP." msgstr "Увімкнути або вимкнути RSTP." -#: ../clients/common/settings-docs.h.in:295 +#: ../clients/common/settings-docs.h.in:299 msgid "Enable or disable STP." msgstr "Увімкнути або вимкнути STP." -#: ../clients/common/settings-docs.h.in:296 +#: ../clients/common/settings-docs.h.in:300 msgid "Open vSwitch DPDK device arguments." msgstr "Параметри приÑтрою Open vSwitch DPDK." -#: ../clients/common/settings-docs.h.in:297 +#: ../clients/common/settings-docs.h.in:301 +msgid "A dictionary of key/value pairs with exernal-ids for OVS." +msgstr "Словник з пар ключ/Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· зовнішніми ідентифікаторами Ð´Ð»Ñ OVS." + +#: ../clients/common/settings-docs.h.in:302 msgid "" "The interface type. Either \"internal\", \"system\", \"patch\", \"dpdk\", or " "empty." @@ -9765,7 +9809,7 @@ msgstr "" "Тип інтерфейÑу. Ð Ñдок «internal», «system», «patch», «dpdk» або порожній " "Ñ€Ñдок." -#: ../clients/common/settings-docs.h.in:298 +#: ../clients/common/settings-docs.h.in:303 msgid "" "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." @@ -9774,30 +9818,30 @@ msgstr "" "з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð° іншому боці також має вÑтановлювати цей Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñк " "однорівневий вузол." -#: ../clients/common/settings-docs.h.in:299 +#: ../clients/common/settings-docs.h.in:304 msgid "The time port must be inactive in order to be considered down." msgstr "Щоб вважатиÑÑ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¸Ð¼, порт чаÑу має бути неактивним." -#: ../clients/common/settings-docs.h.in:300 +#: ../clients/common/settings-docs.h.in:305 msgid "" "Bonding mode. One of \"active-backup\", \"balance-slb\", or \"balance-tcp\"." msgstr "" "Режим прив'ÑзуваннÑ. Одне з таких значень: «active-backup», «balance-slb» " "або «balance-tcp»." -#: ../clients/common/settings-docs.h.in:301 +#: ../clients/common/settings-docs.h.in:306 msgid "The time port must be active before it starts forwarding traffic." msgstr "Щоб почати переÑпрÑмовувати дані, Ñлід активувати порт чаÑу." -#: ../clients/common/settings-docs.h.in:302 +#: ../clients/common/settings-docs.h.in:307 msgid "LACP mode. One of \"active\", \"off\", or \"passive\"." msgstr "Режим LACP. Одне з таких значень: «active», «off» або «passive»." -#: ../clients/common/settings-docs.h.in:303 +#: ../clients/common/settings-docs.h.in:308 msgid "The VLAN tag in the range 0-4095." msgstr "Теґ VLAN у діапазоні від 0 до 4095." -#: ../clients/common/settings-docs.h.in:304 +#: ../clients/common/settings-docs.h.in:309 msgid "" "The VLAN mode. One of \"access\", \"native-tagged\", \"native-untagged\", " "\"trunk\" or unset." @@ -9805,7 +9849,7 @@ msgstr "" "Режим VLAN. Одне з таких значень: «access», «native-tagged», «native-" "untagged», «trunk» або порожнє значеннÑ." -#: ../clients/common/settings-docs.h.in:305 +#: ../clients/common/settings-docs.h.in:310 msgid "" "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 " @@ -9815,7 +9859,7 @@ msgstr "" "вказану швидкіÑÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… у бодах. Зазвичай, Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– " "Ñлід залишити нульове значеннÑ, щоб швидкіÑÑ‚ÑŒ було вибрано автоматично." -#: ../clients/common/settings-docs.h.in:306 +#: ../clients/common/settings-docs.h.in:311 msgid "" "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 " @@ -9825,7 +9869,7 @@ msgstr "" "ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð¼ апаратних даних за допомогою Ñигналів RTS Ñ– CTS. За " "звичних умов, Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– має бути вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ FALSE." -#: ../clients/common/settings-docs.h.in:307 +#: ../clients/common/settings-docs.h.in:312 msgid "" "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 " @@ -9837,7 +9881,7 @@ msgstr "" "кількіÑÑ‚ÑŒ луна-запитів LCP. Якщо викориÑтовуєтьÑÑ Ñ†Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ, Ð´Ð»Ñ " "влаÑтивоÑÑ‚Ñ– «lcp-echo-interval» Ñлід вÑтановити ненульове значеннÑ." -#: ../clients/common/settings-docs.h.in:308 +#: ../clients/common/settings-docs.h.in:313 msgid "" "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 " @@ -9849,7 +9893,7 @@ msgstr "" "відповідатимуть на луна-запити, а деÑкі — ні. Визначити, чи відповідатиме " "певний вузол, у автоматичному режимі неможливо." -#: ../clients/common/settings-docs.h.in:309 +#: ../clients/common/settings-docs.h.in:314 msgid "" "If TRUE, stateful MPPE is used. See pppd documentation for more information " "on stateful MPPE." @@ -9857,7 +9901,7 @@ msgstr "" "Якщо TRUE, викориÑтовуватиметьÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ MPPE зі Ñтанами (stateful). " "Докладніший Ð¾Ð¿Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ MPPE зі Ñтанами наведено у документації із pppd." -#: ../clients/common/settings-docs.h.in:310 +#: ../clients/common/settings-docs.h.in:315 msgid "" "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 " @@ -9867,20 +9911,20 @@ msgstr "" "щодо того, щоб він надÑилав пакети, не більші за вказаний розмір. Якщо має " "ненульове значеннÑ, MRU має бути від 128 до 16384." -#: ../clients/common/settings-docs.h.in:311 +#: ../clients/common/settings-docs.h.in:316 msgid "" "If non-zero, instruct pppd to send packets no larger than the specified size." msgstr "" "Якщо має ненульове значеннÑ, наказує pppd надÑилати пакети, не більші за " "вказаний розмір." -#: ../clients/common/settings-docs.h.in:312 +#: ../clients/common/settings-docs.h.in:317 msgid "If TRUE, Van Jacobsen TCP header compression will not be requested." msgstr "" "Якщо має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TRUE, запит щодо ÑтиÑÐºÐ°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² TCP ван ЯкобÑена не " "надÑилатиметьÑÑ." -#: ../clients/common/settings-docs.h.in:313 +#: ../clients/common/settings-docs.h.in:318 msgid "" "If TRUE, do not require the other side (usually the PPP server) to " "authenticate itself to the client. If FALSE, require authentication from " @@ -9891,35 +9935,35 @@ msgstr "" "FALSE, вимагати Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð· боку віддаленого вузла. У " "більшоÑÑ‚Ñ– випадків Ñлід викориÑтовувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TRUE." -#: ../clients/common/settings-docs.h.in:314 +#: ../clients/common/settings-docs.h.in:319 msgid "If TRUE, BSD compression will not be requested." msgstr "Якщо TRUE, ÑтиÑÐºÐ°Ð½Ð½Ñ BSD не вимагатиметьÑÑ." -#: ../clients/common/settings-docs.h.in:315 +#: ../clients/common/settings-docs.h.in:320 msgid "If TRUE, \"deflate\" compression will not be requested." msgstr "Якщо TRUE, ÑтиÑÐºÐ°Ð½Ð½Ñ Â«deflate» не вимагатиметьÑÑ." -#: ../clients/common/settings-docs.h.in:316 +#: ../clients/common/settings-docs.h.in:321 msgid "If TRUE, the CHAP authentication method will not be used." msgstr "Якщо TRUE, ÑпоÑіб Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ CHAP не викориÑтовуватиметьÑÑ." -#: ../clients/common/settings-docs.h.in:317 +#: ../clients/common/settings-docs.h.in:322 msgid "If TRUE, the EAP authentication method will not be used." msgstr "Якщо TRUE, ÑпоÑіб Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ EAP не викориÑтовуватиметьÑÑ." -#: ../clients/common/settings-docs.h.in:318 +#: ../clients/common/settings-docs.h.in:323 msgid "If TRUE, the MSCHAP authentication method will not be used." msgstr "Якщо TRUE, ÑпоÑіб Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ MSCHAP не викориÑтовуватиметьÑÑ." -#: ../clients/common/settings-docs.h.in:319 +#: ../clients/common/settings-docs.h.in:324 msgid "If TRUE, the MSCHAPv2 authentication method will not be used." msgstr "Якщо TRUE, ÑпоÑіб Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ MSCHAPv2 не викориÑтовуватиметьÑÑ." -#: ../clients/common/settings-docs.h.in:320 +#: ../clients/common/settings-docs.h.in:325 msgid "If TRUE, the PAP authentication method will not be used." msgstr "Якщо TRUE, ÑпоÑіб Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ PAP не викориÑтовуватиметьÑÑ." -#: ../clients/common/settings-docs.h.in:321 +#: ../clients/common/settings-docs.h.in:326 msgid "" "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 " @@ -9930,7 +9974,7 @@ msgstr "" "128-бітове MPPE виÑвитьÑÑ Ð½ÐµÐ´Ð¾Ñтупним, ÑÐµÐ°Ð½Ñ Ð½Ðµ буде Ñтворено. Зауважте, що " "MPPE не викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¼Ð¾Ð±Ñ–Ð»ÑŒÐ½Ð¸Ñ… широкоÑмугових з'єднань." -#: ../clients/common/settings-docs.h.in:322 +#: ../clients/common/settings-docs.h.in:327 msgid "" "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 " @@ -9941,7 +9985,7 @@ msgstr "" "Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «require-mppe» також має бути вÑтановлено TRUE. Якщо 128-" "бітове MPPE виÑвитьÑÑ Ð½ÐµÐ´Ð¾Ñтупним, ÑÐµÐ°Ð½Ñ Ð½Ðµ буде Ñтворено." -#: ../clients/common/settings-docs.h.in:323 +#: ../clients/common/settings-docs.h.in:328 msgid "" "If given, specifies the parent interface name on which this PPPoE connection " "should be created. If this property is not specified, the connection is " @@ -9953,11 +9997,11 @@ msgstr "" "з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ активовано на інтерфейÑÑ–, Ñкий вказано за допомогою параметра " "«interface-name» NMSettingConnection." -#: ../clients/common/settings-docs.h.in:324 +#: ../clients/common/settings-docs.h.in:329 msgid "Password used to authenticate with the PPPoE service." msgstr "Пароль, Ñкий викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° Ñлужбі PPPoE." -#: ../clients/common/settings-docs.h.in:326 +#: ../clients/common/settings-docs.h.in:331 msgid "" "If specified, instruct PPPoE to only initiate sessions with access " "concentrators that provide the specified service. For most providers, this " @@ -9970,33 +10014,33 @@ msgstr "" "Ñкщо ви маєте Ñправу із концентраторами із декількома ÑпоÑобами доÑтупу або " "відомо, що вказана Ñлужба Ñ” необхідною." -#: ../clients/common/settings-docs.h.in:327 +#: ../clients/common/settings-docs.h.in:332 msgid "Username used to authenticate with the PPPoE service." msgstr "" "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, Ñке викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° Ñлужбі " "PPPoE." -#: ../clients/common/settings-docs.h.in:328 +#: ../clients/common/settings-docs.h.in:333 msgid "Whether the proxy configuration is for browser only." msgstr "" "Визначає, чи викориÑтовуютьÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐºÑÑ– лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ Ð´Ð»Ñ " "переглÑду інтернету." -#: ../clients/common/settings-docs.h.in:329 +#: ../clients/common/settings-docs.h.in:334 msgid "" "Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)" msgstr "" "СпоÑіб Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾ÐºÑÑ–. Типовим Ñ” NM_SETTING_PROXY_METHOD_NONE (0)" -#: ../clients/common/settings-docs.h.in:330 +#: ../clients/common/settings-docs.h.in:335 msgid "PAC script for the connection." msgstr "Скрипт PAC Ð´Ð»Ñ Ð·'єднаннÑ." -#: ../clients/common/settings-docs.h.in:331 +#: ../clients/common/settings-docs.h.in:336 msgid "PAC URL for obtaining PAC file." msgstr "ÐдреÑа PAC Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PAC." -#: ../clients/common/settings-docs.h.in:332 +#: ../clients/common/settings-docs.h.in:337 msgid "" "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 " @@ -10007,20 +10051,20 @@ msgstr "" "загалом, Ð´Ð»Ñ Ð½Ð¸Ñ… параметри швидкоÑÑ‚Ñ– ігноруютьÑÑ â€” проÑто викориÑтовуєтьÑÑ " "найвища доÑтупна швидкіÑÑ‚ÑŒ." -#: ../clients/common/settings-docs.h.in:333 +#: ../clients/common/settings-docs.h.in:338 msgid "Byte-width of the serial communication. The 8 in \"8n1\" for example." msgstr "Байтова ширина поÑлідовного обміну даними. Ðаприклад, 8 у «8n1»." -#: ../clients/common/settings-docs.h.in:334 +#: ../clients/common/settings-docs.h.in:339 msgid "Parity setting of the serial port." msgstr "Параметр парноÑÑ‚Ñ– поÑлідовного порту." -#: ../clients/common/settings-docs.h.in:335 +#: ../clients/common/settings-docs.h.in:340 msgid "Time to delay between each byte sent to the modem, in microseconds." msgstr "" "Затримка у чаÑÑ– між надÑиланнÑми одного байта на модем, у мікроÑекундах." -#: ../clients/common/settings-docs.h.in:336 +#: ../clients/common/settings-docs.h.in:341 msgid "" "Number of stop bits for communication on the serial port. Either 1 or 2. " "The 1 in \"8n1\" for example." @@ -10028,7 +10072,7 @@ msgstr "" "КількіÑÑ‚ÑŒ бітів зупинки Ð´Ð»Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ даними на поÑлідовному порту. Може мати " "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 1 або 2. Ðаприклад, 1 у «8n1»." -#: ../clients/common/settings-docs.h.in:337 +#: ../clients/common/settings-docs.h.in:342 msgid "" "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 " @@ -10048,7 +10092,7 @@ msgstr "" "викориÑтовуватимутьÑÑ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ñ– типові параметри. Якщо загальні типові " "параметри не вказано, припуÑкатиметьÑÑ Ð²Ð°Ñ€Ñ–Ð°Ð½Ñ‚ NM_TERNARY_TRUE (1)." -#: ../clients/common/settings-docs.h.in:338 +#: ../clients/common/settings-docs.h.in:343 msgid "" "The total number of virtual functions to create. Note that when the sriov " "setting is present NetworkManager enforces the number of virtual functions " @@ -10063,7 +10107,7 @@ msgstr "" "внеÑенню будь-Ñких змін до параметрів SR-IOV, не додавайте параметр sriov до " "параметрів з'єднаннÑ." -#: ../clients/common/settings-docs.h.in:339 +#: ../clients/common/settings-docs.h.in:344 msgid "" "Array of virtual function descriptors. Each VF descriptor is a dictionary " "mapping attribute names to GVariant values. The 'index' entry is mandatory " @@ -10089,15 +10133,15 @@ msgstr "" "форму: «ІДЕÐТИФІКÐТОР[.ПРІОРИТЕТÐІСТЬ[.ПРОТОКОЛ]]». ЗначеннÑм ПРОТОКОЛ може " "бути або «q» Ð´Ð»Ñ 802.1Q (типовий варіант) або «ad» Ð´Ð»Ñ 802.1ad." -#: ../clients/common/settings-docs.h.in:340 +#: ../clients/common/settings-docs.h.in:345 msgid "Array of TC queueing disciplines." msgstr "МаÑив диÑциплін TC у черзі." -#: ../clients/common/settings-docs.h.in:341 +#: ../clients/common/settings-docs.h.in:346 msgid "Array of TC traffic filters." msgstr "СпиÑок TC фільтрів обміну даними." -#: ../clients/common/settings-docs.h.in:342 +#: ../clients/common/settings-docs.h.in:347 msgid "" "The JSON configuration for the team network interface. The property should " "contain raw JSON configuration data suitable for teamd, because the value is " @@ -10110,8 +10154,8 @@ msgstr "" "викориÑтовуватимутьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– налаштуваннÑ. Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про " "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…, ознайомитеÑÑ Ñ–Ð· підручником (man) з teamd.conf." -#: ../clients/common/settings-docs.h.in:343 -#: ../clients/common/settings-docs.h.in:361 +#: ../clients/common/settings-docs.h.in:348 +#: ../clients/common/settings-docs.h.in:366 msgid "" "Link watchers configuration for the connection: each link watcher is defined " "by a dictionary, whose keys depend upon the selected link watcher. Available " @@ -10132,23 +10176,23 @@ msgstr "" "«validate-inactive», «send-always». Докладніше про це на Ñторінці підручника " "(man) щодо teamd.conf." -#: ../clients/common/settings-docs.h.in:344 +#: ../clients/common/settings-docs.h.in:349 msgid "Corresponds to the teamd mcast_rejoin.count." msgstr "Відповідає mcast_rejoin.count у teamd." -#: ../clients/common/settings-docs.h.in:345 +#: ../clients/common/settings-docs.h.in:350 msgid "Corresponds to the teamd mcast_rejoin.interval." msgstr "Відповідає mcast_rejoin.interval у teamd." -#: ../clients/common/settings-docs.h.in:346 +#: ../clients/common/settings-docs.h.in:351 msgid "Corresponds to the teamd notify_peers.count." msgstr "Відповідає notify_peers.count у teamd." -#: ../clients/common/settings-docs.h.in:347 +#: ../clients/common/settings-docs.h.in:352 msgid "Corresponds to the teamd notify_peers.interval." msgstr "Відповідає notify_peers.interval у teamd." -#: ../clients/common/settings-docs.h.in:348 +#: ../clients/common/settings-docs.h.in:353 msgid "" "Corresponds to the teamd runner.name. Permitted values are: \"roundrobin\", " "\"broadcast\", \"activebackup\", \"loadbalance\", \"lacp\", \"random\"." @@ -10156,43 +10200,43 @@ msgstr "" "Відповідає runner.name у teamd. Можливі такі значеннÑ: «roundrobin», " "«broadcast», «activebackup», «loadbalance», «lacp», «random»." -#: ../clients/common/settings-docs.h.in:349 +#: ../clients/common/settings-docs.h.in:354 msgid "Corresponds to the teamd runner.active." msgstr "Відповідає runner.active у teamd." -#: ../clients/common/settings-docs.h.in:350 +#: ../clients/common/settings-docs.h.in:355 msgid "Corresponds to the teamd runner.agg_select_policy." msgstr "Відповідає runner.agg_select_policy у teamd." -#: ../clients/common/settings-docs.h.in:351 +#: ../clients/common/settings-docs.h.in:356 msgid "Corresponds to the teamd runner.fast_rate." msgstr "Відповідає runner.fast_rate у teamd." -#: ../clients/common/settings-docs.h.in:352 +#: ../clients/common/settings-docs.h.in:357 msgid "Corresponds to the teamd runner.hwaddr_policy." msgstr "Відповідає runner.hwaddr_policy у teamd." -#: ../clients/common/settings-docs.h.in:353 +#: ../clients/common/settings-docs.h.in:358 msgid "Corresponds to the teamd runner.min_ports." msgstr "Відповідає runner.min_ports у teamd." -#: ../clients/common/settings-docs.h.in:354 +#: ../clients/common/settings-docs.h.in:359 msgid "Corresponds to the teamd runner.sys_prio." msgstr "Відповідає runner.sys_prio у teamd." -#: ../clients/common/settings-docs.h.in:355 +#: ../clients/common/settings-docs.h.in:360 msgid "Corresponds to the teamd runner.tx_balancer.name." msgstr "Відповідає runner.tx_balancer.name у teamd." -#: ../clients/common/settings-docs.h.in:356 +#: ../clients/common/settings-docs.h.in:361 msgid "Corresponds to the teamd runner.tx_balancer.interval." msgstr "Відповідає runner.tx_balancer.interval у teamd." -#: ../clients/common/settings-docs.h.in:357 +#: ../clients/common/settings-docs.h.in:362 msgid "Corresponds to the teamd runner.tx_hash." msgstr "Відповідає runner.tx_hash у teamd." -#: ../clients/common/settings-docs.h.in:358 +#: ../clients/common/settings-docs.h.in:363 msgid "" "The JSON configuration for the team port. The property should contain raw " "JSON configuration data suitable for teamd, because the value is passed " @@ -10205,19 +10249,19 @@ msgstr "" "викориÑтовуватимутьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– налаштуваннÑ. Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про " "Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…, ознайомитеÑÑ Ñ–Ð· підручником (man) з teamd.conf." -#: ../clients/common/settings-docs.h.in:359 +#: ../clients/common/settings-docs.h.in:364 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_key." msgstr "Відповідає ports.PORTIFNAME.lacp_key у teamd." -#: ../clients/common/settings-docs.h.in:360 +#: ../clients/common/settings-docs.h.in:365 msgid "Corresponds to the teamd ports.PORTIFNAME.lacp_prio." msgstr "Відповідає ports.PORTIFNAME.lacp_prio у teamd." -#: ../clients/common/settings-docs.h.in:362 +#: ../clients/common/settings-docs.h.in:367 msgid "Corresponds to the teamd ports.PORTIFNAME.prio." msgstr "Відповідає ports.PORTIFNAME.prio у teamd." -#: ../clients/common/settings-docs.h.in:363 +#: ../clients/common/settings-docs.h.in:368 msgid "" "Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the " "parameter is skipped from the json config." @@ -10225,11 +10269,11 @@ msgstr "" "Відповідає ports.PORTIFNAME.queue_id у teamd. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ -1 означає, що " "параметр пропуÑкаєтьÑÑ Ñƒ налаштуваннÑÑ… json." -#: ../clients/common/settings-docs.h.in:364 +#: ../clients/common/settings-docs.h.in:369 msgid "Corresponds to the teamd ports.PORTIFNAME.sticky." msgstr "Відповідає ports.PORTIFNAME.sticky у teamd." -#: ../clients/common/settings-docs.h.in:365 +#: ../clients/common/settings-docs.h.in:370 msgid "" "The group ID which will own the device. If set to NULL everyone will be able " "to use the device." @@ -10237,7 +10281,7 @@ msgstr "" "Ідентифікатор групи-влаÑника приÑтрою. Якщо вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NULL, " "приÑтроєм зможе кориÑтуватиÑÑ Ð±ÑƒÐ´ÑŒ-хто." -#: ../clients/common/settings-docs.h.in:366 +#: ../clients/common/settings-docs.h.in:371 msgid "" "The operating mode of the virtual device. Allowed values are " "NM_SETTING_TUN_MODE_TUN (1) to create a layer 3 device and " @@ -10247,7 +10291,7 @@ msgstr "" "NM_SETTING_TUN_MODE_TUN (1) Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ñтрою шару 3 Ñ– " "NM_SETTING_TUN_MODE_TAP (2) Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ñтрою Ethernet-подібного шару 2." -#: ../clients/common/settings-docs.h.in:367 +#: ../clients/common/settings-docs.h.in:372 msgid "" "If the property is set to TRUE, the interface will support multiple file " "descriptors (queues) to parallelize packet sending or receiving. Otherwise, " @@ -10258,7 +10302,7 @@ msgstr "" "надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ Ð¾Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÐµÑ‚Ñ–Ð². Якщо ж вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ FALSE, " "інтерфейÑом підтримуватиметьÑÑ Ð»Ð¸ÑˆÐµ одна черга." -#: ../clients/common/settings-docs.h.in:368 +#: ../clients/common/settings-docs.h.in:373 msgid "" "The user ID which will own the device. If set to NULL everyone will be able " "to use the device." @@ -10266,7 +10310,7 @@ msgstr "" "Ідентифікатор кориÑтувача-влаÑника приÑтрою. Якщо вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NULL, " "приÑтроєм зможе кориÑтуватиÑÑ Ð±ÑƒÐ´ÑŒ-хто." -#: ../clients/common/settings-docs.h.in:369 +#: ../clients/common/settings-docs.h.in:374 msgid "" "If TRUE the interface will prepend a 4 byte header describing the physical " "interface to the packets." @@ -10274,7 +10318,7 @@ msgstr "" "Якщо TRUE, Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾Ð¿Ð¸Ñуватиме на початку пакетів заголовок у 4 байти із " "опиÑом фізичного інтерфейÑу." -#: ../clients/common/settings-docs.h.in:370 +#: ../clients/common/settings-docs.h.in:375 msgid "" "If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network " "header." @@ -10282,7 +10326,7 @@ msgstr "" "Якщо IFF_VNET_HDR має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TRUE, тунельовані пакети включатимуть " "заголовок мережі virtio." -#: ../clients/common/settings-docs.h.in:371 +#: ../clients/common/settings-docs.h.in:376 msgid "" "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 " @@ -10295,7 +10339,15 @@ msgstr "" "формату ASCII, але Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ бути довільними Ñ€Ñдками UTF8, довжина " "Ñких не перевищує певного значеннÑ." -#: ../clients/common/settings-docs.h.in:372 +#: ../clients/common/settings-docs.h.in:377 +msgid "" +"This property specifies the peer interface name of the veth. This property " +"is mandatory." +msgstr "" +"Ð¦Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ визначає назву однорангового інтерфейÑу Ð´Ð»Ñ veth. ЗначеннÑ" +" цієї влаÑтивоÑÑ‚Ñ– Ñлід вказати обов'Ñзково." + +#: ../clients/common/settings-docs.h.in:378 msgid "" "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" @@ -10305,7 +10357,7 @@ msgstr "" "802.1p. Прив'Ñзка визначаєтьÑÑ Ñƒ форматі «з:до», де обидва значеннÑ, «з» Ñ– " "«до» Ñ” цілими додатними чиÑлами, наприклад «7:3»." -#: ../clients/common/settings-docs.h.in:373 +#: ../clients/common/settings-docs.h.in:379 msgid "" "One or more flags which control the behavior and features of the VLAN " "interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of " @@ -10327,7 +10379,7 @@ msgstr "" "зберегти зворотну ÑуміÑніÑÑ‚ÑŒ, типовим значеннÑм у програмному інтерфейÑÑ– D-" "Bus лишаєтьÑÑ 0, а неÑтача влаÑтивоÑÑ‚Ñ– у D-Bus також розглÑдаєтьÑÑ Ñк 0." -#: ../clients/common/settings-docs.h.in:374 +#: ../clients/common/settings-docs.h.in:380 msgid "" "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." @@ -10336,7 +10388,7 @@ msgstr "" "з'єднаннÑм. Коректним діапазоном Ñ” діапазон від 0 до 4094, без " "зарезервованого ідентифікатора 4095." -#: ../clients/common/settings-docs.h.in:375 +#: ../clients/common/settings-docs.h.in:381 msgid "" "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" @@ -10346,7 +10398,7 @@ msgstr "" "Linux. Прив'Ñзка визначаєтьÑÑ Ñƒ форматі «з:до», де обидва значеннÑ, «з» Ñ– " "«до» Ñ” цілими додатними чиÑлами, наприклад «7:3»." -#: ../clients/common/settings-docs.h.in:376 +#: ../clients/common/settings-docs.h.in:382 msgid "" "If given, specifies the parent interface name or parent connection UUID from " "which this VLAN interface should be created. If this property is not " @@ -10358,7 +10410,7 @@ msgstr "" "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– не вказано, Ð·Ð°Ð¿Ð¸Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” міÑтити " "параметр «802-3-ethernet» із влаÑтивіÑÑ‚ÑŽ «mac-address»." -#: ../clients/common/settings-docs.h.in:377 +#: ../clients/common/settings-docs.h.in:383 msgid "" "Dictionary of key/value pairs of VPN plugin specific data. Both keys and " "values must be strings." @@ -10366,7 +10418,7 @@ msgstr "" "Словник із пар ключ-Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñпецифічних даних додатка VPN. Величинами " "ключа Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ бути лише текÑтові Ñ€Ñдки." -#: ../clients/common/settings-docs.h.in:378 +#: ../clients/common/settings-docs.h.in:384 msgid "" "If the VPN service supports persistence, and this property is TRUE, the VPN " "will attempt to stay connected across link changes and outages, until " @@ -10377,7 +10429,7 @@ msgstr "" "Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ параметрів зв'Ñзку або неможливоÑÑ‚Ñ– обміну даними, аж доки " "з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ буде розірвано Ñвним чином." -#: ../clients/common/settings-docs.h.in:379 +#: ../clients/common/settings-docs.h.in:385 msgid "" "Dictionary of key/value pairs of VPN plugin specific secrets like passwords " "or private keys. Both keys and values must be strings." @@ -10386,7 +10438,7 @@ msgstr "" "VPN, зокрема паролів або закритих ключів. Величинами ключа Ñ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑƒÑ‚ÑŒ " "бути лише текÑтові Ñ€Ñдки." -#: ../clients/common/settings-docs.h.in:380 +#: ../clients/common/settings-docs.h.in:386 msgid "" "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." @@ -10395,7 +10447,7 @@ msgstr "" "додатка з його мережею. Приклад: org.freedesktop.NetworkManager.vpnc Ð´Ð»Ñ " "додатка vpnc." -#: ../clients/common/settings-docs.h.in:381 +#: ../clients/common/settings-docs.h.in:387 msgid "" "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 " @@ -10408,7 +10460,7 @@ msgstr "" "допомогою параметра vpn.timeout у файлі налаштувань). ЗначеннÑ, Ñкі " "перевищують нуль, визначають Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ Ñекундах." -#: ../clients/common/settings-docs.h.in:382 +#: ../clients/common/settings-docs.h.in:388 msgid "" "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 " @@ -10424,15 +10476,15 @@ msgstr "" "порожнє, NetworkManager автоматично викориÑтає ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, Ñкий " "надіÑлав запит щодо вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN." -#: ../clients/common/settings-docs.h.in:383 +#: ../clients/common/settings-docs.h.in:389 msgid "The routing table for this VRF." msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ VRF." -#: ../clients/common/settings-docs.h.in:384 +#: ../clients/common/settings-docs.h.in:390 msgid "Specifies the lifetime in seconds of FDB entries learnt by the kernel." msgstr "Визначає Ñ‡Ð°Ñ Ð¶Ð¸Ñ‚Ñ‚Ñ Ñƒ Ñекундах запиÑів FDB, вивчених Ñдром." -#: ../clients/common/settings-docs.h.in:385 +#: ../clients/common/settings-docs.h.in:391 msgid "" "Specifies the UDP destination port to communicate to the remote VXLAN tunnel " "endpoint." @@ -10440,22 +10492,22 @@ msgstr "" "Визначає порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ UDP Ð´Ð»Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ даними із віддаленою кінцевою " "точкою тунелю VXLAN." -#: ../clients/common/settings-docs.h.in:386 +#: ../clients/common/settings-docs.h.in:392 msgid "" "Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use." msgstr "" "Визначає ідентифікатор мережі VXLAN (або ідентифікатор Ñегмента VXLAN), Ñким " "Ñлід ÑкориÑтатиÑÑ." -#: ../clients/common/settings-docs.h.in:387 +#: ../clients/common/settings-docs.h.in:393 msgid "Specifies whether netlink LL ADDR miss notifications are generated." msgstr "Визначає, чи будуть ÑтворюватиÑÑ ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ netlink LL ADDR miss." -#: ../clients/common/settings-docs.h.in:388 +#: ../clients/common/settings-docs.h.in:394 msgid "Specifies whether netlink IP ADDR miss notifications are generated." msgstr "Визначає, чи будуть ÑтворюватиÑÑ ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ netlink IP ADDR miss." -#: ../clients/common/settings-docs.h.in:389 +#: ../clients/common/settings-docs.h.in:395 msgid "" "Specifies whether unknown source link layer addresses and IP addresses are " "entered into the VXLAN device forwarding database." @@ -10463,7 +10515,7 @@ msgstr "" "Вказує, чи вводÑÑ‚ÑŒÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ñ– адреÑи шару поÑилань та IP-адреÑи до бази " "даних переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтроїв VXLAN." -#: ../clients/common/settings-docs.h.in:390 +#: ../clients/common/settings-docs.h.in:396 msgid "" "Specifies the maximum number of FDB entries. A value of zero means that the " "kernel will store unlimited entries." @@ -10471,24 +10523,24 @@ msgstr "" "Вказує макÑимальну кількіÑÑ‚ÑŒ запиÑів FDB. Ðульове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°Ñ”, що Ñдро " "зберігатиме необмежену кількіÑÑ‚ÑŒ запиÑів." -#: ../clients/common/settings-docs.h.in:391 +#: ../clients/common/settings-docs.h.in:397 msgid "If given, specifies the source IP address to use in outgoing packets." msgstr "" "Якщо задано, визначає початкову IP-адреÑу, Ñкою Ñлід ÑкориÑтатиÑÑ Ð´Ð»Ñ " "вихідних пакетів." -#: ../clients/common/settings-docs.h.in:392 +#: ../clients/common/settings-docs.h.in:398 msgid "" "If given, specifies the parent interface name or parent connection UUID." msgstr "" "Якщо задано, визначає назву батьківÑького інтерфейÑу або UUID батьківÑького " "з'єднаннÑ." -#: ../clients/common/settings-docs.h.in:393 +#: ../clients/common/settings-docs.h.in:399 msgid "Specifies whether ARP proxy is turned on." msgstr "Визначає, чи увімкнено ARP-прокÑÑ–." -#: ../clients/common/settings-docs.h.in:394 +#: ../clients/common/settings-docs.h.in:400 msgid "" "Specifies the unicast destination IP address to use in outgoing packets when " "the destination link layer address is not known in the VXLAN device " @@ -10499,11 +10551,11 @@ msgstr "" "переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтроїв VXLAN, або IP-адреÑа універÑальної транÑлÑції, з " "Ñкою Ñлід вÑтановити зв'Ñзок." -#: ../clients/common/settings-docs.h.in:395 +#: ../clients/common/settings-docs.h.in:401 msgid "Specifies whether route short circuit is turned on." msgstr "Визначає, чи увімкнено коротке Ð·Ð°Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ñƒ." -#: ../clients/common/settings-docs.h.in:396 +#: ../clients/common/settings-docs.h.in:402 msgid "" "Specifies the maximum UDP source port to communicate to the remote VXLAN " "tunnel endpoint." @@ -10511,7 +10563,7 @@ msgstr "" "Визначає макÑимальний початковий порт UDP Ð´Ð»Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ даними із віддаленою " "кінцевою точкою тунелю VXLAN." -#: ../clients/common/settings-docs.h.in:397 +#: ../clients/common/settings-docs.h.in:403 msgid "" "Specifies the minimum UDP source port to communicate to the remote VXLAN " "tunnel endpoint." @@ -10519,16 +10571,16 @@ msgstr "" "Визначає мінімальний початковий порт UDP Ð´Ð»Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ даними із віддаленою " "кінцевою точкою тунелю VXLAN." -#: ../clients/common/settings-docs.h.in:398 +#: ../clients/common/settings-docs.h.in:404 msgid "Specifies the TOS value to use in outgoing packets." msgstr "Визначає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TOS, Ñке Ñлід викориÑтовувати Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів." -#: ../clients/common/settings-docs.h.in:399 +#: ../clients/common/settings-docs.h.in:405 msgid "Specifies the time-to-live value to use in outgoing packets." msgstr "" "Визначає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу життÑ, Ñке Ñлід викориÑтовувати Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів." -#: ../clients/common/settings-docs.h.in:400 +#: ../clients/common/settings-docs.h.in:406 msgid "" "The P2P device that should be connected to. Currently, this is the only way " "to create or join a group." @@ -10536,7 +10588,7 @@ msgstr "" "ПриÑтрій P2P, з Ñким Ñлід вÑтановити з'єднаннÑ. У поточній верÑÑ–Ñ— це єдиний " "ÑпоÑіб ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ або Ð´Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ неї." -#: ../clients/common/settings-docs.h.in:401 +#: ../clients/common/settings-docs.h.in:407 msgid "" "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 " @@ -10550,7 +10602,7 @@ msgstr "" "Вказати ці елементи з метою вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° тут. Цей параметр Ñ” " "кориÑним лише Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— клієнта диÑÐ¿Ð»ÐµÑ Wi-Fi." -#: ../clients/common/settings-docs.h.in:402 +#: ../clients/common/settings-docs.h.in:408 msgid "" "Flags indicating which mode of WPS is to be used. There's little point in " "changing the default setting as NetworkManager will automatically determine " @@ -10560,7 +10612,7 @@ msgstr "" "типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ варто, оÑкільки NetworkManager автоматично визначає " "найкращий режим." -#: ../clients/common/settings-docs.h.in:403 +#: ../clients/common/settings-docs.h.in:409 msgid "" "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 " @@ -10570,7 +10622,7 @@ msgstr "" "відповідною адреÑою MAC. Ð¦Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ не змінює MAC-адреÑи приÑтрою (таку " "зміну називають підміною MAC). ЗаÑтаріле: 1" -#: ../clients/common/settings-docs.h.in:404 +#: ../clients/common/settings-docs.h.in:410 msgid "" "Network Service Provider (NSP) name of the WiMAX network this connection " "should use. Deprecated: 1" @@ -10578,7 +10630,7 @@ msgstr "" "Ðазва надавача мережевих поÑлуг (NSP) Ð´Ð»Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– WiMAX, Ñку має " "викориÑтовувати це з'єднаннÑ. ЗаÑтаріле: 1" -#: ../clients/common/settings-docs.h.in:405 +#: ../clients/common/settings-docs.h.in:411 msgid "" "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 " @@ -10590,7 +10642,7 @@ msgstr "" "fwmark Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів. Зауважте, що Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Â«ip4-auto-default-route» " "або «ip6-auto-default-route» неÑвним чином призводить до вибору fwmark." -#: ../clients/common/settings-docs.h.in:406 +#: ../clients/common/settings-docs.h.in:412 msgid "" "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 " @@ -10618,11 +10670,11 @@ msgstr "" "Ñ– не буде жодного вузла, Ñкий викориÑтовує типовий маршрут (default-route) у " "дозволених IP-адреÑах (allowed-ips)." -#: ../clients/common/settings-docs.h.in:407 +#: ../clients/common/settings-docs.h.in:413 msgid "Like ip4-auto-default-route, but for the IPv6 default route." msgstr "Те Ñаме, що ip4-auto-default-route, але Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð³Ð¾ маршруту IPv6." -#: ../clients/common/settings-docs.h.in:408 +#: ../clients/common/settings-docs.h.in:414 msgid "" "The listen-port. If listen-port is not specified, the port will be chosen " "randomly when the interface comes up." @@ -10630,7 +10682,7 @@ msgstr "" "Порт Ð´Ð»Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані. Якщо порт Ð´Ð»Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° дані не вказано, " "номер буде вибрано випадковим чином під Ñ‡Ð°Ñ Ð¿Ñ–Ð´Ð½ÑÑ‚Ñ‚Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу." -#: ../clients/common/settings-docs.h.in:409 +#: ../clients/common/settings-docs.h.in:415 msgid "" "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 " @@ -10643,7 +10695,7 @@ msgstr "" "відміну від параметра MTU wg-quick, тут не берутьÑÑ Ð´Ð¾ уваги поточні " "маршрути на момент активації." -#: ../clients/common/settings-docs.h.in:410 +#: ../clients/common/settings-docs.h.in:416 msgid "" "Whether to automatically add routes for the AllowedIPs ranges of the peers. " "If TRUE (the default), NetworkManager will automatically add routes in the " @@ -10665,15 +10717,15 @@ msgstr "" "«0.0.0.0/0» або «::/0», а Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ увімкнено ipv4.never-default або ipv6." "never-default, маршрут вузла Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вузла не буде додано автоматично." -#: ../clients/common/settings-docs.h.in:411 +#: ../clients/common/settings-docs.h.in:417 msgid "The 256 bit private-key in base64 encoding." msgstr "256-бітовий закритий ключ у кодуванні base64." -#: ../clients/common/settings-docs.h.in:412 +#: ../clients/common/settings-docs.h.in:418 msgid "Flags indicating how to handle the \"private-key\" property." msgstr "Прапорці, Ñкі позначають, Ñк оброблÑти влаÑтивіÑÑ‚ÑŒ «private-key»." -#: ../clients/common/settings-docs.h.in:413 +#: ../clients/common/settings-docs.h.in:419 msgid "" "IEEE 802.15.4 channel. A positive integer or -1, meaning \"do not set, use " "whatever the device is already set to\"." @@ -10681,7 +10733,7 @@ msgstr "" "Канал IEEE 802.15.4. Додане ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ -1, що означає «не " "вÑтановлювати, викориÑтовувати той, Ñкий вже вÑтановлено приÑтроєм»." -#: ../clients/common/settings-docs.h.in:414 +#: ../clients/common/settings-docs.h.in:420 msgid "" "If specified, this connection will only apply to the IEEE 802.15.4 (WPAN) " "MAC layer device whose permanent MAC address matches." @@ -10689,7 +10741,7 @@ msgstr "" "Якщо вказано, це з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°ÑтоÑовуватиметьÑÑ Ð»Ð¸ÑˆÐµ до приÑтрою шару MAC " "IEEE 802.15.4 (WPAN) із відповідною Ñталою адреÑою MAC." -#: ../clients/common/settings-docs.h.in:415 +#: ../clients/common/settings-docs.h.in:421 msgid "" "IEEE 802.15.4 channel page. A positive integer or -1, meaning \"do not set, " "use whatever the device is already set to\"." @@ -10697,11 +10749,11 @@ msgstr "" "Сторінка каналу IEEE 80215.4. Додане ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ -1, що означає «не " "вÑтановлювати, викориÑтовувати ту, Ñку вже вÑтановлено приÑтроєм»." -#: ../clients/common/settings-docs.h.in:416 +#: ../clients/common/settings-docs.h.in:422 msgid "IEEE 802.15.4 Personal Area Network (PAN) identifier." msgstr "Ідентифікатор Personal Area Network (PAN) IEEE 802.15.4." -#: ../clients/common/settings-docs.h.in:417 +#: ../clients/common/settings-docs.h.in:423 msgid "Short IEEE 802.15.4 address to be used within a restricted environment." msgstr "" "Коротка адреÑа IEEE 802.15.4, Ñку Ñлід викориÑтовувати у обмеженому " @@ -10797,7 +10849,7 @@ msgstr "Wi-Fi" msgid "Wi-Fi connection %d" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Wi-Fi %d" -#: ../clients/tui/nm-editor-utils.c:145 ../libnm-core/nm-connection.c:2702 +#: ../clients/tui/nm-editor-utils.c:145 ../libnm-core/nm-connection.c:2704 #: ../libnm/nm-device.c:1670 msgid "InfiniBand" msgstr "InfiniBand" @@ -10825,9 +10877,9 @@ msgstr "DSL" msgid "DSL connection %d" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DSL %d" -#: ../clients/tui/nm-editor-utils.c:172 ../libnm-core/nm-connection.c:2694 +#: ../clients/tui/nm-editor-utils.c:172 ../libnm-core/nm-connection.c:2696 #: ../libnm/nm-device.c:1672 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5420 +#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5464 msgid "Bond" msgstr "Прив'Ñзка" @@ -10836,9 +10888,9 @@ msgstr "Прив'Ñзка" msgid "Bond connection %d" msgstr "Прив'Ñзане з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d" -#: ../clients/tui/nm-editor-utils.c:181 ../libnm-core/nm-connection.c:2698 +#: ../clients/tui/nm-editor-utils.c:181 ../libnm-core/nm-connection.c:2700 #: ../libnm/nm-device.c:1676 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5828 +#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5872 msgid "Bridge" msgstr "МіÑток" @@ -10847,9 +10899,9 @@ msgstr "МіÑток" msgid "Bridge connection %d" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка %d" -#: ../clients/tui/nm-editor-utils.c:190 ../libnm-core/nm-connection.c:2696 +#: ../clients/tui/nm-editor-utils.c:190 ../libnm-core/nm-connection.c:2698 #: ../libnm/nm-device.c:1674 -#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5491 +#: ../src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5535 msgid "Team" msgstr "Команда" @@ -10859,7 +10911,7 @@ msgid "Team connection %d" msgstr "Командне з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d" #: ../clients/tui/nm-editor-utils.c:199 ../clients/tui/nmt-page-vlan.c:62 -#: ../libnm-core/nm-connection.c:2700 ../libnm/nm-device.c:1678 +#: ../libnm-core/nm-connection.c:2702 ../libnm/nm-device.c:1678 msgid "VLAN" msgstr "VLAN" @@ -12003,34 +12055,34 @@ msgstr "невідома назва параметра" msgid "duplicate setting name" msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ параметра" -#: ../libnm-core/nm-connection.c:1421 +#: ../libnm-core/nm-connection.c:1422 msgid "setting not found" msgstr "параметра не знайдено" -#: ../libnm-core/nm-connection.c:1474 ../libnm-core/nm-connection.c:1499 -#: ../libnm-core/nm-connection.c:1524 +#: ../libnm-core/nm-connection.c:1475 ../libnm-core/nm-connection.c:1500 +#: ../libnm-core/nm-connection.c:1525 msgid "setting is required for non-slave connections" msgstr "Ð´Ð»Ñ Ð½ÐµÐ¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… з'єднань потрібен параметр" -#: ../libnm-core/nm-connection.c:1487 ../libnm-core/nm-connection.c:1512 -#: ../libnm-core/nm-connection.c:1537 +#: ../libnm-core/nm-connection.c:1488 ../libnm-core/nm-connection.c:1513 +#: ../libnm-core/nm-connection.c:1538 msgid "setting not allowed in slave connection" msgstr "параметр не можна викориÑтовувати у підлеглому з'єднанні" -#: ../libnm-core/nm-connection.c:1642 +#: ../libnm-core/nm-connection.c:1643 msgid "Unexpected failure to normalize the connection" msgstr "Ðеочікувана помилка під Ñ‡Ð°Ñ Ñпроби нормалізувати з'єднаннÑ" -#: ../libnm-core/nm-connection.c:1703 +#: ../libnm-core/nm-connection.c:1704 msgid "Unexpected failure to verify the connection" msgstr "Ðеочікувана помилка під Ñ‡Ð°Ñ Ñпроби перевірити з'єднаннÑ" -#: ../libnm-core/nm-connection.c:1740 +#: ../libnm-core/nm-connection.c:1741 #, c-format msgid "unexpected uuid %s instead of %s" msgstr "неочікуваний UUID %s заміÑÑ‚ÑŒ %s" -#: ../libnm-core/nm-connection.c:2554 ../libnm-core/nm-setting-8021x.c:2618 +#: ../libnm-core/nm-connection.c:2555 ../libnm-core/nm-setting-8021x.c:2618 #: ../libnm-core/nm-setting-8021x.c:2641 ../libnm-core/nm-setting-8021x.c:2681 #: ../libnm-core/nm-setting-8021x.c:2704 ../libnm-core/nm-setting-8021x.c:2755 #: ../libnm-core/nm-setting-8021x.c:2773 ../libnm-core/nm-setting-8021x.c:2797 @@ -12046,14 +12098,14 @@ msgstr "неочікуваний UUID %s заміÑÑ‚ÑŒ %s" #: ../libnm-core/nm-setting-ip-tunnel.c:371 #: ../libnm-core/nm-setting-olpc-mesh.c:81 #: ../libnm-core/nm-setting-ovs-patch.c:75 ../libnm-core/nm-setting-pppoe.c:129 -#: ../libnm-core/nm-setting-vpn.c:532 ../libnm-core/nm-setting-vxlan.c:322 -#: ../libnm-core/nm-setting-wifi-p2p.c:120 ../libnm-core/nm-setting-wimax.c:92 +#: ../libnm-core/nm-setting-vpn.c:532 ../libnm-core/nm-setting-wifi-p2p.c:120 +#: ../libnm-core/nm-setting-wimax.c:92 #: ../libnm-core/nm-setting-wireless-security.c:899 #: ../libnm-core/nm-setting-wireless.c:788 msgid "property is missing" msgstr "не вказано влаÑтивоÑÑ‚Ñ–" -#: ../libnm-core/nm-connection.c:2706 +#: ../libnm-core/nm-connection.c:2708 msgid "IP Tunnel" msgstr "IP-тунель" @@ -12062,235 +12114,247 @@ msgstr "IP-тунель" msgid "Method returned type '%s', but expected '%s'" msgstr "Методом повернуто тип «%s», хоча мав бути «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:172 +#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:174 #, c-format msgid "Value cannot be interpreted as a list of numbers." msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ може бути оброблено Ñк ÑпиÑок чиÑел." -#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:301 +#: ../libnm-core/nm-keyfile/nm-keyfile-utils.c:303 #, c-format msgid "value is not an integer in range [%lld, %lld]" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” цілим чиÑлом у діапазоні [%lld, %lld]" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:260 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:267 msgid "ignoring missing number" msgstr "ігноруємо пропущене чиÑло" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:272 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:279 #, c-format msgid "ignoring invalid number '%s'" msgstr "ігноруємо некоректне чиÑло «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:301 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:308 #, c-format msgid "ignoring invalid %s address: %s" msgstr "ігноруємо некоректну адреÑу %s: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:347 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:354 #, c-format msgid "ignoring invalid gateway '%s' for %s route" msgstr "ігноруємо некоректний шлюз «%s» Ð´Ð»Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ñƒ %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:369 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:376 #, c-format msgid "ignoring invalid %s route: %s" msgstr "ігноруємо некоректний маршрут %s: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:547 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:554 #, c-format msgid "unexpected character '%c' for address %s: '%s' (position %td)" msgstr "неочікуваний Ñимвол «%c» Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑи %s: «%s» (Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:563 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:570 #, c-format msgid "unexpected character '%c' for %s: '%s' (position %td)" msgstr "неочікуваний Ñимвол «%c» Ð´Ð»Ñ %s: «%s» (Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:578 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:585 #, c-format msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)" msgstr "неочікуваний Ñимвол «%c» у префікÑÑ– довжини Ð´Ð»Ñ %s: «%s» (Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %td)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:595 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:602 #, c-format msgid "garbage at the end of value %s: '%s'" msgstr "зайві дані наприкінці Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s: «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:605 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:612 #, c-format msgid "deprecated semicolon at the end of value %s: '%s'" msgstr "заÑтаріла крапка з комою наприкінці Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s: «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:624 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:631 #, c-format msgid "invalid prefix length for %s '%s', defaulting to %d" msgstr "некоректний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð´Ð»Ñ %s «%s», повертаємоÑÑ Ð´Ð¾ типового, %d" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:636 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:643 #, c-format msgid "missing prefix length for %s '%s', defaulting to %d" msgstr "пропущено Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ Ð´Ð»Ñ %s «%s», повертаємоÑÑ Ð´Ð¾ типового, %d" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:979 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:986 +#: ../libnm-core/nm-setting-ovs-external-ids.c:320 #: ../libnm-core/nm-setting-user.c:372 #, c-format msgid "invalid value for \"%s\": %s" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Â«%s»: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1019 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1064 #, c-format msgid "ignoring invalid DNS server IPv%c address '%s'" msgstr "ігноруємо некоректну адреÑу IPv%c Ñервера DNS «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1114 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1159 msgid "ignoring invalid MAC address" msgstr "ігноруємо некоректну MAC-адреÑу" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1362 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1235 +#, c-format +msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s" +msgstr "ігноруємо некоректний параметр bond %s%s%s = %s%s%s: %s" + +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1425 msgid "ignoring invalid SSID" msgstr "ігноруємо некоректний SSID" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1380 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1443 msgid "ignoring invalid raw password" msgstr "ігноруємо некоректний необроблений пароль" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1521 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1584 msgid "invalid key/cert value" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°/Ñертифіката" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1536 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1599 #, c-format msgid "invalid key/cert value path \"%s\"" msgstr "некоректний шлÑÑ… до ключа/Ñертифіката, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1561 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1658 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1624 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1721 #, c-format msgid "certificate or key file '%s' does not exist" msgstr "файла Ñертифіката або ключа «%s» не Ñ–Ñнує" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1574 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1637 #, c-format msgid "invalid PKCS#11 URI \"%s\"" msgstr "некоректна адреÑа PKCS#11 «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1620 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1683 msgid "invalid key/cert value data:;base64, is not base64" msgstr "некоректні дані Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°/Ñертифіката data:;base64, не Ñ” base64" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1633 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1696 msgid "invalid key/cert value data:;base64,file://" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°/Ñертифіката data:;base64,file://" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1674 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1737 msgid "invalid key/cert value is not a valid blob" msgstr "" "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°/Ñертифіката, не Ñ” коректним Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не Ñ” " "коректним великим бінарним об'єктом" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1776 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1839 #, c-format msgid "invalid parity value '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð½Ð¾ÑÑ‚Ñ–, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1798 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3211 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1861 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3334 #, c-format msgid "invalid setting: %s" msgstr "некоректний параметр: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1818 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1881 #, c-format msgid "ignoring invalid team configuration: %s" msgstr "ігноруємо некоректне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1901 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:1964 #, c-format msgid "invalid qdisc: %s" msgstr "некоректний qdisc: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:1951 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:2014 #, c-format msgid "invalid tfilter: %s" msgstr "некоректний tfilter: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3036 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3159 #, c-format msgid "error loading setting value: %s" msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°: %s" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3067 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3079 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3098 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3110 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3122 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3184 -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3196 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3190 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3202 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3221 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3233 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3245 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3307 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3319 msgid "value cannot be interpreted as integer" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ може бути оброблено Ñк ціле чиÑло" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3152 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3275 #, c-format msgid "ignoring invalid byte element '%u' (not between 0 and 255 inclusive)" msgstr "" "ігноруємо некоректний байтовий елемент «%u» (не у діапазоні від 0 до 255, " "включно)" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3236 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3359 #, c-format msgid "invalid setting name '%s'" msgstr "некоректна назва параметра, «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3283 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3406 #, c-format msgid "invalid key '%s.%s'" msgstr "некоректний ключ «%s.%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3299 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3422 #, c-format msgid "key '%s.%s' is not boolean" msgstr "ключ «%s.%s» не Ñ” булевим значеннÑм" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3316 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3439 #, c-format msgid "key '%s.%s' is not a uint32" msgstr "ключ «%s.%s» не Ñ” значеннÑм uint32" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3373 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3496 #, c-format msgid "invalid peer public key in section '%s'" msgstr "некоректний відкритий ключ вузла у розділі «%s»" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3388 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3511 #, c-format msgid "key '%s.%s' is not a valid 256 bit key in base64 encoding" msgstr "ключ «%s.%s» не Ñ” коректним 256-бітовим ключем у кодуванні base64" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3411 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3534 #, c-format msgid "key '%s.%s' is not a valid secret flag" msgstr "ключ «%s.%s» не Ñ” коректним прапорцем реєÑтраційних даних" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3434 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3557 #, c-format msgid "key '%s.%s' is not a integer in range 0 to 2^32" msgstr "ключ «%s.%s» не Ñ” цілими чиÑлом у діапазоні від 0 до 2^32" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3450 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3573 #, c-format msgid "key '%s.%s' is not a valid endpoint" msgstr "ключ «%s.%s» не Ñ” коректною кінцевою точкою" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3476 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3599 #, c-format msgid "key '%s.%s' has invalid allowed-ips" msgstr "Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° «%s.%s» вказано некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ allowed-ips" -#: ../libnm-core/nm-keyfile/nm-keyfile.c:3491 +#: ../libnm-core/nm-keyfile/nm-keyfile.c:3614 #, c-format msgid "peer '%s' is invalid: %s" msgstr "вузол «%s» Ñ” некоректним: %s" +#: ../libnm-core/nm-keyfile/nm-keyfile.c:4105 +#, c-format +#| msgid "rule is invalid: %s" +msgid "the profile is not valid: %s" +msgstr "профіль Ñ” некоректним: %s" + #: ../libnm-core/nm-libnm-core-aux/nm-libnm-core-aux.c:286 #, c-format msgid "'%s' is not valid: properties should be specified as 'key=value'" @@ -12336,19 +12400,19 @@ msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«name» — «%s»" msgid "attribute '%s' is invalid for \"%s\"" msgstr "атрибут «%s» Ñ” некоректним Ð´Ð»Ñ Â«%s»" -#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:279 +#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:321 msgid "property cannot be an empty string" msgstr "влаÑтивіÑÑ‚ÑŒ не може бути порожнім Ñ€Ñдком" -#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:296 +#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:338 msgid "property cannot be longer than 255 bytes" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– не може бути довшим за 255 байтів" -#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:307 +#: ../libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c:349 msgid "property cannot contain any nul bytes" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– не може міÑтити нульових байтів" -#: ../libnm-core/nm-setting-6lowpan.c:78 +#: ../libnm-core/nm-setting-6lowpan.c:78 ../libnm-core/nm-setting-veth.c:80 #, c-format msgid "property is not specified" msgstr "влаÑтивіÑÑ‚ÑŒ не вказано" @@ -12362,7 +12426,7 @@ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не відповідає «%s=%s»" #: ../libnm-core/nm-setting-6lowpan.c:117 #: ../libnm-core/nm-setting-ip-tunnel.c:344 #: ../libnm-core/nm-setting-macsec.c:301 ../libnm-core/nm-setting-macvlan.c:122 -#: ../libnm-core/nm-setting-vlan.c:608 ../libnm-core/nm-setting-vxlan.c:359 +#: ../libnm-core/nm-setting-vlan.c:608 ../libnm-core/nm-setting-vxlan.c:352 #, c-format msgid "'%s' is neither an UUID nor an interface name" msgstr "«%s» не Ñ” ні UUID, ні назвою інтерфейÑу" @@ -12431,7 +12495,7 @@ msgstr "" #: ../libnm-core/nm-setting-wimax.c:104 #: ../libnm-core/nm-setting-wireless-security.c:956 #: ../libnm-core/nm-setting-wireless-security.c:984 -#: ../libnm-core/nm-setting.c:1266 +#: ../libnm-core/nm-setting.c:1240 msgid "property is empty" msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” порожньою" @@ -12465,7 +12529,7 @@ msgstr "можна вмикати лише Ð´Ð»Ñ Ð·'єднань Ethernet" #: ../libnm-core/nm-setting-wireless.c:884 #: ../libnm-core/nm-setting-wireless.c:896 #: ../libnm-core/nm-setting-wireless.c:909 ../libnm-core/nm-setting-wpan.c:161 -#: ../libnm-core/nm-utils.c:4517 +#: ../libnm-core/nm-utils.c:4528 msgid "property is invalid" msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” некоректною" @@ -12517,62 +12581,62 @@ msgstr "некоректний параметр «%s»" msgid "invalid value '%s' for option '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»" -#: ../libnm-core/nm-setting-bond.c:817 +#: ../libnm-core/nm-setting-bond.c:813 #, c-format msgid "mandatory option '%s' is missing" msgstr "пропущено обов'Ñзковий параметр «%s»" -#: ../libnm-core/nm-setting-bond.c:827 +#: ../libnm-core/nm-setting-bond.c:823 #, c-format msgid "'%s' is not a valid value for '%s'" msgstr "«%s» не Ñ” коректним значеннÑм «%s»" -#: ../libnm-core/nm-setting-bond.c:840 +#: ../libnm-core/nm-setting-bond.c:836 #, c-format msgid "'%s=%s' is incompatible with '%s > 0'" msgstr "«%s=%s» Ñ” неÑуміÑним з «%s > 0»" -#: ../libnm-core/nm-setting-bond.c:857 +#: ../libnm-core/nm-setting-bond.c:853 #, c-format msgid "'%s' is not valid for the '%s' option: %s" msgstr "«%s» Ñ” некоректним Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»: %s" -#: ../libnm-core/nm-setting-bond.c:869 +#: ../libnm-core/nm-setting-bond.c:865 #, c-format msgid "'%s' option is only valid for '%s=%s'" msgstr "параметр «%s» можна викориÑтовувати, лише Ñкщо «%s=%s»" -#: ../libnm-core/nm-setting-bond.c:882 +#: ../libnm-core/nm-setting-bond.c:878 #, c-format msgid "'%s=%s' is not a valid configuration for '%s'" msgstr "«%s=%s» не Ñ” коректним налаштуваннÑм Ð´Ð»Ñ Â«%s»" -#: ../libnm-core/nm-setting-bond.c:897 ../libnm-core/nm-setting-bond.c:908 +#: ../libnm-core/nm-setting-bond.c:893 ../libnm-core/nm-setting-bond.c:904 #, c-format msgid "'%s' option requires '%s' option to be enabled" msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s» вимагає Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»" -#: ../libnm-core/nm-setting-bond.c:925 ../libnm-core/nm-setting-bond.c:936 +#: ../libnm-core/nm-setting-bond.c:921 ../libnm-core/nm-setting-bond.c:932 #, c-format msgid "'%s' option requires '%s' option to be set" msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s» вимагає вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»" -#: ../libnm-core/nm-setting-bond.c:949 +#: ../libnm-core/nm-setting-bond.c:945 #, c-format msgid "'%s' option is only valid with mode '%s'" msgstr "параметр «%s» Ñ” коректним лише у режимі «%s»" -#: ../libnm-core/nm-setting-bond.c:962 +#: ../libnm-core/nm-setting-bond.c:958 #, c-format msgid "'%s' and '%s' cannot have different values" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» Ñ– «%s» не можуть бути різними" -#: ../libnm-core/nm-setting-bond.c:985 +#: ../libnm-core/nm-setting-bond.c:981 #, c-format msgid "'%s' option should be string" msgstr "параметр «%s» має бути Ñ€Ñдком" -#: ../libnm-core/nm-setting-bond.c:998 +#: ../libnm-core/nm-setting-bond.c:994 #, c-format msgid "'%s' option is not valid with mode '%s'" msgstr "параметр «%s» Ñ” коректним з режимом «%s»" @@ -12684,7 +12748,6 @@ msgid "MUD URL is not a valid URL" msgstr "ÐдреÑа MUD не Ñ” коректною адреÑою" #: ../libnm-core/nm-setting-connection.c:1334 -#| msgid "invalid permission \"%s\"" msgid "invalid permissions not in format \"user:$UNAME[:]\"" msgstr "некоректний Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€Ð°Ð² доÑтупу, не у форматі «кориÑтувач:$UNAME[:]»" @@ -13290,6 +13353,66 @@ msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· параметром «%s» не повинне мРmsgid "'%s' is not allowed in fail_mode" msgstr "«%s» не можна викориÑтовувати у режимі fail_mode" +#: ../libnm-core/nm-setting-ovs-external-ids.c:90 +#: ../libnm-core/nm-setting-user.c:91 +msgid "missing key" +msgstr "не вказано ключ" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:98 +#: ../libnm-core/nm-setting-user.c:99 +msgid "key is too long" +msgstr "ключ Ñ” надто довгим" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:105 +#: ../libnm-core/nm-setting-user.c:106 +msgid "key must be UTF8" +msgstr "ключ має зберігатиÑÑ Ñƒ кодуванні UTF8" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:114 +#: ../libnm-core/nm-setting-user.c:153 +msgid "key contains invalid characters" +msgstr "ключ міÑтить некоректний Ñимвол" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:123 +msgid "key cannot start with \"NM.\"" +msgstr "Ð·Ð°Ð¿Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° не починаєтьÑÑ Ð· «NM.»" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:153 +#: ../libnm-core/nm-setting-user.c:180 +msgid "value is missing" +msgstr "не вказано значеннÑ" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:162 +#: ../libnm-core/nm-setting-user.c:189 +msgid "value is too large" +msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ” надто великим" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:170 +#: ../libnm-core/nm-setting-user.c:197 +msgid "value is not valid UTF8" +msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ запиÑано у коректному кодуванні UTF8" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:313 +#: ../libnm-core/nm-setting-user.c:365 +#, c-format +msgid "invalid key \"%s\": %s" +msgstr "некоректний ключ «%s»: %s" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:337 +#: ../libnm-core/nm-setting-user.c:389 +#, c-format +msgid "maximum number of user data entries reached (%u instead of %u)" +msgstr "" +"доÑÑгнуто макÑимальної кількоÑÑ‚Ñ– запиÑів даних кориÑтувача (%u заміÑÑ‚ÑŒ %u)" + +#: ../libnm-core/nm-setting-ovs-external-ids.c:365 +msgid "" +"OVS external IDs can only be added to a profile of type OVS bridge/port/" +"interface" +msgstr "" +"Зовнішні ідентифікатори OVS можна додавати лише до профілів типу міÑток, " +"порт або Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ OVS" + #: ../libnm-core/nm-setting-ovs-interface.c:93 #, c-format msgid "'%s' is not a valid interface type" @@ -13509,18 +13632,6 @@ msgstr "«%s»: некоректний ідентифікатор кориÑту msgid "'%s': invalid group ID" msgstr "«%s»: некоректний ідентифікатор групи" -#: ../libnm-core/nm-setting-user.c:91 -msgid "missing key" -msgstr "не вказано ключ" - -#: ../libnm-core/nm-setting-user.c:99 -msgid "key is too long" -msgstr "ключ Ñ” надто довгим" - -#: ../libnm-core/nm-setting-user.c:106 -msgid "key must be UTF8" -msgstr "ключ має зберігатиÑÑ Ñƒ кодуванні UTF8" - #: ../libnm-core/nm-setting-user.c:131 msgid "key requires a '.' for a namespace" msgstr "Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñтору назв у ключі має бути «.»" @@ -13529,36 +13640,15 @@ msgstr "Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñтору назв у ключі ма msgid "key cannot contain \"..\"" msgstr "у запиÑÑ– ключа не може міÑтитиÑÑ Â«..»" -#: ../libnm-core/nm-setting-user.c:153 -msgid "key contains invalid characters" -msgstr "ключ міÑтить некоректний Ñимвол" - -#: ../libnm-core/nm-setting-user.c:180 -msgid "value is missing" -msgstr "не вказано значеннÑ" - -#: ../libnm-core/nm-setting-user.c:189 -msgid "value is too large" -msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ” надто великим" - -#: ../libnm-core/nm-setting-user.c:197 -msgid "value is not valid UTF8" -msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ запиÑано у коректному кодуванні UTF8" - #: ../libnm-core/nm-setting-user.c:322 msgid "maximum number of user data entries reached" msgstr "доÑÑгнуто макÑимальної кількоÑÑ‚Ñ– запиÑів даних кориÑтувача" -#: ../libnm-core/nm-setting-user.c:365 +#: ../libnm-core/nm-setting-veth.c:89 #, c-format -msgid "invalid key \"%s\": %s" -msgstr "некоректний ключ «%s»: %s" - -#: ../libnm-core/nm-setting-user.c:389 -#, c-format -msgid "maximum number of user data entries reached (%u instead of %u)" -msgstr "" -"доÑÑгнуто макÑимальної кількоÑÑ‚Ñ– запиÑів даних кориÑтувача (%u заміÑÑ‚ÑŒ %u)" +#| msgid "'%s' is not a valid interface type" +msgid "'%s' is not a valid interface name" +msgstr "«%s» не Ñ” коректною назвою інтерфейÑу" #: ../libnm-core/nm-setting-vlan.c:633 #, c-format @@ -13586,7 +13676,7 @@ msgstr "не можна вÑтановлювати connection.multi-connect дл msgid "setting contained a secret with an empty name" msgstr "параметри міÑтив пароль з порожньою назвою" -#: ../libnm-core/nm-setting-vpn.c:638 ../libnm-core/nm-setting.c:2152 +#: ../libnm-core/nm-setting-vpn.c:638 ../libnm-core/nm-setting.c:2126 msgid "not a secret property" msgstr "не Ñ” влаÑтивіÑÑ‚ÑŽ паролÑ" @@ -13603,17 +13693,12 @@ msgstr "назва реєÑтраційного запиÑу не може Ð±ÑƒÑ msgid "secret flags property not found" msgstr "влаÑтивіÑÑ‚ÑŒ прапорців паролів не знайдено" -#: ../libnm-core/nm-setting-vxlan.c:335 +#: ../libnm-core/nm-setting-vxlan.c:329 ../libnm-core/nm-setting-vxlan.c:340 #, c-format -msgid "'%s' is not a valid IP address" -msgstr "«%s» Ñ” некоректною IP-адреÑою" +msgid "'%s' is not a valid IP%s address" +msgstr "«%s» Ñ” некоректною IP-адреÑою у форматі IP%s" -#: ../libnm-core/nm-setting-vxlan.c:346 -#, c-format -msgid "'%s' is not a valid IP%c address" -msgstr "«%s» Ñ” некоректною IP-адреÑою у форматі IP%c" - -#: ../libnm-core/nm-setting-vxlan.c:370 +#: ../libnm-core/nm-setting-vxlan.c:363 #, c-format msgid "%d is greater than local port max %d" msgstr "%d перевищує макÑимальний припуÑтимий номер локального порту, %d" @@ -13781,7 +13866,7 @@ msgstr "«%s» потребує вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– msgid "'%s' requires '%s' and '%s' property" msgstr "«%s» потребує «%s» Ñ– влаÑтивоÑÑ‚Ñ– «%s»" -#: ../libnm-core/nm-setting-wireless.c:981 ../libnm-core/nm-team-utils.c:2254 +#: ../libnm-core/nm-setting-wireless.c:981 ../libnm-core/nm-team-utils.c:2253 #, c-format msgid "invalid value" msgstr "некоректне значеннÑ" @@ -13819,335 +13904,335 @@ msgstr "Ñторінку має бути вказано чиÑлом від %d Ð msgid "channel must not be between %d and %d" msgstr "канал має бути вказано чиÑлом від %d до %d" -#: ../libnm-core/nm-setting.c:821 +#: ../libnm-core/nm-setting.c:795 #, c-format msgid "duplicate property" msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–" -#: ../libnm-core/nm-setting.c:841 +#: ../libnm-core/nm-setting.c:815 #, c-format msgid "unknown property" msgstr "невідома влаÑтивіÑÑ‚ÑŒ" -#: ../libnm-core/nm-setting.c:922 ../libnm-core/nm-setting.c:976 +#: ../libnm-core/nm-setting.c:896 ../libnm-core/nm-setting.c:950 #, c-format msgid "can't set property of type '%s' from value of type '%s'" msgstr "не вдалоÑÑ Ð²Ñтановити влаÑтивіÑÑ‚ÑŒ типу «%s» зі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ «%s»" -#: ../libnm-core/nm-setting.c:943 ../libnm-core/nm-setting.c:959 +#: ../libnm-core/nm-setting.c:917 ../libnm-core/nm-setting.c:933 #, c-format msgid "failed to set property: %s" msgstr "не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–: %s" -#: ../libnm-core/nm-setting.c:996 +#: ../libnm-core/nm-setting.c:970 #, c-format msgid "can not set property: %s" msgstr "не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–: %s" -#: ../libnm-core/nm-setting.c:2042 +#: ../libnm-core/nm-setting.c:2016 msgid "secret not found" msgstr "не знайдено ключа" -#: ../libnm-core/nm-team-utils.c:1532 ../libnm-core/nm-team-utils.c:1549 +#: ../libnm-core/nm-team-utils.c:1531 ../libnm-core/nm-team-utils.c:1548 #, c-format msgid "invalid D-Bus property \"%s\"" msgstr "некоректна влаÑтивіÑÑ‚ÑŒ D-Bus «%s»" -#: ../libnm-core/nm-team-utils.c:1561 +#: ../libnm-core/nm-team-utils.c:1560 #, c-format msgid "duplicate D-Bus property \"%s\"" msgstr "Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– D-Bus «%s»" -#: ../libnm-core/nm-team-utils.c:1581 +#: ../libnm-core/nm-team-utils.c:1580 #, c-format msgid "invalid D-Bus property \"%s\" for \"%s\"" msgstr "некоректна влаÑтивіÑÑ‚ÑŒ D-Bus «%s» Ð´Ð»Ñ Â«%s»" -#: ../libnm-core/nm-team-utils.c:1653 +#: ../libnm-core/nm-team-utils.c:1652 #, c-format msgid "unknown link-watcher name \"%s\"" msgstr "некоректна назва заÑобу ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв'Ñзком, «%s»" -#: ../libnm-core/nm-team-utils.c:2240 +#: ../libnm-core/nm-team-utils.c:2239 #, c-format msgid "value out or range" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° припуÑтимим діапазоном" -#: ../libnm-core/nm-team-utils.c:2275 +#: ../libnm-core/nm-team-utils.c:2274 #, c-format msgid "invalid runner-tx-hash" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ runner-tx-hash" -#: ../libnm-core/nm-team-utils.c:2304 +#: ../libnm-core/nm-team-utils.c:2303 #, c-format msgid "%s is only allowed for runner %s" msgstr "%s можна викориÑтовувати лише Ð´Ð»Ñ Ð·Ð°Ñобу запуÑку %s" -#: ../libnm-core/nm-team-utils.c:2314 +#: ../libnm-core/nm-team-utils.c:2313 #, c-format msgid "%s is only allowed for runners %s" msgstr "%s можна викориÑтовувати лише Ð´Ð»Ñ Ð·Ð°Ñобів запуÑку %s" -#: ../libnm-core/nm-team-utils.c:2335 +#: ../libnm-core/nm-team-utils.c:2334 #, c-format msgid "cannot set parameters for lacp and activebackup runners together" msgstr "" "не можна вÑтановлювати параметри Ð´Ð»Ñ Ð·Ð°Ñобів запуÑку lacp Ñ– activebackup " "одночаÑно" -#: ../libnm-core/nm-team-utils.c:2349 +#: ../libnm-core/nm-team-utils.c:2348 #, c-format msgid "missing link watcher" msgstr "не вказано заÑобу ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв'Ñзком" -#: ../libnm-core/nm-team-utils.c:2375 +#: ../libnm-core/nm-team-utils.c:2374 #, c-format msgid "team config exceeds size limit" msgstr "Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ порушують Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ розміру" -#: ../libnm-core/nm-team-utils.c:2386 +#: ../libnm-core/nm-team-utils.c:2385 #, c-format msgid "team config is not valid UTF-8" msgstr "файл налаштувань team не Ñ” коректними даними у кодуванні UTF-8" -#: ../libnm-core/nm-team-utils.c:2397 +#: ../libnm-core/nm-team-utils.c:2396 #: ../src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9909 #, c-format msgid "invalid json" msgstr "некоректний код JSON" -#: ../libnm-core/nm-team-utils.c:2561 +#: ../libnm-core/nm-team-utils.c:2560 #, c-format msgid "invalid D-Bus type \"%s\"" msgstr "некоректний тип D-Bus «%s»" -#: ../libnm-core/nm-team-utils.c:2600 +#: ../libnm-core/nm-team-utils.c:2599 #, c-format msgid "invalid link-watchers: %s" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ link-watchers: %s" -#: ../libnm-core/nm-utils.c:2288 +#: ../libnm-core/nm-utils.c:2299 #, c-format msgid "'%s' is not a valid handle." msgstr "«%s» не Ñ” коректним деÑкриптором." -#: ../libnm-core/nm-utils.c:2436 +#: ../libnm-core/nm-utils.c:2447 #, c-format msgid "'%s' unexpected: parent already specified." msgstr "Ðеочікуване «%s»: батьківÑький Ð·Ð°Ð¿Ð¸Ñ Ð²Ð¶Ðµ вказано." -#: ../libnm-core/nm-utils.c:2454 +#: ../libnm-core/nm-utils.c:2465 #, c-format msgid "invalid handle: '%s'" msgstr "некоректний деÑкриптор: «%s»" -#: ../libnm-core/nm-utils.c:2476 +#: ../libnm-core/nm-utils.c:2487 msgid "parent not specified." msgstr "не вказано батьківÑький запиÑ." -#: ../libnm-core/nm-utils.c:2540 +#: ../libnm-core/nm-utils.c:2551 #, c-format msgid "unsupported qdisc option: '%s'." msgstr "непідтримуваний параметр qdisc: «%s»." -#: ../libnm-core/nm-utils.c:2670 +#: ../libnm-core/nm-utils.c:2681 msgid "action name missing." msgstr "не вказано назви дії." -#: ../libnm-core/nm-utils.c:2696 +#: ../libnm-core/nm-utils.c:2707 #, c-format msgid "unsupported action option: '%s'." msgstr "непідтримуваний параметр дії: «%s»." -#: ../libnm-core/nm-utils.c:2835 +#: ../libnm-core/nm-utils.c:2846 msgid "invalid action: " msgstr "некоректна діÑ: " -#: ../libnm-core/nm-utils.c:2839 +#: ../libnm-core/nm-utils.c:2850 #, c-format msgid "unsupported tfilter option: '%s'." msgstr "непідтримуваний параметр tfilter: «%s»." -#: ../libnm-core/nm-utils.c:3440 +#: ../libnm-core/nm-utils.c:3451 #, c-format msgid "failed stat file %s: %s" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑтатиÑтичні дані щодо файла %s: %s" -#: ../libnm-core/nm-utils.c:3451 +#: ../libnm-core/nm-utils.c:3462 #, c-format msgid "not a file (%s)" msgstr "не Ñ” файлом (%s)" -#: ../libnm-core/nm-utils.c:3462 +#: ../libnm-core/nm-utils.c:3473 #, c-format msgid "invalid file owner %d for %s" msgstr "некоректний влаÑник файла, %d, %s" -#: ../libnm-core/nm-utils.c:3474 +#: ../libnm-core/nm-utils.c:3485 #, c-format msgid "file permissions for %s" msgstr "файлові права доÑтупу до %s" -#: ../libnm-core/nm-utils.c:3484 +#: ../libnm-core/nm-utils.c:3495 #, c-format msgid "reject %s" msgstr "відмовити %s" -#: ../libnm-core/nm-utils.c:3504 +#: ../libnm-core/nm-utils.c:3515 #, c-format msgid "path is not absolute (%s)" msgstr "шлÑÑ… не Ñ” абÑолютним (%s)" -#: ../libnm-core/nm-utils.c:3519 +#: ../libnm-core/nm-utils.c:3530 #, c-format msgid "Plugin file does not exist (%s)" msgstr "Файла додатка не Ñ–Ñнує (%s)" -#: ../libnm-core/nm-utils.c:3528 +#: ../libnm-core/nm-utils.c:3539 #, c-format msgid "Plugin is not a valid file (%s)" msgstr "Додаток не Ñ” коректним файлом (%s)" -#: ../libnm-core/nm-utils.c:3539 +#: ../libnm-core/nm-utils.c:3550 #, c-format msgid "libtool archives are not supported (%s)" msgstr "Підтримки архівів libtool не передбачено (%s)" -#: ../libnm-core/nm-utils.c:3615 +#: ../libnm-core/nm-utils.c:3626 #, c-format msgid "Could not find \"%s\" binary" msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ виконуваний файл «%s»" -#: ../libnm-core/nm-utils.c:4468 +#: ../libnm-core/nm-utils.c:4479 msgid "unknown secret flags" msgstr "невідомі прапорці реєÑтраційних даних" -#: ../libnm-core/nm-utils.c:4478 +#: ../libnm-core/nm-utils.c:4489 msgid "conflicting secret flags" msgstr "конфлікт прапорців реєÑтраційних даних" -#: ../libnm-core/nm-utils.c:4489 +#: ../libnm-core/nm-utils.c:4500 msgid "secret flags must not be \"not-required\"" msgstr "прапорці реєÑтраційних даних не можуть бути «not-required»" -#: ../libnm-core/nm-utils.c:4497 +#: ../libnm-core/nm-utils.c:4508 msgid "unsupported secret flags" msgstr "непідтримувані прапорці реєÑтраційних даних" -#: ../libnm-core/nm-utils.c:4527 +#: ../libnm-core/nm-utils.c:4538 msgid "can't be simultaneously disabled and enabled" msgstr "не може бути одночаÑно вимкнено Ñ– увімкнено" -#: ../libnm-core/nm-utils.c:4535 +#: ../libnm-core/nm-utils.c:4546 msgid "WPS is required" msgstr "Потрібна WPS" -#: ../libnm-core/nm-utils.c:4603 +#: ../libnm-core/nm-utils.c:4614 #, c-format msgid "not a valid ethernet MAC address for mask at position %lld" msgstr "некоректна адреÑа MAC ethernet Ð´Ð»Ñ Ð¼Ð°Ñки у позиції %lld" -#: ../libnm-core/nm-utils.c:4622 +#: ../libnm-core/nm-utils.c:4633 #, c-format msgid "not a valid ethernet MAC address #%u at position %lld" msgstr "некоректна адреÑа MAC ethernet #%u у позиції %lld" -#: ../libnm-core/nm-utils.c:5301 +#: ../libnm-core/nm-utils.c:5288 msgid "not valid utf-8" msgstr "некоректні дані UTF-8" -#: ../libnm-core/nm-utils.c:5322 ../libnm-core/nm-utils.c:5375 +#: ../libnm-core/nm-utils.c:5309 ../libnm-core/nm-utils.c:5362 msgid "is not a JSON object" msgstr "не Ñ” об'єктом JSON" -#: ../libnm-core/nm-utils.c:5351 +#: ../libnm-core/nm-utils.c:5338 msgid "value is NULL" msgstr "значеннÑм Ñ” NULL" -#: ../libnm-core/nm-utils.c:5351 +#: ../libnm-core/nm-utils.c:5338 msgid "value is empty" msgstr "порожнє значеннÑ" -#: ../libnm-core/nm-utils.c:5363 +#: ../libnm-core/nm-utils.c:5350 #, c-format msgid "invalid JSON at position %d (%s)" msgstr "некоректний код JSON на позиції %d (%s)" -#: ../libnm-core/nm-utils.c:5493 ../libnm-core/nm-utils.c:5513 +#: ../libnm-core/nm-utils.c:5480 ../libnm-core/nm-utils.c:5500 msgid "unterminated escape sequence" msgstr "незавершена екранована поÑлідовніÑÑ‚ÑŒ" -#: ../libnm-core/nm-utils.c:5539 +#: ../libnm-core/nm-utils.c:5526 #, c-format msgid "unknown attribute '%s'" msgstr "невідомий атрибут «%s»" -#: ../libnm-core/nm-utils.c:5557 +#: ../libnm-core/nm-utils.c:5544 #, c-format msgid "missing key-value separator '%c' after '%s'" msgstr "пропущено роздільник пар ключ-Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%c» піÑÐ»Ñ Â«%s»" -#: ../libnm-core/nm-utils.c:5577 +#: ../libnm-core/nm-utils.c:5564 #, c-format msgid "invalid uint32 value '%s' for attribute '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ uint32 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5591 +#: ../libnm-core/nm-utils.c:5578 #, c-format msgid "invalid int32 value '%s' for attribute '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ int32 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5604 +#: ../libnm-core/nm-utils.c:5591 #, c-format msgid "invalid uint64 value '%s' for attribute '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ uint64 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5617 +#: ../libnm-core/nm-utils.c:5604 #, c-format msgid "invalid uint8 value '%s' for attribute '%s'" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ uint8 «%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5631 +#: ../libnm-core/nm-utils.c:5618 #, c-format msgid "invalid boolean value '%s' for attribute '%s'" msgstr "некоректне булеве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» атрибута «%s»" -#: ../libnm-core/nm-utils.c:5645 +#: ../libnm-core/nm-utils.c:5632 #, c-format msgid "unsupported attribute '%s' of type '%s'" msgstr "непідтримуваний атрибут «%s» типу «%s»" -#: ../libnm-core/nm-utils.c:5947 +#: ../libnm-core/nm-utils.c:5934 #, c-format msgid "Bridge VLANs %d and %d are not sorted by ascending vid" msgstr "VLAN міÑтка %d Ñ– %d не упорÑдковано за зроÑтаннÑм vid" -#: ../libnm-core/nm-utils.c:5971 +#: ../libnm-core/nm-utils.c:5958 #, c-format msgid "duplicate bridge VLAN vid %u" msgstr "дублікат міÑтка vid VLAN %u" -#: ../libnm-core/nm-utils.c:5983 +#: ../libnm-core/nm-utils.c:5970 msgid "only one VLAN can be the PVID" msgstr "лише одна з VLAN може бути PVID" -#: ../libnm-core/nm-utils.c:6028 +#: ../libnm-core/nm-utils.c:6015 #, c-format msgid "unknown flags 0x%x" msgstr "невідомі прапорці 0x%x" -#: ../libnm-core/nm-utils.c:6040 +#: ../libnm-core/nm-utils.c:6027 msgid "" "'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" msgstr "" "не можна одночаÑно вÑтановлювати прапорці «fqdn-no-update» Ñ– «fqdn-serv-" "update»" -#: ../libnm-core/nm-utils.c:6051 +#: ../libnm-core/nm-utils.c:6038 msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" msgstr "прапорець «fqdn-clear-flags» Ñ” неÑуміÑним із іншими прапорцÑми FQDN" -#: ../libnm-core/nm-utils.c:6059 +#: ../libnm-core/nm-utils.c:6046 msgid "DHCPv6 does not support the E (encoded) FQDN flag" msgstr "у DHCPv6 не передбачено підтримки Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ E (закодовано) FQDN" @@ -14290,29 +14375,29 @@ msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” фіктивним з'єднаннÑм." msgid "The connection did not specify an interface name." msgstr "У запиÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ вказано назви інтерфейÑу." -#: ../libnm/nm-device-ethernet.c:190 +#: ../libnm/nm-device-ethernet.c:187 msgid "The connection was not an Ethernet or PPPoE connection." msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з'єднаннÑм Ethernet або PPPoE." -#: ../libnm/nm-device-ethernet.c:207 +#: ../libnm/nm-device-ethernet.c:204 msgid "The connection and device differ in S390 subchannels." msgstr "У підканалах S390 виÑвлено відмінніÑÑ‚ÑŒ з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– приÑтрою." -#: ../libnm/nm-device-ethernet.c:224 +#: ../libnm/nm-device-ethernet.c:221 #, c-format msgid "Invalid device MAC address %s." msgstr "Ðекоректна MAC-адреÑа приÑтрою, %s." -#: ../libnm/nm-device-ethernet.c:232 +#: ../libnm/nm-device-ethernet.c:229 msgid "The MACs of the device and the connection do not match." msgstr "ÐдреÑи MAC приÑтрою Ñ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ." -#: ../libnm/nm-device-ethernet.c:244 +#: ../libnm/nm-device-ethernet.c:241 #, c-format msgid "Invalid MAC in the blacklist: %s." msgstr "Ðекоректний Ð·Ð°Ð¿Ð¸Ñ MAC у «чорному» ÑпиÑку: %s." -#: ../libnm/nm-device-ethernet.c:253 +#: ../libnm/nm-device-ethernet.c:250 #, c-format msgid "Device MAC (%s) is blacklisted by the connection." msgstr "MAC приÑтрою (%s) додано до «чорного» ÑпиÑку з'єднаннÑ." @@ -14718,36 +14803,36 @@ msgstr "" "Правила ÑиÑтеми заборонÑÑŽÑ‚ÑŒ Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ придатноÑÑ‚Ñ– до " "з'єднаннÑ" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2314 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2335 #, c-format msgid "object class '%s' has no property named '%s'" msgstr "у клаÑÑ– об'єктів «%s» немає влаÑтивоÑÑ‚Ñ– із назвою «%s»" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2323 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2344 #, c-format msgid "property '%s' of object class '%s' is not writable" msgstr "влаÑтивіÑÑ‚ÑŒ «%s» клаÑу об'єктів «%s» Ñ” непридатною до запиÑу" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2332 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2353 #, c-format msgid "" "construct property \"%s\" for object '%s' can't be set after construction" msgstr "" "влаÑтивіÑÑ‚ÑŒ construct «%s» об'єкта «%s» не можна вÑтановлювати піÑÐ»Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2343 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2364 #, c-format msgid "'%s::%s' is not a valid property name; '%s' is not a GObject subtype" msgstr "«%s::%s» не Ñ” коректною назвою влаÑтивоÑÑ‚Ñ–; «%s» не Ñ” підтипом GObject" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2356 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2377 #, c-format msgid "unable to set property '%s' of type '%s' from value of type '%s'" msgstr "" "не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s» типу «%s» на оÑнові Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "типу «%s»" -#: ../shared/nm-glib-aux/nm-shared-utils.c:2368 +#: ../shared/nm-glib-aux/nm-shared-utils.c:2389 #, c-format msgid "" "value \"%s\" of type '%s' is invalid or out of range for property '%s' of " @@ -14756,48 +14841,48 @@ msgstr "" "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» типу «%s» Ñ” некоректним Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s» типу «%s» або не " "належить до припуÑтимого діапазону значень" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5104 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5137 msgid "interface name is missing" msgstr "пропущено назву інтерфейÑу" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5112 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5145 msgid "interface name is too short" msgstr "назва інтерфейÑу Ñ” надто короткою" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5120 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5153 msgid "interface name is reserved" msgstr "таку назву інтерфейÑу зарезервовано" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5133 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5166 msgid "interface name contains an invalid character" msgstr "назва інтерфейÑу міÑтить некоректний Ñимвол" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5141 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5174 msgid "interface name is longer than 15 characters" msgstr "назва інтерфейÑу Ñ” довшою за 15 Ñимволів" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5166 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5199 #, c-format msgid "'%%' is not allowed in interface names" msgstr "«%%» не можна викориÑтовувати у назвах інтерфейÑів" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5178 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5211 #, c-format msgid "'%s' is not allowed as interface name" msgstr "«%s» не можна викориÑтовувати Ñк назву інтерфейÑу" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5200 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5233 msgid "" "interface name must be alphanumerical with no forward or backward slashes" msgstr "" "назва інтерфейÑу має ÑкладатиÑÑ Ð· літер Ñ– цифр без початкового Ñ– " "завершального Ñимволів похилої риÑки" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5217 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5250 msgid "interface name must not be empty" msgstr "назва інтерфейÑу не може бути порожньою" -#: ../shared/nm-glib-aux/nm-shared-utils.c:5225 +#: ../shared/nm-glib-aux/nm-shared-utils.c:5258 msgid "interface name must be UTF-8 encoded" msgstr "назва інтерфейÑу має бути набором Ñимволів у кодуванні UTF-8" @@ -14948,12 +15033,12 @@ msgid "DUN connection must include a GSM or CDMA setting" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DUN має включати параметр GSM або CDMA" #: ../src/devices/bluetooth/nm-device-bt.c:359 -#: ../src/devices/wwan/nm-modem-broadband.c:818 +#: ../src/devices/wwan/nm-modem-broadband.c:821 msgid "GSM connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ GSM" #: ../src/devices/bluetooth/nm-device-bt.c:361 -#: ../src/devices/wwan/nm-modem-broadband.c:843 +#: ../src/devices/wwan/nm-modem-broadband.c:846 msgid "CDMA connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ CDMA" @@ -14981,11 +15066,11 @@ msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка" msgid "Dummy connection" msgstr "Фіктивне з'єднаннÑ" -#: ../src/devices/nm-device-ethernet.c:1608 +#: ../src/devices/nm-device-ethernet.c:1620 msgid "PPPoE connection" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PPPoE" -#: ../src/devices/nm-device-ethernet.c:1608 +#: ../src/devices/nm-device-ethernet.c:1620 msgid "Wired connection" msgstr "Дротове з'єднаннÑ" diff --git a/shared/c-rbtree/AUTHORS b/shared/c-rbtree/AUTHORS index b59660c5ee..ed4e72e915 100644 --- a/shared/c-rbtree/AUTHORS +++ b/shared/c-rbtree/AUTHORS @@ -34,4 +34,6 @@ COPYRIGHT: (ordered alphabetically) AUTHORS: (ordered alphabetically) David Rheinsberg <david.rheinsberg@gmail.com> + Kay Sievers <kay@vrfy.org> + Thomas Haller <thaller@redhat.com> Tom Gundersen <teg@jklm.no> diff --git a/shared/nm-glib-aux/nm-c-list.h b/shared/nm-glib-aux/nm-c-list.h index e19774dd91..173861c63c 100644 --- a/shared/nm-glib-aux/nm-c-list.h +++ b/shared/nm-glib-aux/nm-c-list.h @@ -17,11 +17,6 @@ _what &&c_list_contains(list, &_what->member); \ }) -/* iterate over the list backwards. */ -#define nm_c_list_for_each_entry_prev(_iter, _list, _m) \ - for (_iter = c_list_entry((_list)->prev, __typeof__(*_iter), _m); &(_iter)->_m != (_list); \ - _iter = c_list_entry((_iter)->_m.prev, __typeof__(*_iter), _m)) - /*****************************************************************************/ typedef struct { diff --git a/shared/nm-glib-aux/nm-glib.h b/shared/nm-glib-aux/nm-glib.h index 9794e1fbce..00d9261df7 100644 --- a/shared/nm-glib-aux/nm-glib.h +++ b/shared/nm-glib-aux/nm-glib.h @@ -683,7 +683,7 @@ g_hash_table_steal_extended(GHashTable * hash_table, gpointer *_stolen_value = (stolen_value); \ \ /* we cannot allow NULL arguments, because then we would leak the values in - * the compat implementation. */ \ + * the compat implementation. */ \ g_assert(_stolen_key); \ g_assert(_stolen_value); \ \ diff --git a/shared/nm-glib-aux/nm-hash-utils.h b/shared/nm-glib-aux/nm-hash-utils.h index 1cfdcaf6e9..6028bb3d74 100644 --- a/shared/nm-glib-aux/nm-hash-utils.h +++ b/shared/nm-glib-aux/nm-hash-utils.h @@ -416,6 +416,14 @@ nm_hash_obfuscate_ptr(guint static_seed, gconstpointer val) * values in a global context. */ #define NM_HASH_OBFUSCATE_PTR(ptr) (nm_hash_obfuscate_ptr(1678382159u, ptr)) +#define NM_HASH_OBFUSCATE_PTR_STR(ptr, buf) \ + ({ \ + gconstpointer _ptr = (ptr); \ + \ + _ptr ? nm_sprintf_buf(buf, "[" NM_HASH_OBFUSCATE_PTR_FMT "]", NM_HASH_OBFUSCATE_PTR(_ptr)) \ + : "(null)"; \ + }) + static inline const char * nm_hash_obfuscated_ptr_str(gconstpointer ptr, char buf[static 17]) { diff --git a/shared/nm-glib-aux/nm-logging-fwd.h b/shared/nm-glib-aux/nm-logging-fwd.h index ee75b71325..2f550e5f9f 100644 --- a/shared/nm-glib-aux/nm-logging-fwd.h +++ b/shared/nm-glib-aux/nm-logging-fwd.h @@ -57,15 +57,11 @@ typedef enum { /*< skip >*/ /* aliases: */ LOGD_DHCP = LOGD_DHCP4 | LOGD_DHCP6, LOGD_IP = LOGD_IP4 | LOGD_IP6, -} NMLogDomain; -static inline NMLogDomain -LOGD_DHCP_from_addr_family(int addr_family) -{ - nm_assert_addr_family(addr_family); +#define LOGD_DHCPX(is_ipv4) ((is_ipv4) ? LOGD_DHCP4 : LOGD_DHCP6) +#define LOGD_IPX(is_ipv4) ((is_ipv4) ? LOGD_IP4 : LOGD_IP6) - return addr_family == AF_INET6 ? LOGD_DHCP6 : LOGD_DHCP4; -} +} NMLogDomain; /* Log levels */ typedef enum { /*< skip >*/ diff --git a/shared/nm-glib-aux/nm-macros-internal.h b/shared/nm-glib-aux/nm-macros-internal.h index d495dd8eb5..f7e7a97cae 100644 --- a/shared/nm-glib-aux/nm-macros-internal.h +++ b/shared/nm-glib-aux/nm-macros-internal.h @@ -656,11 +656,11 @@ NM_G_ERROR_MSG(GError *error) #if _NM_CC_SUPPORT_GENERIC /* returns @value, if the type of @value matches @type. - * This requires support for C11 _Generic(). If no support is - * present, this returns @value directly. - * - * It's useful to check the let the compiler ensure that @value is - * of a certain type. */ + * This requires support for C11 _Generic(). If no support is + * present, this returns @value directly. + * + * It's useful to check the let the compiler ensure that @value is + * of a certain type. */ #define _NM_ENSURE_TYPE(type, value) (_Generic((value), type : (value))) #define _NM_ENSURE_TYPE_CONST(type, value) \ (_Generic((value), const type \ @@ -770,7 +770,7 @@ NM_G_ERROR_MSG(GError *error) { \ return NM_CACHED_QUARK(string); \ } \ - struct _dummy_struct_for_trailing_semicolon + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON /*****************************************************************************/ diff --git a/shared/nm-glib-aux/nm-shared-utils.c b/shared/nm-glib-aux/nm-shared-utils.c index 7f766871f6..991ab6571f 100644 --- a/shared/nm-glib-aux/nm-shared-utils.c +++ b/shared/nm-glib-aux/nm-shared-utils.c @@ -19,6 +19,9 @@ #include "nm-errno.h" #include "nm-str-buf.h" +G_STATIC_ASSERT(sizeof(NMEtherAddr) == 6); +G_STATIC_ASSERT(_nm_alignof(NMEtherAddr) == 1); + G_STATIC_ASSERT(sizeof(NMUtilsNamedEntry) == sizeof(const char *)); G_STATIC_ASSERT(G_STRUCT_OFFSET(NMUtilsNamedValue, value_ptr) == sizeof(const char *)); @@ -434,6 +437,24 @@ nm_g_variant_singleton_u_0(void) /*****************************************************************************/ +GHashTable * +nm_utils_strdict_clone(GHashTable *src) +{ + GHashTable * dst; + GHashTableIter iter; + const char * key; + const char * val; + + if (!src) + return NULL; + + dst = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, g_free); + g_hash_table_iter_init(&iter, src); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) + g_hash_table_insert(dst, g_strdup(key), g_strdup(val)); + return dst; +} + /* Convert a hash table with "char *" keys and values to an "a{ss}" GVariant. * The keys will be sorted asciibetically. * Returns a floating reference. @@ -3066,6 +3087,18 @@ nm_utils_fd_read_loop_exact(int fd, void *buf, size_t nbytes, bool do_poll) /*****************************************************************************/ +void +nm_utils_named_value_clear_with_g_free(NMUtilsNamedValue *val) +{ + if (val) { + gs_free gpointer x_name = NULL; + gs_free gpointer x_value = NULL; + + x_name = (gpointer) g_steal_pointer(&val->name); + x_value = g_steal_pointer(&val->value_ptr); + } +} + G_STATIC_ASSERT(G_STRUCT_OFFSET(NMUtilsNamedValue, name) == 0); NMUtilsNamedValue * @@ -3262,6 +3295,62 @@ nm_utils_hash_values_to_array(GHashTable * hash, return arr; } +/*****************************************************************************/ + +/** + * nm_utils_hashtable_equal: + * @a: one #GHashTable + * @b: other #GHashTable + * @treat_null_as_empty: if %TRUE, when either @a or @b is %NULL, it is + * treated like an empty hash. It means, a %NULL hash will compare equal + * to an empty hash. + * @equal_func: the equality function, for comparing the values. + * If %NULL, the values are not compared. In that case, the function + * only checks, if both dictionaries have the same keys -- according + * to @b's key equality function. + * Note that the values of @a will be passed as first argument + * to @equal_func. + * + * Compares two hash tables, whether they have equal content. + * This only makes sense, if @a and @b have the same key types and + * the same key compare-function. + * + * Returns: %TRUE, if both dictionaries have the same content. + */ +gboolean +nm_utils_hashtable_equal(const GHashTable *a, + const GHashTable *b, + gboolean treat_null_as_empty, + GEqualFunc equal_func) +{ + guint n; + GHashTableIter iter; + gconstpointer key, v_a, v_b; + + if (a == b) + return TRUE; + if (!treat_null_as_empty) { + if (!a || !b) + return FALSE; + } + + n = a ? g_hash_table_size((GHashTable *) a) : 0; + if (n != (b ? g_hash_table_size((GHashTable *) b) : 0)) + return FALSE; + + if (n > 0) { + g_hash_table_iter_init(&iter, (GHashTable *) a); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &v_a)) { + if (!g_hash_table_lookup_extended((GHashTable *) b, key, NULL, (gpointer *) &v_b)) + return FALSE; + if (equal_func && !equal_func(v_a, v_b)) + return FALSE; + } + } + + return TRUE; +} + static gboolean _utils_hashtable_equal(GHashTable * hash_a, GHashTable * hash_b, @@ -3301,7 +3390,7 @@ _utils_hashtable_equal(GHashTable * hash_a, } /** - * nm_utils_hashtable_equal: + * nm_utils_hashtable_cmp_equal: * @a: (allow-none): the hash table or %NULL * @b: (allow-none): the other hash table or %NULL * @cmp_values: (allow-none): if %NULL, only the keys @@ -3316,10 +3405,10 @@ _utils_hashtable_equal(GHashTable * hash_a, * @cmp_values is given) all values are the same. */ gboolean -nm_utils_hashtable_equal(const GHashTable *a, - const GHashTable *b, - GCompareDataFunc cmp_values, - gpointer user_data) +nm_utils_hashtable_cmp_equal(const GHashTable *a, + const GHashTable *b, + GCompareDataFunc cmp_values, + gpointer user_data) { GHashTable *hash_a = (GHashTable *) a; GHashTable *hash_b = (GHashTable *) b; @@ -3374,7 +3463,7 @@ _hashtable_cmp_func(gconstpointer a, gconstpointer b, gpointer user_data) * @a: (allow-none): the hash to compare. May be %NULL. * @b: (allow-none): the other hash to compare. May be %NULL. * @do_fast_precheck: if %TRUE, assume that the hashes are equal - * and that it is worth calling nm_utils_hashtable_equal() first. + * and that it is worth calling nm_utils_hashtable_cmp_equal() first. * That requires, that both hashes have the same equals function * which is compatible with the @cmp_keys function. * @cmp_keys: the compare function for keys. Usually, the hash/equal function @@ -3827,62 +3916,6 @@ nm_utils_array_find_binary_search(gconstpointer list, /*****************************************************************************/ /** - * nm_utils_hash_table_equal: - * @a: one #GHashTable - * @b: other #GHashTable - * @treat_null_as_empty: if %TRUE, when either @a or @b is %NULL, it is - * treated like an empty hash. It means, a %NULL hash will compare equal - * to an empty hash. - * @equal_func: the equality function, for comparing the values. - * If %NULL, the values are not compared. In that case, the function - * only checks, if both dictionaries have the same keys -- according - * to @b's key equality function. - * Note that the values of @a will be passed as first argument - * to @equal_func. - * - * Compares two hash tables, whether they have equal content. - * This only makes sense, if @a and @b have the same key types and - * the same key compare-function. - * - * Returns: %TRUE, if both dictionaries have the same content. - */ -gboolean -nm_utils_hash_table_equal(const GHashTable * a, - const GHashTable * b, - gboolean treat_null_as_empty, - NMUtilsHashTableEqualFunc equal_func) -{ - guint n; - GHashTableIter iter; - gconstpointer key, v_a, v_b; - - if (a == b) - return TRUE; - if (!treat_null_as_empty) { - if (!a || !b) - return FALSE; - } - - n = a ? g_hash_table_size((GHashTable *) a) : 0; - if (n != (b ? g_hash_table_size((GHashTable *) b) : 0)) - return FALSE; - - if (n > 0) { - g_hash_table_iter_init(&iter, (GHashTable *) a); - while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &v_a)) { - if (!g_hash_table_lookup_extended((GHashTable *) b, key, NULL, (gpointer *) &v_b)) - return FALSE; - if (equal_func && !equal_func(v_a, v_b)) - return FALSE; - } - } - - return TRUE; -} - -/*****************************************************************************/ - -/** * nm_utils_get_start_time_for_pid: * @pid: the process identifier * @out_state: return the state character, like R, S, Z. See `man 5 proc`. diff --git a/shared/nm-glib-aux/nm-shared-utils.h b/shared/nm-glib-aux/nm-shared-utils.h index 23884a3777..dd094a2cbd 100644 --- a/shared/nm-glib-aux/nm-shared-utils.h +++ b/shared/nm-glib-aux/nm-shared-utils.h @@ -88,14 +88,25 @@ typedef struct { } NMEtherAddr; #define NM_ETHER_ADDR_FORMAT_STR "%02X:%02X:%02X:%02X:%02X:%02X" -#define NM_ETHER_ADDR_FORMAT_VAL(x) \ - (x).ether_addr_octet[0], (x).ether_addr_octet[1], (x).ether_addr_octet[2], \ - (x).ether_addr_octet[3], (x).ether_addr_octet[4], (x).ether_addr_octet[5] -#define NM_ETHER_ADDR_INIT(...) \ - { \ - .ether_addr_octet = {__VA_ARGS__}, \ + +#define NM_ETHER_ADDR_FORMAT_VAL(x) \ + (x)->ether_addr_octet[0], (x)->ether_addr_octet[1], (x)->ether_addr_octet[2], \ + (x)->ether_addr_octet[3], (x)->ether_addr_octet[4], (x)->ether_addr_octet[5] + +#define _NM_ETHER_ADDR_INIT(a0, a1, a2, a3, a4, a5) \ + { \ + .ether_addr_octet = { \ + (a0), \ + (a1), \ + (a2), \ + (a3), \ + (a4), \ + (a5), \ + }, \ } +#define NM_ETHER_ADDR_INIT(...) ((NMEtherAddr) _NM_ETHER_ADDR_INIT(__VA_ARGS__)) + static inline int nm_ether_addr_cmp(const NMEtherAddr *a, const NMEtherAddr *b) { @@ -318,6 +329,8 @@ gboolean nm_utils_gbytes_equal_mem(GBytes *bytes, gconstpointer mem_data, gsize GVariant *nm_utils_gbytes_to_variant_ay(GBytes *bytes); +GHashTable *nm_utils_strdict_clone(GHashTable *src); + GVariant *nm_utils_strdict_to_variant_ass(GHashTable *strdict); GVariant *nm_utils_strdict_to_variant_asv(GHashTable *strdict); @@ -758,8 +771,10 @@ typedef struct { { \ static const NMUtilsFlags2StrDesc descs[] = {__VA_ARGS__}; \ G_STATIC_ASSERT(sizeof(flags_type) <= sizeof(unsigned)); \ + \ return nm_utils_flags2str(descs, G_N_ELEMENTS(descs), flags, buf, len); \ - }; + } \ + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON const char *nm_utils_flags2str(const NMUtilsFlags2StrDesc *descs, gsize n_descs, @@ -796,7 +811,8 @@ case v: \ g_snprintf(buf, len, "(%" int_fmt ")", val); \ } \ return buf; \ - } + } \ + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON #define NM_UTILS_ENUM2STR_DEFINE(fcn_name, lookup_type, ...) \ NM_UTILS_ENUM2STR_DEFINE_FULL(fcn_name, lookup_type, "d", __VA_ARGS__) @@ -918,6 +934,8 @@ _nm_g_slice_free_fcn_define(1) _nm_g_slice_free_fcn_define(2) _nm_g_slice_free_f * error reason. Depending on the usage, this might indicate a bug because * usually the target object should stay alive as long as there are pending * operations. + * @NM_UTILS_ERROR_NOT_READY: the failure is related to being currently + * not ready to perform the operation. * * @NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE: used for a very particular * purpose during nm_device_check_connection_compatible() to indicate that @@ -938,6 +956,7 @@ typedef enum { NM_UTILS_ERROR_UNKNOWN = 0, /*< nick=Unknown >*/ NM_UTILS_ERROR_CANCELLED_DISPOSING, /*< nick=CancelledDisposing >*/ NM_UTILS_ERROR_INVALID_ARGUMENT, /*< nick=InvalidArgument >*/ + NM_UTILS_ERROR_NOT_READY, /*< nick=NotReady >*/ /* the following codes have a special meaning and are exactly used for * nm_device_check_connection_compatible() and nm_device_check_connection_available(). @@ -1214,6 +1233,27 @@ nm_g_variant_is_of_type(GVariant *value, const GVariantType *type) return value && g_variant_is_of_type(value, type); } +static inline GVariant * +nm_g_variant_new_ay_inaddr(int addr_family, gconstpointer addr) +{ + return g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, + addr ?: &nm_ip_addr_zero, + nm_utils_addr_family_to_size(addr_family), + 1); +} + +static inline GVariant * +nm_g_variant_new_ay_in4addr(in_addr_t addr) +{ + return nm_g_variant_new_ay_inaddr(AF_INET, &addr); +} + +static inline GVariant * +nm_g_variant_new_ay_in6addr(const struct in6_addr *addr) +{ + return nm_g_variant_new_ay_inaddr(AF_INET6, addr); +} + static inline void nm_g_variant_builder_add_sv(GVariantBuilder *builder, const char *key, GVariant *val) { @@ -1434,6 +1474,8 @@ void nm_utils_named_value_list_sort(NMUtilsNamedValue *arr, GCompareDataFunc compare_func, gpointer user_data); +void nm_utils_named_value_clear_with_g_free(NMUtilsNamedValue *val); + /*****************************************************************************/ gpointer *nm_utils_hash_keys_to_array(GHashTable * hash, @@ -1457,13 +1499,18 @@ nm_utils_strdict_get_keys(const GHashTable *hash, gboolean sorted, guint *out_le gboolean nm_utils_hashtable_equal(const GHashTable *a, const GHashTable *b, - GCompareDataFunc cmp_values, - gpointer user_data); + gboolean treat_null_as_empty, + GEqualFunc equal_func); + +gboolean nm_utils_hashtable_cmp_equal(const GHashTable *a, + const GHashTable *b, + GCompareDataFunc cmp_values, + gpointer user_data); static inline gboolean nm_utils_hashtable_same_keys(const GHashTable *a, const GHashTable *b) { - return nm_utils_hashtable_equal(a, b, NULL, NULL); + return nm_utils_hashtable_cmp_equal(a, b, NULL, NULL); } int nm_utils_hashtable_cmp(const GHashTable *a, @@ -1508,6 +1555,13 @@ nm_g_array_len(const GArray *arr) return arr ? arr->len : 0u; } +static inline void +nm_g_array_unref(GArray *arr) +{ + if (arr) + g_array_unref(arr); +} + #define nm_g_array_append_new(arr, type) \ ({ \ GArray *const _arr = (arr); \ @@ -1522,6 +1576,55 @@ nm_g_array_len(const GArray *arr) /*****************************************************************************/ +static inline GPtrArray * +nm_g_ptr_array_ref(GPtrArray *arr) +{ + return arr ? g_ptr_array_ref(arr) : NULL; +} + +static inline void +nm_g_ptr_array_unref(GPtrArray *arr) +{ + if (arr) + g_ptr_array_unref(arr); +} + +#define nm_g_ptr_array_set(pdst, val) \ + ({ \ + GPtrArray **_pdst = (pdst); \ + GPtrArray * _val = (val); \ + gboolean _changed = FALSE; \ + \ + nm_assert(_pdst); \ + \ + if (*_pdst != _val) { \ + _nm_unused gs_unref_ptrarray GPtrArray *_old = *_pdst; \ + \ + *_pdst = nm_g_ptr_array_ref(_val); \ + _changed = TRUE; \ + } \ + _changed; \ + }) + +#define nm_g_ptr_array_set_take(pdst, val) \ + ({ \ + GPtrArray **_pdst = (pdst); \ + GPtrArray * _val = (val); \ + gboolean _changed = FALSE; \ + \ + nm_assert(_pdst); \ + \ + if (*_pdst != _val) { \ + _nm_unused gs_unref_ptrarray GPtrArray *_old = *_pdst; \ + \ + *_pdst = _val; \ + _changed = TRUE; \ + } else { \ + nm_g_ptr_array_unref(_val); \ + } \ + _changed; \ + }) + static inline guint nm_g_ptr_array_len(const GPtrArray *arr) { @@ -1571,6 +1674,19 @@ GPtrArray *_nm_g_ptr_array_copy(GPtrArray * array, /*****************************************************************************/ +static inline GHashTable * +nm_g_hash_table_ref(GHashTable *hash) +{ + return hash ? g_hash_table_ref(hash) : NULL; +} + +static inline void +nm_g_hash_table_unref(GHashTable *hash) +{ + if (hash) + g_hash_table_unref(hash); +} + static inline guint nm_g_hash_table_size(GHashTable *hash) { @@ -1614,27 +1730,16 @@ gssize nm_utils_array_find_binary_search(gconstpointer list, /*****************************************************************************/ -typedef gboolean (*NMUtilsHashTableEqualFunc)(gconstpointer a, gconstpointer b); - -gboolean nm_utils_hash_table_equal(const GHashTable * a, - const GHashTable * b, - gboolean treat_null_as_empty, - NMUtilsHashTableEqualFunc equal_func); - -/*****************************************************************************/ - void _nm_utils_strv_sort(const char **strv, gssize len); #define nm_utils_strv_sort(strv, len) _nm_utils_strv_sort(NM_CAST_STRV_MC(strv), len) int _nm_utils_strv_cmp_n(const char *const *strv1, gssize len1, const char *const *strv2, gssize len2); -static inline gboolean -_nm_utils_strv_equal(char **strv1, char **strv2) -{ - return _nm_utils_strv_cmp_n((const char *const *) strv1, -1, (const char *const *) strv2, -1) - == 0; -} +#define nm_utils_strv_cmp_n(strv1, len1, strv2, len2) \ + _nm_utils_strv_cmp_n(NM_CAST_STRV_CC(strv1), (len1), NM_CAST_STRV_CC(strv2), (len2)) + +#define nm_utils_strv_equal(strv1, strv2) (nm_utils_strv_cmp_n((strv1), -1, (strv2), -1) == 0) /*****************************************************************************/ @@ -1851,14 +1956,14 @@ nm_strv_ptrarray_contains(const GPtrArray *strv, const char *str) static inline int nm_strv_ptrarray_cmp(const GPtrArray *a, const GPtrArray *b) { - /* _nm_utils_strv_cmp_n() will treat NULL and empty arrays the same. + /* nm_utils_strv_cmp_n() will treat NULL and empty arrays the same. * That means, an empty strv array can both be represented by NULL * and an array of length zero. * If you need to distinguish between these case, do that yourself. */ - return _nm_utils_strv_cmp_n((const char *const *) nm_g_ptr_array_pdata(a), - nm_g_ptr_array_len(a), - (const char *const *) nm_g_ptr_array_pdata(b), - nm_g_ptr_array_len(b)); + return nm_utils_strv_cmp_n((const char *const *) nm_g_ptr_array_pdata(a), + nm_g_ptr_array_len(a), + (const char *const *) nm_g_ptr_array_pdata(b), + nm_g_ptr_array_len(b)); } /*****************************************************************************/ @@ -2060,7 +2165,8 @@ _nm_utils_hwaddr_ntoa(gconstpointer addr, { \ unknown_val_cmd; \ } \ - } + } \ + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON #define NM_UTILS_STRING_TABLE_LOOKUP_STRUCT_DEFINE(fcn_name, \ result_type, \ @@ -2130,6 +2236,25 @@ nm_utils_strdup_reset(char **dst, const char *src) return TRUE; } +static inline gboolean +nm_utils_strdup_reset_take(char **dst, char *src) +{ + char *old; + + nm_assert(dst); + nm_assert(src != *dst); + + if (nm_streq0(*dst, src)) { + if (src) + g_free(src); + return FALSE; + } + old = *dst; + *dst = src; + g_free(old); + return TRUE; +} + void nm_indirect_g_free(gpointer arg); /*****************************************************************************/ diff --git a/shared/nm-glib-aux/nm-str-buf.h b/shared/nm-glib-aux/nm-str-buf.h index 062630a5d2..f5e0bd8fe9 100644 --- a/shared/nm-glib-aux/nm-str-buf.h +++ b/shared/nm-glib-aux/nm-str-buf.h @@ -31,7 +31,7 @@ typedef struct _NMStrBuf { /*****************************************************************************/ static inline void -_nm_str_buf_assert(NMStrBuf *strbuf) +_nm_str_buf_assert(const NMStrBuf *strbuf) { nm_assert(strbuf); nm_assert((!!strbuf->_priv_str) == (strbuf->_priv_allocated > 0)); @@ -361,6 +361,31 @@ nm_str_buf_get_str_unsafe(NMStrBuf *strbuf) return strbuf->_priv_str; } +static inline char * +nm_str_buf_get_str_at_unsafe(NMStrBuf *strbuf, gsize index) +{ + _nm_str_buf_assert(strbuf); + + /* it is acceptable to ask for a pointer at the end of the buffer -- even + * if there is no data there. The caller is anyway required to take care + * of the length (that's the "unsafe" part), and in that case, the length + * is merely zero. */ + nm_assert(index <= strbuf->allocated); + + if (!strbuf->_priv_str) + return NULL; + + return &strbuf->_priv_str[index]; +} + +static inline char +nm_str_buf_get_char(const NMStrBuf *strbuf, gsize index) +{ + _nm_str_buf_assert(strbuf); + nm_assert(index < strbuf->allocated); + return strbuf->_priv_str[index]; +} + /** * nm_str_buf_finalize: * @strbuf: an initilized #NMStrBuf diff --git a/shared/nm-glib-aux/tests/test-shared-general.c b/shared/nm-glib-aux/tests/test-shared-general.c index 84e0a6f076..13dd26f240 100644 --- a/shared/nm-glib-aux/tests/test-shared-general.c +++ b/shared/nm-glib-aux/tests/test-shared-general.c @@ -364,8 +364,8 @@ test_strv_cmp(void) _strv_cmp_fuzz_input((a1), _l1, &_a1_free_shallow, &_a1_free_deep, &_a1, &_a1x); \ _strv_cmp_fuzz_input((a2), _l2, &_a2_free_shallow, &_a2_free_deep, &_a2, &_a2x); \ \ - _c1 = _nm_utils_strv_cmp_n(_a1, _l1, _a2, _l2); \ - _c2 = _nm_utils_strv_cmp_n(_a2, _l2, _a1, _l1); \ + _c1 = nm_utils_strv_cmp_n(_a1, _l1, _a2, _l2); \ + _c2 = nm_utils_strv_cmp_n(_a2, _l2, _a1, _l1); \ if (equal) { \ g_assert_cmpint(_c1, ==, 0); \ g_assert_cmpint(_c2, ==, 0); \ @@ -376,8 +376,8 @@ test_strv_cmp(void) \ /* Compare with self. _strv_cmp_fuzz_input() randomly swapped the arguments (_a1 and _a1x). * Either way, the arrays must compare equal to their semantically equal alternative. */ \ - g_assert_cmpint(_nm_utils_strv_cmp_n(_a1, _l1, _a1x, _l1), ==, 0); \ - g_assert_cmpint(_nm_utils_strv_cmp_n(_a2, _l2, _a2x, _l2), ==, 0); \ + g_assert_cmpint(nm_utils_strv_cmp_n(_a1, _l1, _a1x, _l1), ==, 0); \ + g_assert_cmpint(nm_utils_strv_cmp_n(_a2, _l2, _a2x, _l2), ==, 0); \ \ _strv_cmp_free_deep(_a1_free_deep, _l1); \ _strv_cmp_free_deep(_a2_free_deep, _l2); \ @@ -632,9 +632,10 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"0", 0}, {"1", 1}, {"2", 2}, - {"3", 3}, ) + {"3", 3}, ); - static void test_string_table_lookup(void) +static void +test_string_table_lookup(void) { const char *const args[] = { NULL, @@ -951,10 +952,10 @@ again: else g_assert(!data); - g_assert(_nm_utils_strv_cmp_n((const char *const *) strv->pdata, - strv->len, - (const char *const *) strv2->pdata, - strv2->len) + g_assert(nm_utils_strv_cmp_n((const char *const *) strv->pdata, + strv->len, + (const char *const *) strv2->pdata, + strv2->len) == 0); } } @@ -1050,7 +1051,7 @@ test_strv_dup_packed(void) g_assert(strv_cpy); g_assert(NM_PTRARRAY_LEN(strv_cpy) == strv_len); if (strv_cpy) - g_assert(_nm_utils_strv_equal((char **) strv_cpy, (char **) strv_src)); + g_assert(nm_utils_strv_equal(strv_cpy, strv_src)); } } @@ -1189,8 +1190,8 @@ test_utils_hashtable_cmp(void) } g_assert(nm_utils_hashtable_same_keys(h1, h2)); - g_assert(nm_utils_hashtable_equal(h1, h2, NULL, NULL)); - g_assert(nm_utils_hashtable_equal(h1, h2, func_val_cmp, NULL)); + g_assert(nm_utils_hashtable_cmp_equal(h1, h2, NULL, NULL)); + g_assert(nm_utils_hashtable_cmp_equal(h1, h2, func_val_cmp, NULL)); g_assert(nm_utils_hashtable_cmp(h1, h2, FALSE, func_key_cmp, NULL, NULL) == 0); g_assert(nm_utils_hashtable_cmp(h1, h2, TRUE, func_key_cmp, NULL, NULL) == 0); g_assert(nm_utils_hashtable_cmp(h1, h2, FALSE, func_key_cmp, func_val_cmp, NULL) == 0); @@ -1220,16 +1221,16 @@ again: if (has_same_keys) { g_assert(nm_utils_hashtable_same_keys(h1, h2)); - g_assert(nm_utils_hashtable_equal(h1, h2, NULL, NULL)); + g_assert(nm_utils_hashtable_cmp_equal(h1, h2, NULL, NULL)); g_assert(nm_utils_hashtable_cmp(h1, h2, FALSE, func_key_cmp, NULL, NULL) == 0); g_assert(nm_utils_hashtable_cmp(h1, h2, TRUE, func_key_cmp, NULL, NULL) == 0); } else { g_assert(!nm_utils_hashtable_same_keys(h1, h2)); - g_assert(!nm_utils_hashtable_equal(h1, h2, NULL, NULL)); + g_assert(!nm_utils_hashtable_cmp_equal(h1, h2, NULL, NULL)); g_assert(nm_utils_hashtable_cmp(h1, h2, FALSE, func_key_cmp, NULL, NULL) != 0); g_assert(nm_utils_hashtable_cmp(h1, h2, TRUE, func_key_cmp, NULL, NULL) != 0); } - g_assert(!nm_utils_hashtable_equal(h1, h2, func_val_cmp, NULL)); + g_assert(!nm_utils_hashtable_cmp_equal(h1, h2, func_val_cmp, NULL)); g_assert(nm_utils_hashtable_cmp(h1, h2, FALSE, func_key_cmp, func_val_cmp, NULL) != 0); g_assert(nm_utils_hashtable_cmp(h1, h2, TRUE, func_key_cmp, func_val_cmp, NULL) != 0); } diff --git a/shared/nm-meta-setting.c b/shared/nm-meta-setting.c index 51b90e6f05..8d29dde28a 100644 --- a/shared/nm-meta-setting.c +++ b/shared/nm-meta-setting.c @@ -21,6 +21,7 @@ #include "nm-setting-ethtool.h" #include "nm-setting-generic.h" #include "nm-setting-gsm.h" +#include "nm-setting-hostname.h" #include "nm-setting-infiniband.h" #include "nm-setting-ip-config.h" #include "nm-setting-ip-tunnel.h" @@ -33,6 +34,7 @@ #include "nm-setting-ovs-bridge.h" #include "nm-setting-ovs-interface.h" #include "nm-setting-ovs-dpdk.h" +#include "nm-setting-ovs-external-ids.h" #include "nm-setting-ovs-patch.h" #include "nm-setting-ovs-port.h" #include "nm-setting-ppp.h" @@ -44,6 +46,7 @@ #include "nm-setting-team.h" #include "nm-setting-tun.h" #include "nm-setting-user.h" +#include "nm-setting-veth.h" #include "nm-setting-vlan.h" #include "nm-setting-vpn.h" #include "nm-setting-vrf.h" @@ -242,6 +245,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_GSM_SETTING_NAME, .get_setting_gtype = nm_setting_gsm_get_type, }, + [NM_META_SETTING_TYPE_HOSTNAME] = + { + .meta_type = NM_META_SETTING_TYPE_HOSTNAME, + .setting_priority = NM_SETTING_PRIORITY_IP, + .setting_name = NM_SETTING_HOSTNAME_SETTING_NAME, + .get_setting_gtype = nm_setting_hostname_get_type, + }, [NM_META_SETTING_TYPE_INFINIBAND] = { .meta_type = NM_META_SETTING_TYPE_INFINIBAND, @@ -312,6 +322,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_OVS_DPDK_SETTING_NAME, .get_setting_gtype = nm_setting_ovs_dpdk_get_type, }, + [NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS] = + { + .meta_type = NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, + .setting_priority = NM_SETTING_PRIORITY_AUX, + .setting_name = NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME, + .get_setting_gtype = nm_setting_ovs_external_ids_get_type, + }, [NM_META_SETTING_TYPE_OVS_INTERFACE] = { .meta_type = NM_META_SETTING_TYPE_OVS_INTERFACE, @@ -403,6 +420,13 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_USER_SETTING_NAME, .get_setting_gtype = nm_setting_user_get_type, }, + [NM_META_SETTING_TYPE_VETH] = + { + .meta_type = NM_META_SETTING_TYPE_VETH, + .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_name = NM_SETTING_VETH_SETTING_NAME, + .get_setting_gtype = nm_setting_veth_get_type, + }, [NM_META_SETTING_TYPE_VLAN] = { .meta_type = NM_META_SETTING_TYPE_VLAN, @@ -590,3 +614,31 @@ out_none: } /*****************************************************************************/ + +NMSettingPriority +nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype) +{ + /* Historical oddity: PPPoE is a base-type even though it's not + * priority 1. It needs to be sorted *after* lower-level stuff like + * Wi-Fi security or 802.1x for secrets, but it's still allowed as a + * base type. + */ + + if (setting_info) { + if (NM_IN_SET(setting_info->setting_priority, + NM_SETTING_PRIORITY_HW_BASE, + NM_SETTING_PRIORITY_HW_NON_BASE) + || gtype == NM_TYPE_SETTING_PPPOE) + return setting_info->setting_priority; + } + + return NM_SETTING_PRIORITY_INVALID; +} + +NMSettingPriority +_nm_setting_type_get_base_type_priority(GType type) +{ + return nm_meta_setting_info_get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type); +} + +/*****************************************************************************/ diff --git a/shared/nm-meta-setting.h b/shared/nm-meta-setting.h index dadf2f7217..82b387d674 100644 --- a/shared/nm-meta-setting.h +++ b/shared/nm-meta-setting.h @@ -119,6 +119,7 @@ typedef enum { NM_META_SETTING_TYPE_ETHTOOL, NM_META_SETTING_TYPE_GENERIC, NM_META_SETTING_TYPE_GSM, + NM_META_SETTING_TYPE_HOSTNAME, NM_META_SETTING_TYPE_INFINIBAND, NM_META_SETTING_TYPE_IP_TUNNEL, NM_META_SETTING_TYPE_IP4_CONFIG, @@ -128,6 +129,7 @@ typedef enum { NM_META_SETTING_TYPE_MATCH, NM_META_SETTING_TYPE_OVS_BRIDGE, NM_META_SETTING_TYPE_OVS_DPDK, + NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, NM_META_SETTING_TYPE_OVS_INTERFACE, NM_META_SETTING_TYPE_OVS_PATCH, NM_META_SETTING_TYPE_OVS_PORT, @@ -141,6 +143,7 @@ typedef enum { NM_META_SETTING_TYPE_TEAM_PORT, NM_META_SETTING_TYPE_TUN, NM_META_SETTING_TYPE_USER, + NM_META_SETTING_TYPE_VETH, NM_META_SETTING_TYPE_VLAN, NM_META_SETTING_TYPE_VPN, NM_META_SETTING_TYPE_VRF, @@ -206,4 +209,8 @@ const NMMetaSettingInfo *nm_meta_setting_infos_by_gtype(GType gtype); /*****************************************************************************/ +NMSettingPriority nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, + GType gtype); +NMSettingPriority _nm_setting_type_get_base_type_priority(GType type); + #endif /* __NM_META_SETTING_H__ */ diff --git a/shared/nm-std-aux/c-list-util.c b/shared/nm-std-aux/c-list-util.c index a5837edd76..b7f962ebcf 100644 --- a/shared/nm-std-aux/c-list-util.c +++ b/shared/nm-std-aux/c-list-util.c @@ -20,7 +20,7 @@ * pointer to @lst. * * The use of this function is to do a bulk update, that lets the - * list degredate by not updating the prev pointers. At the end, + * list degenerate by not updating the prev pointers. At the end, * the list can be fixed by c_list_relink(). */ void @@ -111,7 +111,8 @@ _c_list_sort(CList *ls, CListSortCmp cmp, const void *user_data) /* A simple top-down, non-recursive, stable merge-sort. * * Maybe natural merge-sort would be better, to do better for - * partially sorted lists. */ + * partially sorted lists. Doing that would be much more complicated, + * so it's not done. */ _split: stack_head[0].ls2 = _c_list_srt_split(stack_head[0].ls1); if (stack_head[0].ls2) { diff --git a/shared/nm-std-aux/c-list-util.h b/shared/nm-std-aux/c-list-util.h index 828481e114..8f40d32133 100644 --- a/shared/nm-std-aux/c-list-util.h +++ b/shared/nm-std-aux/c-list-util.h @@ -42,4 +42,15 @@ c_list_length_is(const CList *list, unsigned long check_len) return n == check_len; } +#define c_list_for_each_prev(_iter, _list) \ + for (_iter = (_list)->prev; (_iter) != (_list); _iter = (_iter)->prev) + +#define c_list_for_each_prev_safe(_iter, _safe, _list) \ + for (_iter = (_list)->prev, _safe = (_iter)->prev; (_iter) != (_list); \ + _iter = (_safe), _safe = (_safe)->prev) + +#define c_list_for_each_entry_prev(_iter, _list, _m) \ + for (_iter = c_list_entry((_list)->prev, __typeof__(*_iter), _m); &(_iter)->_m != (_list); \ + _iter = c_list_entry((_iter)->_m.prev, __typeof__(*_iter), _m)) + #endif /* __C_LIST_UTIL_H__ */ diff --git a/shared/nm-std-aux/nm-std-aux.h b/shared/nm-std-aux/nm-std-aux.h index 762f104be3..7b06472631 100644 --- a/shared/nm-std-aux/nm-std-aux.h +++ b/shared/nm-std-aux/nm-std-aux.h @@ -189,6 +189,37 @@ typedef uint64_t _nm_bitwise nm_be64_t; /*****************************************************************************/ +static inline uint32_t +nm_add_clamped_u32(uint32_t a, uint32_t b) +{ + uint32_t c; + + /* returns a+b, or UINT32_MAX if the result would overflow. */ + + c = a + b; + if (c < a) + return UINT32_MAX; + return c; +} + +static inline unsigned +nm_mult_clamped_u(unsigned a, unsigned b) +{ + unsigned c; + + /* returns a*b, or UINT_MAX if the result would overflow. */ + + if (b == 0) + return 0; + + c = a * b; + + if (c / b != a) + return (unsigned) -1; + + return c; +} + /* glib's MIN()/MAX() macros don't have function-like behavior, in that they evaluate * the argument possibly twice. * @@ -767,6 +798,21 @@ nm_steal_fd(int *p_fd) /*****************************************************************************/ +static inline uintptr_t +nm_ptr_to_uintptr(const void *p) +{ + /* in C, pointers can only be compared (with less-than or greater-than) under certain + * circumstances. Since uintptr_t is supposed to be able to represent the pointer + * as a plain integer and also support to convert the integer back to the pointer, + * it should be safer to compare the pointers directly. + * + * Of course, this function isn't very useful beyond that its use makes it clear + * that we want to compare pointers by value, which otherwise may not be valid. */ + return (uintptr_t) p; +} + +/*****************************************************************************/ + #define NM_CMP_RETURN(c) \ do { \ const int _cc = (c); \ @@ -813,7 +859,7 @@ nm_steal_fd(int *p_fd) * Avoid that by casting pointers to void* and then to uintptr_t. This comparison * is not really meaningful, except that it provides some kind of stable sort order * between pointers (that can otherwise not be compared). */ -#define NM_CMP_DIRECT_PTR(a, b) NM_CMP_DIRECT((uintptr_t)((void *) (a)), (uintptr_t)((void *) (b))) +#define NM_CMP_DIRECT_PTR(a, b) NM_CMP_DIRECT(nm_ptr_to_uintptr(a), nm_ptr_to_uintptr(b)) #define NM_CMP_DIRECT_MEMCMP(a, b, size) NM_CMP_RETURN(memcmp((a), (b), (size))) diff --git a/shared/nm-test-utils-impl.c b/shared/nm-test-utils-impl.c index 57f30ea930..5ea4968a85 100644 --- a/shared/nm-test-utils-impl.c +++ b/shared/nm-test-utils-impl.c @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2010 - 2015 Red Hat, Inc. */ diff --git a/shared/nm-udev-aux/nm-udev-utils.c b/shared/nm-udev-aux/nm-udev-utils.c index 8131c04e39..3337ff5c96 100644 --- a/shared/nm-udev-aux/nm-udev-utils.c +++ b/shared/nm-udev-aux/nm-udev-utils.c @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2017 Red Hat, Inc. */ diff --git a/shared/nm-udev-aux/nm-udev-utils.h b/shared/nm-udev-aux/nm-udev-utils.h index f24659eb32..00fefdd07e 100644 --- a/shared/nm-udev-aux/nm-udev-utils.h +++ b/shared/nm-udev-aux/nm-udev-utils.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2017 Red Hat, Inc. */ diff --git a/shared/nm-utils/nm-test-utils.h b/shared/nm-utils/nm-test-utils.h index 62d608c6e9..42b584c982 100644 --- a/shared/nm-utils/nm-test-utils.h +++ b/shared/nm-utils/nm-test-utils.h @@ -900,14 +900,16 @@ nmtst_get_rand_uint64(void) static inline guint nmtst_get_rand_uint(void) { - G_STATIC_ASSERT_EXPR(sizeof(guint32) == sizeof(guint)); - return nmtst_get_rand_uint32(); + G_STATIC_ASSERT_EXPR((sizeof(guint) == sizeof(guint32) || (sizeof(guint) == sizeof(guint64)))); + if (sizeof(guint32) == sizeof(guint)) + return nmtst_get_rand_uint32(); + return nmtst_get_rand_uint64(); } static inline gsize nmtst_get_rand_size(void) { - G_STATIC_ASSERT_EXPR(sizeof(gsize) == sizeof(guint32) || sizeof(gsize) == sizeof(guint64)); + G_STATIC_ASSERT_EXPR((sizeof(gsize) == sizeof(guint32) || (sizeof(gsize) == sizeof(guint64)))); if (sizeof(gsize) == sizeof(guint32)) return nmtst_get_rand_uint32(); return nmtst_get_rand_uint64(); @@ -919,6 +921,17 @@ nmtst_get_rand_bool(void) return nmtst_get_rand_uint32() % 2; } +static inline gboolean +nmtst_get_rand_one_case_in(guint32 num) +{ + /* num=1 doesn't make much sense, because it will always return %TRUE. + * Still accept it, it might be that @num is calculated, so 1 might be + * a valid edge case. */ + g_assert(num > 0); + + return (nmtst_get_rand_uint32() % num) == 0; +} + static inline gpointer nmtst_rand_buf(GRand *rand, gpointer buffer, gsize buffer_length) { diff --git a/shared/nm-version-macros.h.in b/shared/nm-version-macros.h.in index c4d6efbcbe..3d5d050027 100644 --- a/shared/nm-version-macros.h.in +++ b/shared/nm-version-macros.h.in @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1+ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2011, 2015 Red Hat, Inc. */ @@ -66,6 +66,7 @@ #define NM_VERSION_1_24 (NM_ENCODE_VERSION (1, 24, 0)) #define NM_VERSION_1_26 (NM_ENCODE_VERSION (1, 26, 0)) #define NM_VERSION_1_28 (NM_ENCODE_VERSION (1, 28, 0)) +#define NM_VERSION_1_30 (NM_ENCODE_VERSION (1, 30, 0)) /* For releases, NM_API_VERSION is equal to NM_VERSION. * diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 4739e9dd15..35b892abed 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -152,7 +152,7 @@ nm_utils_get_ip_config_method(NMConnection *connection, int addr_family) s_con = nm_connection_get_setting_connection(connection); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { g_return_val_if_fail(s_con != NULL, NM_SETTING_IP4_CONFIG_METHOD_AUTO); s_ip = nm_connection_get_setting_ip4_config(connection); @@ -164,19 +164,15 @@ nm_utils_get_ip_config_method(NMConnection *connection, int addr_family) return method; } - if (addr_family == AF_INET6) { - g_return_val_if_fail(s_con != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO); + g_return_val_if_fail(s_con != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO); - s_ip = nm_connection_get_setting_ip6_config(connection); - if (!s_ip) - return NM_SETTING_IP6_CONFIG_METHOD_IGNORE; - - method = nm_setting_ip_config_get_method(s_ip); - g_return_val_if_fail(method != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO); - return method; - } + s_ip = nm_connection_get_setting_ip6_config(connection); + if (!s_ip) + return NM_SETTING_IP6_CONFIG_METHOD_IGNORE; - g_return_val_if_reached("" /* bogus */); + method = nm_setting_ip_config_get_method(s_ip); + g_return_val_if_fail(method != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO); + return method; } gboolean @@ -204,7 +200,7 @@ nm_utils_connection_has_default_route(NMConnection *connection, } method = nm_utils_get_ip_config_method(connection, addr_family); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { if (NM_IN_STRSET(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)) @@ -1312,7 +1308,7 @@ nm_utils_ip_route_attribute_to_platform(int addr_family, else r->table_coerced = nm_platform_route_table_coerce(table ?: (route_table ?: RT_TABLE_MAIN)); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { guint8 scope; GET_ATTR(NM_IP_ROUTE_ATTRIBUTE_TOS, r4->tos, BYTE, byte, 0); @@ -1338,14 +1334,14 @@ nm_utils_ip_route_attribute_to_platform(int addr_family, if ((variant = nm_ip_route_get_attribute(s_route, NM_IP_ROUTE_ATTRIBUTE_SRC)) && g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING)) { if (inet_pton(addr_family, g_variant_get_string(variant, NULL), &addr) == 1) { - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) r4->pref_src = addr.addr4; else r6->pref_src = addr.addr6; } } - if (addr_family == AF_INET6 + if (!NM_IS_IPv4(addr_family) && (variant = nm_ip_route_get_attribute(s_route, NM_IP_ROUTE_ATTRIBUTE_FROM)) && g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING)) { int prefix; @@ -1392,7 +1388,7 @@ nm_utils_ip_addresses_to_dbus(int addr_family, GVariant ** out_address_data, GVariant ** out_addresses) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); GVariantBuilder builder_data; GVariantBuilder builder_legacy; char addr_str[NM_UTILS_INET_ADDRSTRLEN]; @@ -1495,15 +1491,12 @@ nm_utils_ip_addresses_to_dbus(int addr_family, g_variant_builder_add( &builder_legacy, "(@ayu@ay)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &address->a6.address, 16, 1), + nm_g_variant_new_ay_in6addr(&address->a6.address), address->a6.plen, - g_variant_new_fixed_array( - G_VARIANT_TYPE_BYTE, + nm_g_variant_new_ay_in6addr( (i == 0 && best_default_route) ? &NMP_OBJECT_CAST_IP6_ROUTE(best_default_route)->gateway - : &in6addr_any, - 16, - 1)); + : &in6addr_any)); } } } @@ -1519,7 +1512,7 @@ nm_utils_ip_routes_to_dbus(int addr_family, GVariant ** out_route_data, GVariant ** out_routes) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMDedupMultiIter iter; const NMPObject *obj; GVariantBuilder builder_data; @@ -1622,13 +1615,12 @@ nm_utils_ip_routes_to_dbus(int addr_family, 4, sizeof(guint32))); } else { - g_variant_builder_add( - &builder_legacy, - "(@ayu@ayu)", - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &r->r6.network, 16, 1), - (guint32) r->r6.plen, - g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &r->r6.gateway, 16, 1), - (guint32) r->r6.metric); + g_variant_builder_add(&builder_legacy, + "(@ayu@ayu)", + nm_g_variant_new_ay_in6addr(&r->r6.network), + (guint32) r->r6.plen, + nm_g_variant_new_ay_in6addr(&r->r6.gateway), + (guint32) r->r6.metric); } } } @@ -1636,3 +1628,203 @@ nm_utils_ip_routes_to_dbus(int addr_family, NM_SET_OUT(out_route_data, g_variant_builder_end(&builder_data)); NM_SET_OUT(out_routes, g_variant_builder_end(&builder_legacy)); } + +/*****************************************************************************/ + +typedef struct { + char *table; + char *rule; +} ShareRule; + +struct _NMUtilsShareRules { + GArray *rules; +}; + +static void +_share_rule_clear(gpointer data) +{ + ShareRule *rule = data; + + g_free(rule->table); + g_free(rule->rule); +} + +NMUtilsShareRules * +nm_utils_share_rules_new(void) +{ + NMUtilsShareRules *self; + + self = g_slice_new(NMUtilsShareRules); + *self = (NMUtilsShareRules){ + .rules = g_array_sized_new(FALSE, FALSE, sizeof(ShareRule), 10), + }; + + g_array_set_clear_func(self->rules, _share_rule_clear); + return self; +} + +void +nm_utils_share_rules_free(NMUtilsShareRules *self) +{ + if (!self) + return; + + g_array_unref(self->rules); + nm_g_slice_free(self); +} + +void +nm_utils_share_rules_add_rule_take(NMUtilsShareRules *self, const char *table, char *rule_take) +{ + ShareRule *rule; + + g_return_if_fail(self); + g_return_if_fail(table); + g_return_if_fail(rule_take); + + rule = nm_g_array_append_new(self->rules, ShareRule); + *rule = (ShareRule){ + .table = g_strdup(table), + .rule = g_steal_pointer(&rule_take), + }; +} + +void +nm_utils_share_rules_apply(NMUtilsShareRules *self, gboolean shared) +{ + guint i; + + g_return_if_fail(self); + + if (self->rules->len == 0) + return; + + /* depending on whether we share or unshare, we add/remote the rules + * in opposite order. */ + if (shared) + i = self->rules->len - 1; + else + i = 0; + + for (;;) { + gs_free_error GError *error = NULL; + ShareRule * rule; + gs_free const char ** argv = NULL; + gs_free char * cmd = NULL; + int status; + + rule = &g_array_index(self->rules, ShareRule, i); + + cmd = g_strdup_printf("%s --table %s %s %s", + IPTABLES_PATH, + rule->table, + shared ? "--insert" : "--delete", + rule->rule); + argv = nm_utils_strsplit_set(cmd, " "); + + nm_log_info(LOGD_SHARING, "Executing: %s", cmd); + if (!g_spawn_sync("/", + (char **) argv, + (char **) NM_PTRARRAY_EMPTY(const char *), + G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, + NULL, + NULL, + NULL, + NULL, + &status, + &error)) { + nm_log_warn(LOGD_SHARING, "Error executing command: %s", error->message); + goto next; + } + if (WEXITSTATUS(status)) { + nm_log_warn(LOGD_SHARING, "** Command returned exit status %d.", WEXITSTATUS(status)); + } + +next: + if (shared) { + if (i == 0) + break; + i--; + } else { + i++; + if (i >= self->rules->len) + break; + } + } +} + +void +nm_utils_share_rules_add_all_rules(NMUtilsShareRules *self, + const char * ip_iface, + in_addr_t addr, + guint plen) +{ + in_addr_t netmask; + in_addr_t network; + char str_mask[NM_UTILS_INET_ADDRSTRLEN]; + char str_addr[NM_UTILS_INET_ADDRSTRLEN]; + + nm_assert(self); + + netmask = _nm_utils_ip4_prefix_to_netmask(plen); + _nm_utils_inet4_ntop(netmask, str_mask); + + network = addr & netmask; + _nm_utils_inet4_ntop(network, str_addr); + + nm_utils_share_rules_add_rule_v( + self, + "nat", + "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", + str_addr, + str_mask, + str_addr, + str_mask); + nm_utils_share_rules_add_rule_v( + self, + "filter", + "FORWARD --destination %s/%s --out-interface %s --match state --state " + "ESTABLISHED,RELATED --jump ACCEPT", + str_addr, + str_mask, + ip_iface); + nm_utils_share_rules_add_rule_v(self, + "filter", + "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", + str_addr, + str_mask, + ip_iface); + nm_utils_share_rules_add_rule_v(self, + "filter", + "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", + ip_iface, + ip_iface); + nm_utils_share_rules_add_rule_v(self, + "filter", + "FORWARD --out-interface %s --jump REJECT", + ip_iface); + nm_utils_share_rules_add_rule_v(self, + "filter", + "FORWARD --in-interface %s --jump REJECT", + ip_iface); + nm_utils_share_rules_add_rule_v( + self, + "filter", + "INPUT --in-interface %s --protocol udp --destination-port 67 --jump ACCEPT", + ip_iface); + nm_utils_share_rules_add_rule_v( + self, + "filter", + "INPUT --in-interface %s --protocol tcp --destination-port 67 --jump ACCEPT", + ip_iface); + nm_utils_share_rules_add_rule_v( + self, + "filter", + "INPUT --in-interface %s --protocol udp --destination-port 53 --jump ACCEPT", + ip_iface); + nm_utils_share_rules_add_rule_v( + self, + "filter", + "INPUT --in-interface %s --protocol tcp --destination-port 53 --jump ACCEPT", + ip_iface); +} diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h index e961c785a1..5373f9cea8 100644 --- a/src/NetworkManagerUtils.h +++ b/src/NetworkManagerUtils.h @@ -224,4 +224,31 @@ NM_AUTO_DEFINE_FCN(NMDhcpLease *, _nm_auto_unref_dhcplease, nm_dhcp_lease_unref) /*****************************************************************************/ +typedef struct _NMUtilsShareRules NMUtilsShareRules; + +NMUtilsShareRules *nm_utils_share_rules_new(void); + +void nm_utils_share_rules_free(NMUtilsShareRules *self); + +void +nm_utils_share_rules_add_rule_take(NMUtilsShareRules *self, const char *table, char *rule_take); + +static inline void +nm_utils_share_rules_add_rule(NMUtilsShareRules *self, const char *table, const char *rule) +{ + nm_utils_share_rules_add_rule_take(self, table, g_strdup(rule)); +} + +#define nm_utils_share_rules_add_rule_v(self, table, ...) \ + nm_utils_share_rules_add_rule_take((self), (table), g_strdup_printf(__VA_ARGS__)) + +void nm_utils_share_rules_add_all_rules(NMUtilsShareRules *self, + const char * ip_iface, + in_addr_t addr, + guint plen); + +void nm_utils_share_rules_apply(NMUtilsShareRules *self, gboolean shared); + +/*****************************************************************************/ + #endif /* __NETWORKMANAGER_UTILS_H__ */ diff --git a/src/devices/adsl/nm-atm-manager.c b/src/devices/adsl/nm-atm-manager.c index 8e9f555db0..07ee6529a6 100644 --- a/src/devices/adsl/nm-atm-manager.c +++ b/src/devices/adsl/nm-atm-manager.c @@ -53,7 +53,7 @@ NM_DEVICE_FACTORY_DECLARE_TYPES( G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { - return (NMDeviceFactory *) g_object_new(NM_TYPE_ATM_MANAGER, NULL); + return g_object_new(NM_TYPE_ATM_MANAGER, NULL); } /*****************************************************************************/ diff --git a/src/devices/adsl/nm-device-adsl.c b/src/devices/adsl/nm-device-adsl.c index 3261562399..f94ee49af8 100644 --- a/src/devices/adsl/nm-device-adsl.c +++ b/src/devices/adsl/nm-device-adsl.c @@ -23,8 +23,8 @@ #include "nm-setting-adsl.h" #include "nm-utils.h" +#define _NMLOG_DEVICE_TYPE NMDeviceAdsl #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceAdsl); /*****************************************************************************/ @@ -645,20 +645,20 @@ nm_device_adsl_new(const char *udi, const char *iface, const char *driver, int a g_return_val_if_fail(udi != NULL, NULL); g_return_val_if_fail(atm_index >= 0, NULL); - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_ADSL, - NM_DEVICE_UDI, - udi, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_DRIVER, - driver, - NM_DEVICE_ADSL_ATM_INDEX, - atm_index, - NM_DEVICE_TYPE_DESC, - "ADSL", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_ADSL, - NULL); + return g_object_new(NM_TYPE_DEVICE_ADSL, + NM_DEVICE_UDI, + udi, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_DRIVER, + driver, + NM_DEVICE_ADSL_ATM_INDEX, + atm_index, + NM_DEVICE_TYPE_DESC, + "ADSL", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_ADSL, + NULL); } static void diff --git a/src/devices/bluetooth/nm-bluez-manager.c b/src/devices/bluetooth/nm-bluez-manager.c index df0bcbbb62..32c316d607 100644 --- a/src/devices/bluetooth/nm-bluez-manager.c +++ b/src/devices/bluetooth/nm-bluez-manager.c @@ -194,7 +194,7 @@ NM_DEVICE_FACTORY_DECLARE_TYPES(NM_DEVICE_FACTORY_DECLARE_LINK_TYPES( G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { - return (NMDeviceFactory *) g_object_new(NM_TYPE_BLUEZ_MANAGER, NULL); + return g_object_new(NM_TYPE_BLUEZ_MANAGER, NULL); } /*****************************************************************************/ diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c index c31961df92..ca2a59731d 100644 --- a/src/devices/bluetooth/nm-device-bt.c +++ b/src/devices/bluetooth/nm-device-bt.c @@ -30,8 +30,8 @@ #include "devices/wwan/nm-modem-manager.h" #include "devices/wwan/nm-modem.h" +#define _NMLOG_DEVICE_TYPE NMDeviceBt #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceBt); /*****************************************************************************/ diff --git a/src/devices/nm-device-6lowpan.c b/src/devices/nm-device-6lowpan.c index bf63fb7337..cf2be8620c 100644 --- a/src/devices/nm-device-6lowpan.c +++ b/src/devices/nm-device-6lowpan.c @@ -14,8 +14,8 @@ #include "nm-setting-6lowpan.h" #include "nm-utils.h" +#define _NMLOG_DEVICE_TYPE NMDevice6Lowpan #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDevice6Lowpan); /*****************************************************************************/ @@ -285,16 +285,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_6LOWPAN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "6LoWPAN", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_6LOWPAN, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_6LOWPAN, - NULL); + return g_object_new(NM_TYPE_DEVICE_6LOWPAN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "6LoWPAN", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_6LOWPAN, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_6LOWPAN, + NULL); } static const char * diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c index 3ef14a9e76..27fa720967 100644 --- a/src/devices/nm-device-bond.c +++ b/src/devices/nm-device-bond.c @@ -17,8 +17,8 @@ #include "nm-core-internal.h" #include "nm-ip4-config.h" +#define _NMLOG_DEVICE_TYPE NMDeviceBond #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceBond); /*****************************************************************************/ @@ -149,6 +149,7 @@ ignore_option(NMSettingBond *s_bond, const char *option, const char *value) static void update_connection(NMDevice *device, NMConnection *connection) { + NMDeviceBond * self = NM_DEVICE_BOND(device); NMSettingBond *s_bond = nm_connection_get_setting_bond(connection); int ifindex = nm_device_get_ifindex(device); NMBondMode mode = NM_BOND_MODE_UNKNOWN; @@ -197,7 +198,10 @@ update_connection(NMDevice *device, NMConnection *connection) } } - nm_setting_bond_add_option(s_bond, option, value); + if (!_nm_setting_bond_validate_option(option, value, NULL)) + _LOGT(LOGD_BOND, "cannot set invalid bond option '%s' = '%s'", option, value); + else + nm_setting_bond_add_option(s_bond, option, value); } } } @@ -264,7 +268,7 @@ set_arp_targets(NMDevice *device, const char *cur_arp_ip_target, const char *new if (cur_len == 0 && new_len == 0) return; - if (_nm_utils_strv_equal((char **) cur_strv, (char **) new_strv)) + if (nm_utils_strv_equal(cur_strv, new_strv)) return; for (i = 0; i < cur_len; i++) @@ -616,18 +620,18 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_BOND, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_DRIVER, - "bonding", - NM_DEVICE_TYPE_DESC, - "Bond", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_BOND, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_BOND, - NULL); + return g_object_new(NM_TYPE_DEVICE_BOND, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_DRIVER, + "bonding", + NM_DEVICE_TYPE_DESC, + "Bond", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_BOND, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_BOND, + NULL); } NM_DEVICE_FACTORY_DEFINE_INTERNAL( diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index 48dcec1b1d..64a530a26b 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -15,8 +15,8 @@ #include "nm-device-factory.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceBridge #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceBridge); /*****************************************************************************/ @@ -169,7 +169,7 @@ static void to_sysfs_group_address_sys(const char *group_address, NMEtherAddr *out_addr) { if (group_address == NULL) { - *out_addr = (NMEtherAddr) NM_ETHER_ADDR_INIT(NM_BRIDGE_GROUP_ADDRESS_DEF_BIN); + *out_addr = NM_ETHER_ADDR_INIT(NM_BRIDGE_GROUP_ADDRESS_DEF_BIN); return; } if (!nm_utils_hwaddr_aton(group_address, out_addr, ETH_ALEN)) @@ -1197,18 +1197,18 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_BRIDGE, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_DRIVER, - "bridge", - NM_DEVICE_TYPE_DESC, - "Bridge", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_BRIDGE, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_BRIDGE, - NULL); + return g_object_new(NM_TYPE_DEVICE_BRIDGE, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_DRIVER, + "bridge", + NM_DEVICE_TYPE_DESC, + "Bridge", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_BRIDGE, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_BRIDGE, + NULL); } static gboolean diff --git a/src/devices/nm-device-dummy.c b/src/devices/nm-device-dummy.c index 4f6b8cc234..1b34112b32 100644 --- a/src/devices/nm-device-dummy.c +++ b/src/devices/nm-device-dummy.c @@ -18,8 +18,8 @@ #include "nm-setting-dummy.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceDummy #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceDummy); /*****************************************************************************/ @@ -162,16 +162,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_DUMMY, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Dummy", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_DUMMY, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_DUMMY, - NULL); + return g_object_new(NM_TYPE_DEVICE_DUMMY, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Dummy", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_DUMMY, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_DUMMY, + NULL); } NM_DEVICE_FACTORY_DEFINE_INTERNAL( diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 2569c4262c..9f149c73db 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -34,9 +34,10 @@ #include "nm-core-internal.h" #include "NetworkManagerUtils.h" #include "nm-udev-aux/nm-udev-utils.h" +#include "nm-device-veth.h" +#define _NMLOG_DEVICE_TYPE NMDeviceEthernet #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceEthernet); /*****************************************************************************/ @@ -347,7 +348,9 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * ->check_connection_compatible(device, connection, error)) return FALSE; - if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME)) { + if (nm_connection_is_type(connection, NM_SETTING_PPPOE_SETTING_NAME) + || (nm_connection_is_type(connection, NM_SETTING_VETH_SETTING_NAME) + && NM_IS_DEVICE_VETH(device))) { s_wired = nm_connection_get_setting_wired(connection); } else { s_wired = @@ -1360,6 +1363,9 @@ wake_on_lan_enable(NMDevice *device) s_wired = nm_device_get_applied_setting(device, NM_TYPE_SETTING_WIRED); + if (NM_IS_DEVICE_VETH(device)) + return FALSE; + if (s_wired) { wol = nm_setting_wired_get_wake_on_lan(s_wired); password = nm_setting_wired_get_wake_on_lan_password(s_wired); @@ -1493,6 +1499,12 @@ act_stage3_ip_config_start(NMDevice * device, { NMSettingConnection *s_con; const char * connection_type; + int ifindex; + + ifindex = nm_device_get_ifindex(device); + + if (ifindex <= 0) + return NM_ACT_STAGE_RETURN_FAILURE; if (addr_family == AF_INET) { s_con = nm_device_get_applied_setting(device, NM_TYPE_SETTING_CONNECTION); @@ -1803,7 +1815,7 @@ static void link_changed(NMDevice *device, const NMPlatformLink *pllink) { NM_DEVICE_CLASS(nm_device_ethernet_parent_class)->link_changed(device, pllink); - if (pllink->initialized) + if (!NM_IS_DEVICE_VETH(device) && pllink->initialized) _update_s390_subchannels((NMDeviceEthernet *) device); } @@ -2021,16 +2033,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_ETHERNET, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Ethernet", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_ETHERNET, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_ETHERNET, - NULL); + return g_object_new(NM_TYPE_DEVICE_ETHERNET, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Ethernet", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_ETHERNET, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_ETHERNET, + NULL); } static gboolean diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c index a238ce1bcd..ba33404a2d 100644 --- a/src/devices/nm-device-factory.c +++ b/src/devices/nm-device-factory.c @@ -301,7 +301,7 @@ _load_internal_factory(GType factory_gtype, { gs_unref_object NMDeviceFactory *factory = NULL; - factory = (NMDeviceFactory *) g_object_new(factory_gtype, NULL); + factory = g_object_new(factory_gtype, NULL); _add_factory(factory, NULL, callback, user_data); } diff --git a/src/devices/nm-device-generic.c b/src/devices/nm-device-generic.c index ccd56366ce..17e34d1254 100644 --- a/src/devices/nm-device-generic.c +++ b/src/devices/nm-device-generic.c @@ -165,16 +165,16 @@ nm_device_generic_new(const NMPlatformLink *plink, gboolean nm_plugin_missing) { g_return_val_if_fail(plink != NULL, NULL); - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_GENERIC, - NM_DEVICE_IFACE, - plink->name, - NM_DEVICE_TYPE_DESC, - "Generic", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_GENERIC, - NM_DEVICE_NM_PLUGIN_MISSING, - nm_plugin_missing, - NULL); + return g_object_new(NM_TYPE_DEVICE_GENERIC, + NM_DEVICE_IFACE, + plink->name, + NM_DEVICE_TYPE_DESC, + "Generic", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_GENERIC, + NM_DEVICE_NM_PLUGIN_MISSING, + nm_plugin_missing, + NULL); } static void diff --git a/src/devices/nm-device-infiniband.c b/src/devices/nm-device-infiniband.c index bae5db6481..820b885bf0 100644 --- a/src/devices/nm-device-infiniband.c +++ b/src/devices/nm-device-infiniband.c @@ -443,19 +443,19 @@ create_device(NMDeviceFactory * factory, && nm_setting_infiniband_get_mac_address(s_infiniband)); } - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_INFINIBAND, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "InfiniBand", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_INFINIBAND, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_INFINIBAND, - /* NOTE: Partition should probably be a different link type! */ - NM_DEVICE_INFINIBAND_IS_PARTITION, - is_partition, - NULL); + return g_object_new(NM_TYPE_DEVICE_INFINIBAND, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "InfiniBand", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_INFINIBAND, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_INFINIBAND, + /* NOTE: Partition should probably be a different link type! */ + NM_DEVICE_INFINIBAND_IS_PARTITION, + is_partition, + NULL); } static const char * diff --git a/src/devices/nm-device-ip-tunnel.c b/src/devices/nm-device-ip-tunnel.c index e01cc7ff74..dad64cd4aa 100644 --- a/src/devices/nm-device-ip-tunnel.c +++ b/src/devices/nm-device-ip-tunnel.c @@ -22,8 +22,8 @@ #include "nm-act-request.h" #include "nm-ip4-config.h" +#define _NMLOG_DEVICE_TYPE NMDeviceIPTunnel #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceIPTunnel); /*****************************************************************************/ @@ -1233,18 +1233,18 @@ create_device(NMDeviceFactory * factory, if (mode == NM_IP_TUNNEL_MODE_UNKNOWN || link_type == NM_LINK_TYPE_UNKNOWN) return NULL; - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_IP_TUNNEL, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "IPTunnel", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_IP_TUNNEL, - NM_DEVICE_LINK_TYPE, - link_type, - NM_DEVICE_IP_TUNNEL_MODE, - mode, - NULL); + return g_object_new(NM_TYPE_DEVICE_IP_TUNNEL, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "IPTunnel", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_IP_TUNNEL, + NM_DEVICE_LINK_TYPE, + link_type, + NM_DEVICE_IP_TUNNEL_MODE, + mode, + NULL); } static const char * diff --git a/src/devices/nm-device-logging.h b/src/devices/nm-device-logging.h index d12910207e..76d758e0f1 100644 --- a/src/devices/nm-device-logging.h +++ b/src/devices/nm-device-logging.h @@ -8,36 +8,45 @@ #include "nm-device.h" -#define _LOG_DECLARE_SELF(t) \ - _nm_unused static inline NMDevice *_nm_device_log_self_to_device(t *self) \ - { \ - return (NMDevice *) self; \ - } +#if !_NM_CC_SUPPORT_GENERIC + #define _NM_DEVICE_CAST(self) ((NMDevice *) (self)) +#elif !defined(_NMLOG_DEVICE_TYPE) + #define _NM_DEVICE_CAST(self) \ + _Generic((self), NMDevice * \ + : ((NMDevice *) (self)), NMDevice *const \ + : ((NMDevice *) (self))) +#else + #define _NM_DEVICE_CAST(self) \ + _Generic((self), \ + _NMLOG_DEVICE_TYPE * : ((NMDevice *) (self)), \ + _NMLOG_DEVICE_TYPE * const: ((NMDevice *) (self)), \ + NMDevice * : ((NMDevice *) (self)), \ + NMDevice * const: ((NMDevice *) (self))) +#endif #undef _NMLOG_ENABLED #define _NMLOG_ENABLED(level, domain) (nm_logging_enabled((level), (domain))) -#define _NMLOG(level, domain, ...) \ - G_STMT_START \ - { \ - const NMLogLevel _level = (level); \ - const NMLogDomain _domain = (domain); \ - \ - if (nm_logging_enabled(_level, _domain)) { \ - typeof(*self) *const _self = (self); \ - const char *const _ifname = \ - _nm_device_get_iface(_nm_device_log_self_to_device(_self)); \ - \ - nm_log_obj(_level, \ - _domain, \ - _ifname, \ - NULL, \ - _self, \ - "device", \ - "%s%s%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ - NM_PRINT_FMT_QUOTED(_ifname, "(", _ifname, ")", "[null]") \ - _NM_UTILS_MACRO_REST(__VA_ARGS__)); \ - } \ - } \ +#define _NMLOG(level, domain, ...) \ + G_STMT_START \ + { \ + const NMLogLevel _level = (level); \ + const NMLogDomain _domain = (domain); \ + \ + if (nm_logging_enabled(_level, _domain)) { \ + typeof(*self) *const _self = (self); \ + const char *const _ifname = _nm_device_get_iface(_NM_DEVICE_CAST(_self)); \ + \ + nm_log_obj(_level, \ + _domain, \ + _ifname, \ + NULL, \ + _self, \ + "device", \ + "%s%s%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ + NM_PRINT_FMT_QUOTED(_ifname, "(", _ifname, ")", "[null]") \ + _NM_UTILS_MACRO_REST(__VA_ARGS__)); \ + } \ + } \ G_STMT_END #endif /* __NETWORKMANAGER_DEVICE_LOGGING_H__ */ diff --git a/src/devices/nm-device-macsec.c b/src/devices/nm-device-macsec.c index 7d738b4243..2be87b3459 100644 --- a/src/devices/nm-device-macsec.c +++ b/src/devices/nm-device-macsec.c @@ -18,8 +18,8 @@ #include "supplicant/nm-supplicant-interface.h" #include "supplicant/nm-supplicant-config.h" +#define _NMLOG_DEVICE_TYPE NMDeviceMacsec #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceMacsec); /*****************************************************************************/ @@ -1023,16 +1023,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_MACSEC, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Macsec", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_MACSEC, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_MACSEC, - NULL); + return g_object_new(NM_TYPE_DEVICE_MACSEC, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Macsec", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_MACSEC, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_MACSEC, + NULL); } static const char * diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c index d9e71c8ca8..5017e81ed2 100644 --- a/src/devices/nm-device-macvlan.c +++ b/src/devices/nm-device-macvlan.c @@ -21,8 +21,8 @@ #include "nm-ip4-config.h" #include "nm-utils.h" +#define _NMLOG_DEVICE_TYPE NMDeviceMacvlan #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceMacvlan); /*****************************************************************************/ @@ -598,18 +598,18 @@ create_device(NMDeviceFactory * factory, link_type = tap ? NM_LINK_TYPE_MACVTAP : NM_LINK_TYPE_MACVLAN; - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_MACVLAN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Macvlan", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_MACVLAN, - NM_DEVICE_LINK_TYPE, - link_type, - NM_DEVICE_MACVLAN_TAP, - tap, - NULL); + return g_object_new(NM_TYPE_DEVICE_MACVLAN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Macvlan", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_MACVLAN, + NM_DEVICE_LINK_TYPE, + link_type, + NM_DEVICE_MACVLAN_TAP, + tap, + NULL); } static const char * diff --git a/src/devices/nm-device-ppp.c b/src/devices/nm-device-ppp.c index 82861bdafc..0d1218f77a 100644 --- a/src/devices/nm-device-ppp.c +++ b/src/devices/nm-device-ppp.c @@ -18,8 +18,8 @@ #include "ppp/nm-ppp-manager-call.h" #include "ppp/nm-ppp-status.h" +#define _NMLOG_DEVICE_TYPE NMDevicePpp #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDevicePpp); /*****************************************************************************/ @@ -316,16 +316,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_PPP, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Ppp", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_PPP, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_PPP, - NULL); + return g_object_new(NM_TYPE_DEVICE_PPP, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Ppp", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_PPP, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_PPP, + NULL); } static gboolean diff --git a/src/devices/nm-device-private.h b/src/devices/nm-device-private.h index 5f8eff183b..dbf5105a08 100644 --- a/src/devices/nm-device-private.h +++ b/src/devices/nm-device-private.h @@ -54,9 +54,7 @@ gboolean nm_device_set_ip_iface(NMDevice *self, const char *iface); void nm_device_activate_schedule_stage3_ip_config_start(NMDevice *device); -gboolean nm_device_activate_stage3_ip4_start(NMDevice *self); - -gboolean nm_device_activate_stage3_ip6_start(NMDevice *self); +gboolean nm_device_activate_stage3_ip_start(NMDevice *self, int addr_family); gboolean nm_device_bring_up(NMDevice *self, gboolean wait, gboolean *no_firmware); diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c index 9480525502..5125a67685 100644 --- a/src/devices/nm-device-tun.c +++ b/src/devices/nm-device-tun.c @@ -19,8 +19,8 @@ #include "nm-setting-tun.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceTun #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceTun); /*****************************************************************************/ @@ -550,16 +550,16 @@ create_device(NMDeviceFactory * factory, NM_SETTING_TUN_SETTING_NAME), NULL); - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_TUN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Tun", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_TUN, - NM_DEVICE_LINK_TYPE, - (guint) NM_LINK_TYPE_TUN, - NULL); + return g_object_new(NM_TYPE_DEVICE_TUN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Tun", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_TUN, + NM_DEVICE_LINK_TYPE, + (guint) NM_LINK_TYPE_TUN, + NULL); } NM_DEVICE_FACTORY_DEFINE_INTERNAL( diff --git a/src/devices/nm-device-veth.c b/src/devices/nm-device-veth.c index f61bc99f2a..54400c3c49 100644 --- a/src/devices/nm-device-veth.c +++ b/src/devices/nm-device-veth.c @@ -7,14 +7,16 @@ #include <stdlib.h> +#include "nm-core-internal.h" #include "nm-device-veth.h" #include "nm-device-private.h" #include "nm-manager.h" #include "platform/nm-platform.h" #include "nm-device-factory.h" +#include "nm-setting-veth.h" +#define _NMLOG_DEVICE_TYPE NMDeviceVeth #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceVeth); /*****************************************************************************/ @@ -42,9 +44,10 @@ update_properties(NMDevice *device) ifindex = nm_device_get_ifindex(device); - if (!nm_platform_link_veth_get_properties(nm_device_get_platform(device), - ifindex, - &peer_ifindex)) + if (ifindex <= 0 + || !nm_platform_link_veth_get_properties(nm_device_get_platform(device), + ifindex, + &peer_ifindex)) peer_ifindex = 0; nm_device_parent_set_ifindex(device, peer_ifindex); @@ -71,6 +74,81 @@ link_changed(NMDevice *device, const NMPlatformLink *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); + NMSettingVeth *s_veth; + int r; + + s_veth = _nm_connection_get_setting(connection, NM_TYPE_SETTING_VETH); + if (!s_veth) { + g_set_error(error, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_CREATION_FAILED, + "Profile %s (%s) is not a suitable veth profile", + nm_connection_get_id(connection), + nm_connection_get_uuid(connection)); + return FALSE; + } + + r = nm_platform_link_veth_add(nm_device_get_platform(device), + iface, + nm_setting_veth_get_peer(s_veth), + out_plink); + if (r < 0) { + g_set_error(error, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_CREATION_FAILED, + "Failed to create veth interface '%s' for '%s': %s", + iface, + nm_connection_get_id(connection), + nm_strerror(r)); + return FALSE; + } + return TRUE; +} + +/*****************************************************************************/ + +static NMDeviceCapabilities +get_generic_capabilities(NMDevice *device) +{ + return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_IS_SOFTWARE; +} + +static gboolean +complete_connection(NMDevice * device, + NMConnection * connection, + const char * specific_object, + NMConnection *const *existing_connections, + GError ** error) +{ + NMSettingVeth *s_veth; + + nm_utils_complete_generic(nm_device_get_platform(device), + connection, + NM_SETTING_VETH_SETTING_NAME, + existing_connections, + NULL, + _("Veth connection"), + "veth", + NULL, + TRUE); + + s_veth = _nm_connection_get_setting(connection, NM_TYPE_SETTING_VETH); + if (!s_veth) { + s_veth = (NMSettingVeth *) nm_setting_veth_new(); + nm_connection_add_setting(connection, NM_SETTING(s_veth)); + } + + return TRUE; +} + /*****************************************************************************/ static void @@ -136,6 +214,9 @@ nm_device_veth_class_init(NMDeviceVethClass *klass) device_class->can_unmanaged_external_down = can_unmanaged_external_down; device_class->link_changed = link_changed; device_class->parent_changed_notify = parent_changed_notify; + device_class->create_and_realize = create_and_realize; + device_class->complete_connection = complete_connection; + device_class->get_generic_capabilities = get_generic_capabilities; obj_properties[PROP_PEER] = g_param_spec_string(NM_DEVICE_VETH_PEER, "", @@ -159,20 +240,22 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_VETH, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Veth", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_VETH, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_VETH, - NULL); + return g_object_new(NM_TYPE_DEVICE_VETH, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Veth", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_VETH, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_VETH, + NULL); } -NM_DEVICE_FACTORY_DEFINE_INTERNAL(VETH, - Veth, - veth, - NM_DEVICE_FACTORY_DECLARE_LINK_TYPES(NM_LINK_TYPE_VETH), - factory_class->create_device = create_device;); +NM_DEVICE_FACTORY_DEFINE_INTERNAL( + VETH, + Veth, + veth, + NM_DEVICE_FACTORY_DECLARE_LINK_TYPES(NM_LINK_TYPE_VETH) + NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES(NM_SETTING_VETH_SETTING_NAME), + factory_class->create_device = create_device;); diff --git a/src/devices/nm-device-vlan.c b/src/devices/nm-device-vlan.c index bb6fdc05de..d3b9d54930 100644 --- a/src/devices/nm-device-vlan.c +++ b/src/devices/nm-device-vlan.c @@ -22,8 +22,8 @@ #include "nm-core-internal.h" #include "platform/nmp-object.h" +#define _NMLOG_DEVICE_TYPE NMDeviceVlan #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceVlan); /*****************************************************************************/ @@ -117,7 +117,7 @@ parent_hwaddr_maybe_changed(NMDevice *parent, GParamSpec *pspec, gpointer user_d */ s_ip6 = nm_connection_get_setting_ip6_config(connection); if (s_ip6) - nm_device_reactivate_ip6_config(device, s_ip6, s_ip6); + nm_device_reactivate_ip_config(device, AF_INET6, s_ip6, s_ip6); } } @@ -614,18 +614,18 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_VLAN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_DRIVER, - "8021q", - NM_DEVICE_TYPE_DESC, - "VLAN", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_VLAN, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_VLAN, - NULL); + return g_object_new(NM_TYPE_DEVICE_VLAN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_DRIVER, + "8021q", + NM_DEVICE_TYPE_DESC, + "VLAN", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_VLAN, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_VLAN, + NULL); } static const char * diff --git a/src/devices/nm-device-vrf.c b/src/devices/nm-device-vrf.c index ae0ecc60aa..9c3927e146 100644 --- a/src/devices/nm-device-vrf.c +++ b/src/devices/nm-device-vrf.c @@ -12,8 +12,8 @@ #include "platform/nm-platform.h" #include "settings/nm-settings.h" +#define _NMLOG_DEVICE_TYPE NMDeviceVrf #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceVrf); /*****************************************************************************/ diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c index 083f29c626..cc42ffe4f9 100644 --- a/src/devices/nm-device-vxlan.c +++ b/src/devices/nm-device-vxlan.c @@ -19,8 +19,8 @@ #include "nm-ip4-config.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceVxlan #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceVxlan); /*****************************************************************************/ @@ -162,11 +162,10 @@ create_and_realize(NMDevice * device, NMPlatformLnkVxlan props = {}; NMSettingVxlan * s_vxlan; const char * str; - int ret; int r; s_vxlan = nm_connection_get_setting_vxlan(connection); - g_assert(s_vxlan); + g_return_val_if_fail(s_vxlan, FALSE); if (parent) props.parent_ifindex = nm_device_get_ifindex(parent); @@ -175,19 +174,17 @@ create_and_realize(NMDevice * device, str = nm_setting_vxlan_get_local(s_vxlan); if (str) { - ret = inet_pton(AF_INET, str, &props.local); - if (ret != 1) - ret = inet_pton(AF_INET6, str, &props.local6); - if (ret != 1) + if (!nm_utils_parse_inaddr_bin(AF_INET, str, NULL, &props.local) + && !nm_utils_parse_inaddr_bin(AF_INET6, str, NULL, &props.local6)) return FALSE; } str = nm_setting_vxlan_get_remote(s_vxlan); - ret = inet_pton(AF_INET, str, &props.group); - if (ret != 1) - ret = inet_pton(AF_INET6, str, &props.group6); - if (ret != 1) - return FALSE; + if (str) { + if (!nm_utils_parse_inaddr_bin(AF_INET, str, NULL, &props.group) + && !nm_utils_parse_inaddr_bin(AF_INET6, str, NULL, &props.group6)) + return FALSE; + } props.tos = nm_setting_vxlan_get_tos(s_vxlan); props.ttl = nm_setting_vxlan_get_ttl(s_vxlan); @@ -218,21 +215,26 @@ create_and_realize(NMDevice * device, } static gboolean -address_matches(const char *str, in_addr_t addr4, struct in6_addr *addr6) +address_matches(const char *candidate, in_addr_t addr4, struct in6_addr *addr6) { - in_addr_t new_addr4 = 0; - struct in6_addr new_addr6 = {}; + NMIPAddr candidate_addr; + int addr_family; - if (!str) { - return addr4 == 0 && !memcmp(addr6, &in6addr_any, sizeof(in6addr_any)); - } + if (!candidate) + return addr4 == 0u && IN6_IS_ADDR_UNSPECIFIED(addr6); - if (inet_pton(AF_INET, str, &new_addr4) == 1) - return new_addr4 == addr4; - else if (inet_pton(AF_INET6, str, &new_addr6) == 1) - return !memcmp(&new_addr6, addr6, sizeof(new_addr6)); - else + if (!nm_utils_parse_inaddr_bin(AF_UNSPEC, candidate, &addr_family, &candidate_addr)) + return FALSE; + + if (!nm_ip_addr_equal(addr_family, + &candidate_addr, + NM_IS_IPv4(addr_family) ? (gpointer) &addr4 : addr6)) return FALSE; + + if (NM_IS_IPv4(addr_family)) + return IN6_IS_ADDR_UNSPECIFIED(addr6); + else + return addr4 == 0u; } static gboolean @@ -757,16 +759,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_VXLAN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "Vxlan", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_VXLAN, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_VXLAN, - NULL); + return g_object_new(NM_TYPE_DEVICE_VXLAN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "Vxlan", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_VXLAN, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_VXLAN, + NULL); } static const char * diff --git a/src/devices/nm-device-wireguard.c b/src/devices/nm-device-wireguard.c index 9bd23e6564..8327412eb8 100644 --- a/src/devices/nm-device-wireguard.c +++ b/src/devices/nm-device-wireguard.c @@ -22,8 +22,8 @@ #include "nm-act-request.h" #include "dns/nm-dns-manager.h" +#define _NMLOG_DEVICE_TYPE NMDeviceWireGuard #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceWireGuard); /*****************************************************************************/ @@ -2005,16 +2005,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_WIREGUARD, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "WireGuard", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_WIREGUARD, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_WIREGUARD, - NULL); + return g_object_new(NM_TYPE_DEVICE_WIREGUARD, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "WireGuard", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_WIREGUARD, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_WIREGUARD, + NULL); } NM_DEVICE_FACTORY_DEFINE_INTERNAL( diff --git a/src/devices/nm-device-wpan.c b/src/devices/nm-device-wpan.c index 195603dcde..f5c7e79fe9 100644 --- a/src/devices/nm-device-wpan.c +++ b/src/devices/nm-device-wpan.c @@ -20,8 +20,8 @@ #include "nm-setting-wpan.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceWpan #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceWpan); /*****************************************************************************/ @@ -236,16 +236,16 @@ create_device(NMDeviceFactory * factory, NMConnection * connection, gboolean * out_ignore) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_WPAN, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "WPAN", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_WPAN, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_WPAN, - NULL); + return g_object_new(NM_TYPE_DEVICE_WPAN, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "WPAN", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_WPAN, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_WPAN, + NULL); } NM_DEVICE_FACTORY_DEFINE_INTERNAL( diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 0be05f23d7..ec01d3af6b 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -52,6 +52,7 @@ #include "settings/nm-settings-connection.h" #include "settings/nm-settings.h" #include "nm-setting-ethtool.h" +#include "nm-setting-ovs-external-ids.h" #include "nm-setting-user.h" #include "nm-auth-utils.h" #include "nm-keep-alive.h" @@ -74,7 +75,6 @@ #include "nm-device-wireguard.h" #include "nm-device-logging.h" -_LOG_DECLARE_SELF(NMDevice); /*****************************************************************************/ @@ -207,6 +207,23 @@ typedef struct { NMEthtoolRingState * ring; } EthtoolState; +typedef enum { + RESOLVER_WAIT_ADDRESS = 0, + RESOLVER_IN_PROGRESS, + RESOLVER_DONE, +} ResolverState; + +typedef struct { + ResolverState state; + GResolver * resolver; + GInetAddress *address; + GCancellable *cancellable; + char * hostname; + NMDevice * device; + guint timeout_id; /* Used when waiting for the address */ + int addr_family; +} HostnameResolver; + /*****************************************************************************/ enum { @@ -219,6 +236,7 @@ enum { REMOVED, RECHECK_AUTO_ACTIVATE, RECHECK_ASSUME, + DNS_LOOKUP_DONE, LAST_SIGNAL, }; static guint signals[LAST_SIGNAL] = {0}; @@ -326,6 +344,14 @@ typedef struct _NMDevicePrivate { int auth_retries; union { + struct { + HostnameResolver *hostname_resolver_6; + HostnameResolver *hostname_resolver_4; + }; + HostnameResolver *hostname_resolver_x[2]; + }; + + union { const guint8 hw_addr_len; /* read-only */ guint8 hw_addr_len_; }; @@ -357,6 +383,8 @@ typedef struct _NMDevicePrivate { bool assume_state_guess_assume : 1; char *assume_state_connection_uuid; + guint64 udi_id; + GHashTable *available_connections; char * hw_addr; char * hw_addr_perm; @@ -695,6 +723,8 @@ static guint32 default_route_metric_penalty_get(NMDevice *self, int addr_family) static guint _prop_get_ipv4_dad_timeout(NMDevice *self); +static NMIP6Config *dad6_get_pending_addresses(NMDevice *self); + static void _carrier_wait_check_queued_act_request(NMDevice *self); static gint64 _get_carrier_wait_ms(NMDevice *self); @@ -726,24 +756,8 @@ static void concheck_update_state(NMDevice * self, NMConnectivityState state, gboolean is_periodic); -static void activate_stage4_ip_config_timeout_4(NMDevice *self); -static void activate_stage4_ip_config_timeout_6(NMDevice *self); - -static void (*const activate_stage4_ip_config_timeout_x[2])(NMDevice *self) = { - activate_stage4_ip_config_timeout_6, - activate_stage4_ip_config_timeout_4, -}; - static void sriov_op_cb(GError *error, gpointer user_data); -static void activate_stage5_ip_config_result_4(NMDevice *self); -static void activate_stage5_ip_config_result_6(NMDevice *self); - -static void (*const activate_stage5_ip_config_result_x[2])(NMDevice *self) = { - activate_stage5_ip_config_result_6, - activate_stage5_ip_config_result_4, -}; - /*****************************************************************************/ static NM_UTILS_LOOKUP_STR_DEFINE( @@ -879,6 +893,22 @@ static NM_UTILS_LOOKUP_STR_DEFINE(mtu_source_to_str, /*****************************************************************************/ +static void +_hostname_resolver_free(HostnameResolver *resolver) +{ + if (!resolver) + return; + + nm_clear_g_source(&resolver->timeout_id); + nm_clear_g_cancellable(&resolver->cancellable); + nm_g_object_unref(resolver->resolver); + nm_g_object_unref(resolver->address); + g_free(resolver->hostname); + nm_g_slice_free(resolver); +} + +/*****************************************************************************/ + static NMSettingIP6ConfigPrivacy _ip6_privacy_clamp(NMSettingIP6ConfigPrivacy use_tempaddr) { @@ -1294,7 +1324,7 @@ _prop_get_ipvx_route_table(NMDevice *self, int addr_family) /* the route table setting affects how we sync routes. We shall * not change it while the device is active, hence, cache it. */ - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { if (priv->v4_route_table_initialized) return priv->v4_route_table; } else { @@ -1312,7 +1342,7 @@ _prop_get_ipvx_route_table(NMDevice *self, int addr_family) gint64 v; v = nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, - addr_family == AF_INET + NM_IS_IPv4(addr_family) ? NM_CON_DEFAULT("ipv4.route-table") : NM_CON_DEFAULT("ipv6.route-table"), self, @@ -1348,7 +1378,7 @@ _prop_get_ipvx_route_table(NMDevice *self, int addr_family) if (klass->coerce_route_table) route_table = klass->coerce_route_table(self, addr_family, route_table, is_user_config); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { priv->v4_route_table_initialized = TRUE; priv->v4_route_table = route_table; } else { @@ -1358,7 +1388,7 @@ _prop_get_ipvx_route_table(NMDevice *self, int addr_family) _LOGT(LOGD_DEVICE, "ipv%c.route-table = %u%s", - addr_family == AF_INET ? '4' : '6', + nm_utils_addr_family_to_char(addr_family), (guint)(route_table ?: RT_TABLE_MAIN), route_table != 0u ? "" : " (policy routing not enabled)"); @@ -1437,7 +1467,7 @@ _prop_get_ipvx_dhcp_timeout(NMDevice *self, int addr_family) goto out; timeout = nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, - addr_family == AF_INET + NM_IS_IPv4(addr_family) ? NM_CON_DEFAULT("ipv4.dhcp-timeout") : NM_CON_DEFAULT("ipv6.dhcp-timeout"), self, @@ -1480,6 +1510,7 @@ _prop_get_ipvx_dhcp_iaid(NMDevice * self, NMConnection *connection, gboolean * out_is_explicit) { + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMSettingIPConfig *s_ip; const char * iaid_str; gs_free char * iaid_str_free = NULL; @@ -1493,8 +1524,7 @@ _prop_get_ipvx_dhcp_iaid(NMDevice * self, if (!iaid_str) { iaid_str_free = nm_config_data_get_connection_default( NM_CONFIG_GET_DATA, - addr_family == AF_INET ? NM_CON_DEFAULT("ipv4.dhcp-iaid") - : NM_CON_DEFAULT("ipv6.dhcp-iaid"), + IS_IPv4 ? NM_CON_DEFAULT("ipv4.dhcp-iaid") : NM_CON_DEFAULT("ipv6.dhcp-iaid"), self); iaid_str = iaid_str_free; if (!iaid_str) { @@ -1578,8 +1608,7 @@ _prop_get_ipvx_dhcp_iaid(NMDevice * self, out_fail: nm_assert(fail_reason); - _LOGW(addr_family == AF_INET ? (LOGD_DEVICE | LOGD_DHCP4 | LOGD_IP4) - : (LOGD_DEVICE | LOGD_DHCP6 | LOGD_IP6), + _LOGW(LOGD_DEVICE | LOGD_DHCPX(IS_IPv4) | LOGD_IPX(IS_IPv4), "ipv%c.dhcp-iaid: failure to generate IAID: %s. Using interface-name based IAID", nm_utils_addr_family_to_char(addr_family), fail_reason); @@ -1587,8 +1616,7 @@ out_fail: iface = nm_device_get_ip_iface(self); iaid = nm_utils_create_dhcp_iaid(TRUE, (const guint8 *) iface, strlen(iface)); out_good: - _LOGD(addr_family == AF_INET ? (LOGD_DEVICE | LOGD_DHCP4 | LOGD_IP4) - : (LOGD_DEVICE | LOGD_DHCP6 | LOGD_IP6), + _LOGD(LOGD_DEVICE | LOGD_DHCPX(IS_IPv4) | LOGD_IPX(IS_IPv4), "ipv%c.dhcp-iaid: using %u (0x%08x) IAID (str: '%s', explicit %d)", nm_utils_addr_family_to_char(addr_family), iaid, @@ -1622,8 +1650,8 @@ _prop_get_ipvx_dhcp_hostname_flags(NMDevice *self, int addr_family) flags = nm_config_data_get_connection_default_int64( NM_CONFIG_GET_DATA, - addr_family == AF_INET ? NM_CON_DEFAULT("ipv4.dhcp-hostname-flags") - : NM_CON_DEFAULT("ipv6.dhcp-hostname-flags"), + NM_IS_IPv4(addr_family) ? NM_CON_DEFAULT("ipv4.dhcp-hostname-flags") + : NM_CON_DEFAULT("ipv6.dhcp-hostname-flags"), self, 0, NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS, @@ -1631,9 +1659,9 @@ _prop_get_ipvx_dhcp_hostname_flags(NMDevice *self, int addr_family) if (!_nm_utils_validate_dhcp_hostname_flags(flags, addr_family, &error)) { _LOGW(LOGD_DEVICE, - "invalid global default value 0x%x for ipv%d.%s: %s", + "invalid global default value 0x%x for ipv%c.%s: %s", (guint) flags, - addr_family == AF_INET ? 4 : 6, + nm_utils_addr_family_to_char(addr_family), NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS, error->message); flags = NM_DHCP_HOSTNAME_FLAG_NONE; @@ -1642,7 +1670,7 @@ _prop_get_ipvx_dhcp_hostname_flags(NMDevice *self, int addr_family) if (flags != NM_DHCP_HOSTNAME_FLAG_NONE) return flags; - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) return NM_DHCP_HOSTNAME_FLAGS_FQDN_DEFAULT_IP4; else return NM_DHCP_HOSTNAME_FLAGS_FQDN_DEFAULT_IP6; @@ -2338,8 +2366,8 @@ nm_device_ip_config_new(NMDevice *self, int addr_family) { nm_assert_addr_family(addr_family); - return addr_family == AF_INET ? (gpointer) nm_device_ip4_config_new(self) - : (gpointer) nm_device_ip6_config_new(self); + return NM_IS_IPv4(addr_family) ? (gpointer) nm_device_ip4_config_new(self) + : (gpointer) nm_device_ip6_config_new(self); } NML3ConfigData * @@ -2754,7 +2782,7 @@ static void _set_ip_state(NMDevice *self, int addr_family, NMDeviceIPState new_state) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); nm_assert_addr_family(addr_family); @@ -2775,7 +2803,7 @@ _set_ip_state(NMDevice *self, int addr_family, NMDeviceIPState new_state) * * This is not documented/guaranteed behavior, but seems to make sense for now. */ _active_connection_set_state_flags(self, - addr_family == AF_INET + NM_IS_IPv4(addr_family) ? NM_ACTIVATION_STATE_FLAG_IP4_READY : NM_ACTIVATION_STATE_FLAG_IP6_READY); } @@ -3559,7 +3587,7 @@ static gboolean default_route_metric_penalty_detect(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); /* currently we don't differentiate between IPv4 and IPv6 when detecting * connectivity. */ @@ -3575,10 +3603,8 @@ default_route_metric_penalty_get(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - nm_assert_addr_family(addr_family); - - if (addr_family == AF_INET ? priv->default_route_metric_penalty_ip4_has - : priv->default_route_metric_penalty_ip6_has) + if (NM_IS_IPv4(addr_family) ? priv->default_route_metric_penalty_ip4_has + : priv->default_route_metric_penalty_ip6_has) return 20000; return 0; } @@ -3612,8 +3638,8 @@ nm_device_get_route_metric(NMDevice *self, int addr_family) /* use the current NMConfigData, which makes this configuration reloadable. * Note that that means that the route-metric might change between SIGHUP. * You must cache the returned value if that is a problem. */ - property = addr_family == AF_INET ? NM_CON_DEFAULT("ipv4.route-metric") - : NM_CON_DEFAULT("ipv6.route-metric"); + property = NM_IS_IPv4(addr_family) ? NM_CON_DEFAULT("ipv4.route-metric") + : NM_CON_DEFAULT("ipv6.route-metric"); route_metric = nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, property, self, @@ -3644,7 +3670,8 @@ nm_device_get_route_table(NMDevice *self, int addr_family) static NMIPRouteTableSyncMode _get_route_table_sync_mode_stateful(NMDevice *self, int addr_family) { - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMDedupMultiIter ipconf_iter; gboolean all_sync_now; gboolean all_sync_eff; @@ -3652,25 +3679,14 @@ _get_route_table_sync_mode_stateful(NMDevice *self, int addr_family) all_sync_now = _prop_get_ipvx_route_table(self, addr_family) != 0u; if (!all_sync_now) { + const NMPlatformIPRoute *route; + /* If there's a local route switch to all-sync in order * to properly manage the local table */ - if (addr_family == AF_INET) { - const NMPlatformIP4Route *route; - - nm_ip_config_iter_ip4_route_for_each (&ipconf_iter, priv->con_ip_config_4, &route) { - if (nm_platform_route_type_uncoerce(route->type_coerced) == RTN_LOCAL) { - all_sync_now = TRUE; - break; - } - } - } else { - const NMPlatformIP6Route *route; - - nm_ip_config_iter_ip6_route_for_each (&ipconf_iter, priv->con_ip_config_6, &route) { - if (nm_platform_route_type_uncoerce(route->type_coerced) == RTN_LOCAL) { - all_sync_now = TRUE; - break; - } + nm_ip_config_iter_ip_route_for_each (&ipconf_iter, priv->con_ip_config_x[IS_IPv4], &route) { + if (nm_platform_route_type_uncoerce(route->type_coerced) == RTN_LOCAL) { + all_sync_now = TRUE; + break; } } } @@ -3685,13 +3701,13 @@ _get_route_table_sync_mode_stateful(NMDevice *self, int addr_family) * The purpose of this is to support reapply of route-table (and thus the * all-sync mode). If reapply toggles from all-sync to no-all-sync, we must * sync one last time. */ - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) all_sync_eff = priv->v4_route_table_all_sync_before; else all_sync_eff = priv->v6_route_table_all_sync_before; } - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) priv->v4_route_table_all_sync_before = all_sync_now; else priv->v6_route_table_all_sync_before = all_sync_now; @@ -3943,7 +3959,7 @@ concheck_periodic_schedule_do(NMDevice *self, int addr_family, gint64 now_ns) NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); gboolean periodic_check_disabled = FALSE; gint64 expiry, tdiff; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); /* we always cancel whatever was pending. */ if (nm_clear_g_source(&priv->concheck_x[IS_IPv4].p_cur_id)) @@ -3998,7 +4014,7 @@ concheck_periodic_schedule_set(NMDevice *self, int addr_family, ConcheckSchedule NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); gint64 new_expiry, exp_expiry, cur_expiry, tdiff; gint64 now_ns = 0; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); if (priv->concheck_x[IS_IPv4].p_max_interval == 0) { /* periodic check is disabled. Nothing to do. */ @@ -4158,7 +4174,7 @@ concheck_update_interval(NMDevice *self, int addr_family, gboolean check_now) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); guint new_interval; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); new_interval = nm_connectivity_get_interval(concheck_get_mgr(self)); @@ -4202,7 +4218,7 @@ concheck_update_state(NMDevice * self, gboolean allow_periodic_bump) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); /* @state is a result of the connectivity check. We only expect a precise * number of possible values. */ @@ -4283,14 +4299,14 @@ nm_device_get_effective_ip_config_method(NMDevice *self, int addr_family) NMDeviceClass *klass; NMConnection * connection = nm_device_get_applied_connection(self); const char * method; + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_val_if_fail(NM_IS_CONNECTION(connection), "" /* bogus */); - nm_assert_addr_family(addr_family); method = nm_utils_get_ip_config_method(connection, addr_family); - if ((addr_family == AF_INET && nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) - || (addr_family == AF_INET6 && nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_AUTO))) { + if ((IS_IPv4 && nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) + || (!IS_IPv4 && nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_AUTO))) { klass = NM_DEVICE_GET_CLASS(self); if (klass->get_auto_ip_config_method) { const char *auto_method; @@ -4307,7 +4323,7 @@ nm_device_get_effective_ip_config_method(NMDevice *self, int addr_family) static void concheck_handle_complete(NMDeviceConnectivityHandle *handle, GError *error) { - const gboolean IS_IPv4 = (handle->addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(handle->addr_family); /* The moment we invoke the callback, we unlink it. It signals * that @handle is handled -- as far as the callee of callback @@ -4495,7 +4511,7 @@ concheck_start(NMDevice * self, (long long unsigned) handle->seq, is_periodic ? ", periodic-check" : ""); - if (addr_family == AF_INET && !priv->concheck_rp_filter_checked) { + if (NM_IS_IPv4(addr_family) && !priv->concheck_rp_filter_checked) { if ((ifname = nm_device_get_ip_iface_from_platform(self))) { gboolean due_to_all; int val; @@ -4560,17 +4576,15 @@ NMConnectivityState nm_device_get_connectivity_state(NMDevice *self, int addr_family) { NMDevicePrivate *priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); g_return_val_if_fail(NM_IS_DEVICE(self), NM_CONNECTIVITY_UNKNOWN); - nm_assert_addr_family(addr_family); priv = NM_DEVICE_GET_PRIVATE(self); switch (addr_family) { case AF_INET: case AF_INET6: - return priv->concheck_x[IS_IPv4].state; + return priv->concheck_x[NM_IS_IPv4(addr_family)].state; default: nm_assert(addr_family == AF_UNSPEC); return NM_MAX_WITH_CMP(nm_connectivity_state_cmp, @@ -4653,10 +4667,10 @@ nm_device_master_enslave_slave(NMDevice *self, NMDevice *slave, NMConnection *co */ if (success) { if (priv->ip_state_4 == NM_DEVICE_IP_STATE_WAIT) - nm_device_activate_stage3_ip4_start(self); + nm_device_activate_stage3_ip_start(self, AF_INET); if (priv->ip_state_6 == NM_DEVICE_IP_STATE_WAIT) - nm_device_activate_stage3_ip6_start(self); + nm_device_activate_stage3_ip_start(self, AF_INET6); } /* Since slave devices don't have their own IP configuration, @@ -4887,9 +4901,9 @@ carrier_changed(NMDevice *self, gboolean carrier) /* If needed, also resume IP configuration that is * waiting for carrier. */ if (nm_device_activate_ip4_state_in_wait(self)) - nm_device_activate_stage3_ip4_start(self); + nm_device_activate_stage3_ip_start(self, AF_INET); if (nm_device_activate_ip6_state_in_wait(self)) - nm_device_activate_stage3_ip6_start(self); + nm_device_activate_stage3_ip_start(self, AF_INET6); return; } /* fall-through and change state of device */ @@ -5883,7 +5897,6 @@ realize_start_setup(NMDevice * self, NMDevicePrivate * priv; NMDeviceClass * klass; NMPlatform * platform; - static guint32 id = 0; NMDeviceCapabilities capabilities = 0; NMConfig * config; guint real_rate; @@ -5969,7 +5982,12 @@ realize_start_setup(NMDevice * self, if (!priv->udi) { /* Use a placeholder UDI until we get a real one */ - priv->udi = g_strdup_printf("/virtual/device/placeholder/%d", id++); + if (priv->udi_id == 0) { + static guint64 udi_id_counter = 0; + + priv->udi_id = ++udi_id_counter; + } + priv->udi = g_strdup_printf("/virtual/device/placeholder/%" G_GUINT64_FORMAT, priv->udi_id); _notify(self, PROP_UDI); } @@ -7659,7 +7677,7 @@ static void activation_source_clear(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); if (priv->activation_source_id_x[IS_IPv4] != 0) { _LOGD(LOGD_DEVICE, @@ -7676,7 +7694,7 @@ static gboolean activation_source_handle_cb(NMDevice *self, int addr_family) { NMDevicePrivate * priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); ActivationHandleFunc activation_source_func; guint activation_source_id; @@ -7726,7 +7744,7 @@ static void activation_source_schedule(NMDevice *self, ActivationHandleFunc func, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); guint new_id = 0; if (priv->activation_source_id_x[IS_IPv4] != 0 @@ -7769,7 +7787,7 @@ static void activation_source_invoke_sync(NMDevice *self, ActivationHandleFunc func, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); if (priv->activation_source_id_x[IS_IPv4] == 0) { _LOGD(LOGD_DEVICE, @@ -7923,13 +7941,13 @@ sriov_vf_config_to_platform(NMDevice *self, NMSriovVF *vf, GError **error) } static void -sriov_params_cb(GError *error, gpointer data) +sriov_params_cb(GError *error, gpointer user_data) { NMDevice * self; NMDevicePrivate *priv; nm_auto_freev NMPlatformVF **plat_vfs = NULL; - nm_utils_user_data_unpack(data, &self, &plat_vfs); + nm_utils_user_data_unpack(user_data, &self, &plat_vfs); if (nm_utils_error_is_cancelled_or_disposing(error)) return; @@ -8758,7 +8776,7 @@ ensure_con_ip_config(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMConnection * connection; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMIPConfig * con_ip_config; if (priv->con_ip_config_x[IS_IPv4]) @@ -8835,7 +8853,7 @@ ip_config_merge_and_apply(NMDevice *self, int addr_family, gboolean commit) gboolean ignore_default_routes = FALSE; GSList * iter; const char * ip6_addr_gen_token = NULL; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); if (nm_device_sys_iface_state_is_external(self)) commit = FALSE; @@ -9079,12 +9097,12 @@ static gboolean dhcp_grace_period_expired(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); priv->dhcp_data_x[IS_IPv4].grace_id = 0; priv->dhcp_data_x[IS_IPv4].grace_pending = FALSE; - _LOGI(LOGD_DHCP_from_addr_family(addr_family), + _LOGI(LOGD_DHCPX(IS_IPv4), "DHCPv%c: grace period expired", nm_utils_addr_family_to_char(addr_family)); @@ -9110,7 +9128,7 @@ static gboolean dhcp_grace_period_start(NMDevice *self, int addr_family) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); guint32 timeout; /* In any other case (expired lease, assumed connection, etc.), @@ -9125,12 +9143,12 @@ dhcp_grace_period_start(NMDevice *self, int addr_family) * by a constant factor. */ timeout = _prop_get_ipvx_dhcp_timeout(self, addr_family); if (timeout == NM_DHCP_TIMEOUT_INFINITY) - _LOGI(LOGD_DHCP_from_addr_family(addr_family), + _LOGI(LOGD_DHCPX(IS_IPv4), "DHCPv%c: trying to acquire a new lease", nm_utils_addr_family_to_char(addr_family)); else { timeout = dhcp_grace_period_from_timeout(timeout); - _LOGI(LOGD_DHCP_from_addr_family(addr_family), + _LOGI(LOGD_DHCPX(IS_IPv4), "DHCPv%c: trying to acquire a new lease within %u seconds", nm_utils_addr_family_to_char(addr_family), timeout); @@ -9434,7 +9452,7 @@ connection_ip_method_requires_carrier(NMConnection *connection, method = nm_utils_get_ip_config_method(connection, addr_family); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { NM_SET_OUT(out_ip_enabled, !nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)); return NM_IN_STRSET(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO, @@ -10969,7 +10987,7 @@ ip_requires_slaves(NMDevice *self, int addr_family) method = nm_device_get_effective_ip_config_method(self, addr_family); - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) return nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO); /* SLAAC, DHCP, and Link-Local depend on connectivity (and thus slaves) @@ -10986,7 +11004,7 @@ act_stage3_ip_config_start(NMDevice * self, gpointer * out_config, NMDeviceStateReason *out_failure_reason) { - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMConnection * connection; NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE; @@ -11208,103 +11226,62 @@ act_stage3_ip_config_start(NMDevice * self, } } -/** - * nm_device_activate_stage3_ip4_start: - * @self: the device - * - * Try starting IPv4 configuration. - */ gboolean -nm_device_activate_stage3_ip4_start(NMDevice *self) +nm_device_activate_stage3_ip_start(NMDevice *self, int addr_family) { - NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); NMActStageReturn ret; - NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_NONE; - gs_unref_object NMIP4Config *ip4_config = NULL; + NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_NONE; + gs_unref_object NMIPConfig *ip_config = NULL; - g_assert(priv->ip_state_4 == NM_DEVICE_IP_STATE_WAIT); + g_assert(priv->ip_state_x[IS_IPv4] == NM_DEVICE_IP_STATE_WAIT); if (nm_device_sys_iface_state_is_external(self)) { - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_DONE); + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_DONE); check_ip_state(self, FALSE, TRUE); return TRUE; } - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_CONF); - ret = NM_DEVICE_GET_CLASS(self)->act_stage3_ip_config_start(self, - AF_INET, - (gpointer *) &ip4_config, - &failure_reason); - if (ret == NM_ACT_STAGE_RETURN_SUCCESS) - nm_device_activate_schedule_ip_config_result(self, AF_INET, NM_IP_CONFIG_CAST(ip4_config)); - else if (ret == NM_ACT_STAGE_RETURN_IP_DONE) { - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_DONE); - check_ip_state(self, FALSE, TRUE); - } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) { - nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, failure_reason); - return FALSE; - } else if (ret == NM_ACT_STAGE_RETURN_IP_FAIL) { - /* Activation not wanted */ - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_FAIL); - } else if (ret == NM_ACT_STAGE_RETURN_IP_WAIT) { - /* Wait for something to try IP config again */ - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_WAIT); - } else - g_assert(ret == NM_ACT_STAGE_RETURN_POSTPONE); - - return TRUE; -} - -/** - * nm_device_activate_stage3_ip6_start: - * @self: the device - * - * Try starting IPv6 configuration. - */ -gboolean -nm_device_activate_stage3_ip6_start(NMDevice *self) -{ - NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); - NMActStageReturn ret; - NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_NONE; - gs_unref_object NMIP6Config *ip6_config = NULL; + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_CONF); - g_assert(priv->ip_state_6 == NM_DEVICE_IP_STATE_WAIT); - - if (nm_device_sys_iface_state_is_external(self)) { - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_DONE); - check_ip_state(self, FALSE, TRUE); - return TRUE; - } - - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_CONF); ret = NM_DEVICE_GET_CLASS(self)->act_stage3_ip_config_start(self, - AF_INET6, - (gpointer *) &ip6_config, + addr_family, + (gpointer *) &ip_config, &failure_reason); - if (ret == NM_ACT_STAGE_RETURN_SUCCESS) { - if (!ip6_config) - ip6_config = nm_device_ip6_config_new(self); - /* Here we get a static IPv6 config, like for Shared where it's - * autogenerated or from modems where it comes from ModemManager. - */ - nm_assert(!applied_config_get_current(&priv->ac_ip6_config)); - applied_config_init(&priv->ac_ip6_config, ip6_config); - nm_device_activate_schedule_ip_config_result(self, AF_INET6, NULL); - } else if (ret == NM_ACT_STAGE_RETURN_IP_DONE) { - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_DONE); + + switch (ret) { + case NM_ACT_STAGE_RETURN_SUCCESS: + if (!IS_IPv4) { + /* Here we get a static IPv6 config, like for Shared where it's + * autogenerated or from modems where it comes from ModemManager. + */ + if (!ip_config) + ip_config = nm_device_ip_config_new(self, addr_family); + nm_assert(!applied_config_get_current(&priv->ac_ip6_config)); + applied_config_init(&priv->ac_ip6_config, ip_config); + ip_config = NULL; + } + nm_device_activate_schedule_ip_config_result(self, addr_family, ip_config); + break; + case NM_ACT_STAGE_RETURN_IP_DONE: + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_DONE); check_ip_state(self, FALSE, TRUE); - } else if (ret == NM_ACT_STAGE_RETURN_FAILURE) { + break; + case NM_ACT_STAGE_RETURN_FAILURE: nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, failure_reason); return FALSE; - } else if (ret == NM_ACT_STAGE_RETURN_IP_FAIL) { + case NM_ACT_STAGE_RETURN_IP_FAIL: /* Activation not wanted */ - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_FAIL); - } else if (ret == NM_ACT_STAGE_RETURN_IP_WAIT) { + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_FAIL); + break; + case NM_ACT_STAGE_RETURN_IP_WAIT: /* Wait for something to try IP config again */ - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_WAIT); - } else + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_WAIT); + break; + default: g_assert(ret == NM_ACT_STAGE_RETURN_POSTPONE); + } return TRUE; } @@ -11334,12 +11311,12 @@ activate_stage3_ip_config_start(NMDevice *self) "interface %s not up for IP configuration", nm_device_get_ip_iface(self)); - /* IPv4 */ - if (nm_device_activate_ip4_state_in_wait(self) && !nm_device_activate_stage3_ip4_start(self)) + if (nm_device_activate_ip4_state_in_wait(self) + && !nm_device_activate_stage3_ip_start(self, AF_INET)) return; - /* IPv6 */ - if (nm_device_activate_ip6_state_in_wait(self) && !nm_device_activate_stage3_ip6_start(self)) + if (nm_device_activate_ip6_state_in_wait(self) + && !nm_device_activate_stage3_ip_start(self, AF_INET6)) return; /* Proxy */ @@ -11479,37 +11456,45 @@ act_stage4_ip_config_timeout(NMDevice * self, return NM_ACT_STAGE_RETURN_SUCCESS; } -/* - * nm_device_activate_stage4_ip4_config_timeout - * - * Time out on retrieving the IPv4 config. - * - */ static void -activate_stage4_ip_config_timeout_4(NMDevice *self) +activate_stage4_ip_config_timeout_x(NMDevice *self, int addr_family) { - NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE; NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_NONE; + NMActStageReturn ret; + + ret = + NM_DEVICE_GET_CLASS(self)->act_stage4_ip_config_timeout(self, addr_family, &failure_reason); - ret = NM_DEVICE_GET_CLASS(self)->act_stage4_ip_config_timeout(self, AF_INET, &failure_reason); if (ret == NM_ACT_STAGE_RETURN_POSTPONE) return; - else if (ret == NM_ACT_STAGE_RETURN_FAILURE) { + + if (ret == NM_ACT_STAGE_RETURN_FAILURE) { nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, failure_reason); return; } g_assert(ret == NM_ACT_STAGE_RETURN_SUCCESS); - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_FAIL); - + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_FAIL); check_ip_state(self, FALSE, TRUE); } +static void +activate_stage4_ip_config_timeout_4(NMDevice *self) +{ + activate_stage4_ip_config_timeout_x(self, AF_INET); +} + +static void +activate_stage4_ip_config_timeout_6(NMDevice *self) +{ + activate_stage4_ip_config_timeout_x(self, AF_INET6); +} + void nm_device_activate_schedule_ip_config_timeout(NMDevice *self, int addr_family) { NMDevicePrivate *priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_if_fail(NM_IS_DEVICE(self)); g_return_if_fail(NM_IN_SET(addr_family, AF_INET, AF_INET6)); @@ -11518,43 +11503,25 @@ nm_device_activate_schedule_ip_config_timeout(NMDevice *self, int addr_family) g_return_if_fail(priv->act_request.obj); - activation_source_schedule(self, activate_stage4_ip_config_timeout_x[IS_IPv4], addr_family); -} - -static void -activate_stage4_ip_config_timeout_6(NMDevice *self) -{ - NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE; - NMDeviceStateReason failure_reason = NM_DEVICE_STATE_REASON_NONE; - - ret = NM_DEVICE_GET_CLASS(self)->act_stage4_ip_config_timeout(self, AF_INET6, &failure_reason); - if (ret == NM_ACT_STAGE_RETURN_POSTPONE) - return; - if (ret == NM_ACT_STAGE_RETURN_FAILURE) { - nm_device_state_changed(self, NM_DEVICE_STATE_FAILED, failure_reason); - return; - } - g_assert(ret == NM_ACT_STAGE_RETURN_SUCCESS); - - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_FAIL); - - check_ip_state(self, FALSE, TRUE); + activation_source_schedule(self, + IS_IPv4 ? activate_stage4_ip_config_timeout_4 + : activate_stage4_ip_config_timeout_6, + addr_family); } static gboolean share_init(NMDevice *self, GError **error) { - char * modules[] = {"ip_tables", - "iptable_nat", - "nf_nat_ftp", - "nf_nat_irc", - "nf_nat_sip", - "nf_nat_tftp", - "nf_nat_pptp", - "nf_nat_h323", - NULL}; - char **iter; - int errsv; + const char *const modules[] = {"ip_tables", + "iptable_nat", + "nf_nat_ftp", + "nf_nat_irc", + "nf_nat_sip", + "nf_nat_tftp", + "nf_nat_pptp", + "nf_nat_h323"}; + guint i; + int errsv; if (nm_platform_sysctl_get_int32(nm_device_get_platform(self), NMP_SYSCTL_PATHID_ABSOLUTE("/proc/sys/net/ipv4/ip_forward"), @@ -11592,35 +11559,24 @@ share_init(NMDevice *self, GError **error) nm_strerror_native(errsv)); } - for (iter = modules; *iter; iter++) - nm_utils_modprobe(NULL, FALSE, *iter, NULL); + for (i = 0; i < G_N_ELEMENTS(modules); i++) + nm_utils_modprobe(NULL, FALSE, modules[i], NULL); return TRUE; } -#define add_share_rule(req, table, ...) \ - G_STMT_START \ - { \ - char *_cmd = g_strdup_printf(__VA_ARGS__); \ - nm_act_request_add_share_rule(req, table, _cmd); \ - g_free(_cmd); \ - } \ - G_STMT_END - static gboolean start_sharing(NMDevice *self, NMIP4Config *config, GError **error) { NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); NMActRequest * req; - char str_addr[INET_ADDRSTRLEN]; - char str_mask[INET_ADDRSTRLEN]; - guint32 netmask, network; const NMPlatformIP4Address *ip4_addr = NULL; const char * ip_iface; GError * local = NULL; NMConnection * conn; NMSettingConnection * s_con; gboolean announce_android_metered; + NMUtilsShareRules * share_rules; g_return_val_if_fail(config, FALSE); @@ -11645,57 +11601,13 @@ start_sharing(NMDevice *self, NMIP4Config *config, GError **error) req = nm_device_get_act_request(self); g_return_val_if_fail(req, FALSE); - netmask = _nm_utils_ip4_prefix_to_netmask(ip4_addr->plen); - _nm_utils_inet4_ntop(netmask, str_mask); - - network = ip4_addr->address & netmask; - _nm_utils_inet4_ntop(network, str_addr); - - add_share_rule(req, - "nat", - "POSTROUTING --source %s/%s ! --destination %s/%s --jump MASQUERADE", - str_addr, - str_mask, - str_addr, - str_mask); - add_share_rule(req, - "filter", - "FORWARD --destination %s/%s --out-interface %s --match state --state " - "ESTABLISHED,RELATED --jump ACCEPT", - str_addr, - str_mask, - ip_iface); - add_share_rule(req, - "filter", - "FORWARD --source %s/%s --in-interface %s --jump ACCEPT", - str_addr, - str_mask, - ip_iface); - add_share_rule(req, - "filter", - "FORWARD --in-interface %s --out-interface %s --jump ACCEPT", - ip_iface, - ip_iface); - add_share_rule(req, "filter", "FORWARD --out-interface %s --jump REJECT", ip_iface); - add_share_rule(req, "filter", "FORWARD --in-interface %s --jump REJECT", ip_iface); - add_share_rule(req, - "filter", - "INPUT --in-interface %s --protocol udp --destination-port 67 --jump ACCEPT", - ip_iface); - add_share_rule(req, - "filter", - "INPUT --in-interface %s --protocol tcp --destination-port 67 --jump ACCEPT", - ip_iface); - add_share_rule(req, - "filter", - "INPUT --in-interface %s --protocol udp --destination-port 53 --jump ACCEPT", - ip_iface); - add_share_rule(req, - "filter", - "INPUT --in-interface %s --protocol tcp --destination-port 53 --jump ACCEPT", - ip_iface); - - nm_act_request_set_shared(req, TRUE); + share_rules = nm_utils_share_rules_new(); + + nm_utils_share_rules_add_all_rules(share_rules, ip_iface, ip4_addr->address, ip4_addr->plen); + + nm_utils_share_rules_apply(share_rules, TRUE); + + nm_act_request_set_shared(req, share_rules); conn = nm_act_request_get_applied_connection(req); s_con = nm_connection_get_setting_connection(conn); @@ -11730,7 +11642,7 @@ start_sharing(NMDevice *self, NMIP4Config *config, GError **error) "could not start dnsmasq due to %s", local->message); g_error_free(local); - nm_act_request_set_shared(req, FALSE); + nm_act_request_set_shared(req, NULL); return FALSE; } @@ -11798,12 +11710,14 @@ nm_device_arp_announce(NMDevice *self) } static void -activate_stage5_ip_config_result_4(NMDevice *self) +activate_stage5_ip_config_result_x(NMDevice *self, int addr_family) { - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMActRequest * req; const char * method; int ip_ifindex; + int errsv; gboolean do_announce = FALSE; req = nm_device_get_act_request(self); @@ -11811,6 +11725,8 @@ activate_stage5_ip_config_result_4(NMDevice *self) /* Interface must be IFF_UP before IP config can be applied */ ip_ifindex = nm_device_get_ip_ifindex(self); + g_return_if_fail(ip_ifindex); + if (!nm_platform_link_is_up(nm_device_get_platform(self), ip_ifindex) && !nm_device_sys_iface_state_is_external_or_assume(self)) { nm_platform_link_set_up(nm_device_get_platform(self), ip_ifindex, NULL); @@ -11820,86 +11736,172 @@ activate_stage5_ip_config_result_4(NMDevice *self) nm_device_get_ip_iface(self)); } - if (!ip_config_merge_and_apply(self, AF_INET, TRUE)) { - _LOGD(LOGD_DEVICE | LOGD_IP4, "Activation: Stage 5 of 5 (IPv4 Commit) failed"); - nm_device_ip_method_failed(self, AF_INET, NM_DEVICE_STATE_REASON_CONFIG_FAILED); + if (!ip_config_merge_and_apply(self, addr_family, TRUE)) { + _LOGD(LOGD_DEVICE | LOGD_IPX(IS_IPv4), + "Activation: Stage 5 of 5 (IPv%c Commit) failed", + nm_utils_addr_family_to_char(addr_family)); + nm_device_ip_method_failed(self, addr_family, NM_DEVICE_STATE_REASON_CONFIG_FAILED); return; } - /* Start IPv4 sharing if we need it */ - method = nm_device_get_effective_ip_config_method(self, AF_INET); - if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)) { - gs_free_error GError *error = NULL; + if (!IS_IPv4) { + if (priv->dhcp6.mode != NM_NDISC_DHCP_LEVEL_NONE + && priv->ip_state_6 == NM_DEVICE_IP_STATE_CONF) { + if (applied_config_get_current(&priv->dhcp6.ip6_config)) { + /* If IPv6 wasn't the first IP to complete, and DHCP was used, + * then ensure dispatcher scripts get the DHCP lease information. + */ + nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP6_CHANGE, + self, + NULL, + NULL, + NULL, + NULL); + } else { + /* still waiting for first dhcp6 lease. */ + return; + } + } + } - if (!start_sharing(self, priv->ip_config_4, &error)) { - _LOGW(LOGD_SHARING, - "Activation: Stage 5 of 5 (IPv4 Commit) start sharing failed: %s", - error->message); - nm_device_ip_method_failed(self, AF_INET, NM_DEVICE_STATE_REASON_SHARED_START_FAILED); - return; + /* Start IPv4 sharing/IPv6 forwarding if we need it */ + method = nm_device_get_effective_ip_config_method(self, addr_family); + if (IS_IPv4) { + if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)) { + gs_free_error GError *error = NULL; + + if (!start_sharing(self, priv->ip_config_4, &error)) { + _LOGW(LOGD_SHARING, + "Activation: Stage 5 of 5 (IPv4 Commit) start sharing failed: %s", + error->message); + nm_device_ip_method_failed(self, + AF_INET, + NM_DEVICE_STATE_REASON_SHARED_START_FAILED); + return; + } + } + } else { + if (nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) { + if (!nm_platform_sysctl_set( + nm_device_get_platform(self), + NMP_SYSCTL_PATHID_ABSOLUTE("/proc/sys/net/ipv6/conf/all/forwarding"), + "1")) { + errsv = errno; + _LOGE(LOGD_SHARING, + "share: error enabling IPv6 forwarding: (%d) %s", + errsv, + nm_strerror_native(errsv)); + nm_device_ip_method_failed(self, + AF_INET6, + NM_DEVICE_STATE_REASON_SHARED_START_FAILED); + return; + } } } - if (priv->dhcp_data_4.client) { - gs_free_error GError *error = NULL; + if (IS_IPv4) { + if (priv->dhcp_data_4.client) { + gs_free_error GError *error = NULL; - if (!nm_dhcp_client_accept(priv->dhcp_data_4.client, &error)) { - _LOGW(LOGD_DHCP4, - "Activation: Stage 5 of 5 (IPv4 Commit) error accepting lease: %s", - error->message); - nm_device_ip_method_failed(self, AF_INET, NM_DEVICE_STATE_REASON_DHCP_ERROR); - return; + if (!nm_dhcp_client_accept(priv->dhcp_data_4.client, &error)) { + _LOGW(LOGD_DHCP4, + "Activation: Stage 5 of 5 (IPv4 Commit) error accepting lease: %s", + error->message); + nm_device_ip_method_failed(self, AF_INET, NM_DEVICE_STATE_REASON_DHCP_ERROR); + return; + } + } + + /* If IPv4 wasn't the first to complete, and DHCP was used, then ensure + * dispatcher scripts get the DHCP lease information. + */ + if (priv->dhcp_data_4.client && nm_device_activate_ip4_state_in_conf(self) + && (nm_device_get_state(self) > NM_DEVICE_STATE_IP_CONFIG)) { + nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP4_CHANGE, + self, + NULL, + NULL, + NULL, + NULL); } } - /* If IPv4 wasn't the first to complete, and DHCP was used, then ensure - * dispatcher scripts get the DHCP lease information. - */ - if (priv->dhcp_data_4.client && nm_device_activate_ip4_state_in_conf(self) - && (nm_device_get_state(self) > NM_DEVICE_STATE_IP_CONFIG)) { - nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP4_CHANGE, self, NULL, NULL, NULL, NULL); + if (!IS_IPv4) { + /* Check if we have to wait for DAD */ + if (priv->ip_state_6 == NM_DEVICE_IP_STATE_CONF && !priv->dad6_ip6_config) { + if (!priv->carrier && priv->ignore_carrier && get_ip_config_may_fail(self, AF_INET6)) + _LOGI(LOGD_DEVICE | LOGD_IP6, + "IPv6 DAD: carrier missing and ignored, not delaying activation"); + else + priv->dad6_ip6_config = dad6_get_pending_addresses(self); + + if (priv->dad6_ip6_config) { + _LOGD(LOGD_DEVICE | LOGD_IP6, "IPv6 DAD: awaiting termination"); + } else { + _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_DONE); + check_ip_state(self, FALSE, TRUE); + } + } } - /* Send ARP announcements */ + if (IS_IPv4) { + /* Send ARP announcements */ - if (nm_device_is_master(self)) { - CList * iter; - SlaveInfo *info; + if (nm_device_is_master(self)) { + CList * iter; + SlaveInfo *info; - /* Skip announcement if there are no device enslaved, for two reasons: - * 1) the master has a temporary MAC address until the first slave comes - * 2) announcements are going to be dropped anyway without slaves - */ - do_announce = FALSE; + /* Skip announcement if there are no device enslaved, for two reasons: + * 1) the master has a temporary MAC address until the first slave comes + * 2) announcements are going to be dropped anyway without slaves + */ + do_announce = FALSE; - c_list_for_each (iter, &priv->slaves) { - info = c_list_entry(iter, SlaveInfo, lst_slave); - if (info->slave_is_enslaved) { - do_announce = TRUE; - break; + c_list_for_each (iter, &priv->slaves) { + info = c_list_entry(iter, SlaveInfo, lst_slave); + if (info->slave_is_enslaved) { + do_announce = TRUE; + break; + } } - } - } else - do_announce = TRUE; + } else + do_announce = TRUE; - if (do_announce) - nm_device_arp_announce(self); + if (do_announce) + nm_device_arp_announce(self); + } - /* Enter the IP_CHECK state if this is the first method to complete */ - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_DONE); - check_ip_state(self, FALSE, TRUE); + if (IS_IPv4) { + /* Enter the IP_CHECK state if this is the first method to complete */ + _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_DONE); + check_ip_state(self, FALSE, TRUE); + } } +static void +activate_stage5_ip_config_result_4(NMDevice *self) +{ + activate_stage5_ip_config_result_x(self, AF_INET); +} + +static void +activate_stage5_ip_config_result_6(NMDevice *self) +{ + activate_stage5_ip_config_result_x(self, AF_INET6); +} + +#define activate_stage5_ip_config_result_x_fcn(addr_family) \ + (NM_IS_IPv4(addr_family) ? activate_stage5_ip_config_result_4 \ + : activate_stage5_ip_config_result_6) + void nm_device_activate_schedule_ip_config_result(NMDevice *self, int addr_family, NMIPConfig *config) { NMDevicePrivate *priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_if_fail(NM_IS_DEVICE(self)); - g_return_if_fail(NM_IN_SET(addr_family, AF_INET, AF_INET6)); - g_return_if_fail( - !config || (addr_family == AF_INET && nm_ip_config_get_addr_family(config) == AF_INET)); + g_return_if_fail(!config || (IS_IPv4 && nm_ip_config_get_addr_family(config) == AF_INET)); priv = NM_DEVICE_GET_PRIVATE(self); @@ -11913,13 +11915,15 @@ nm_device_activate_schedule_ip_config_result(NMDevice *self, int addr_family, NM _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_CONF); } - activation_source_schedule(self, activate_stage5_ip_config_result_x[IS_IPv4], addr_family); + activation_source_schedule(self, + activate_stage5_ip_config_result_x_fcn(addr_family), + addr_family); } NMDeviceIPState nm_device_activate_get_ip_state(NMDevice *self, int addr_family) { - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_val_if_fail(NM_IS_DEVICE(self), NM_DEVICE_IP_STATE_NONE); g_return_val_if_fail(NM_IN_SET(addr_family, AF_INET, AF_INET6), NM_DEVICE_IP_STATE_NONE); @@ -11994,89 +11998,6 @@ dad6_get_pending_addresses(NMDevice *self) return dad6_config; } -static void -activate_stage5_ip_config_result_6(NMDevice *self) -{ - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - NMActRequest * req; - const char * method; - int ip_ifindex; - int errsv; - - req = nm_device_get_act_request(self); - g_assert(req); - - /* Interface must be IFF_UP before IP config can be applied */ - ip_ifindex = nm_device_get_ip_ifindex(self); - g_return_if_fail(ip_ifindex); - - if (!nm_platform_link_is_up(nm_device_get_platform(self), ip_ifindex) - && !nm_device_sys_iface_state_is_external_or_assume(self)) { - nm_platform_link_set_up(nm_device_get_platform(self), ip_ifindex, NULL); - if (!nm_platform_link_is_up(nm_device_get_platform(self), ip_ifindex)) - _LOGW(LOGD_DEVICE, - "interface %s not up for IP configuration", - nm_device_get_ip_iface(self)); - } - - if (ip_config_merge_and_apply(self, AF_INET6, TRUE)) { - if (priv->dhcp6.mode != NM_NDISC_DHCP_LEVEL_NONE - && priv->ip_state_6 == NM_DEVICE_IP_STATE_CONF) { - if (applied_config_get_current(&priv->dhcp6.ip6_config)) { - /* If IPv6 wasn't the first IP to complete, and DHCP was used, - * then ensure dispatcher scripts get the DHCP lease information. - */ - nm_dispatcher_call_device(NM_DISPATCHER_ACTION_DHCP6_CHANGE, - self, - NULL, - NULL, - NULL, - NULL); - } else { - /* still waiting for first dhcp6 lease. */ - return; - } - } - - /* Start IPv6 forwarding if we need it */ - method = nm_device_get_effective_ip_config_method(self, AF_INET6); - if (nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) { - if (!nm_platform_sysctl_set( - nm_device_get_platform(self), - NMP_SYSCTL_PATHID_ABSOLUTE("/proc/sys/net/ipv6/conf/all/forwarding"), - "1")) { - errsv = errno; - _LOGE(LOGD_SHARING, - "share: error enabling IPv6 forwarding: (%d) %s", - errsv, - nm_strerror_native(errsv)); - nm_device_ip_method_failed(self, - AF_INET6, - NM_DEVICE_STATE_REASON_SHARED_START_FAILED); - } - } - - /* Check if we have to wait for DAD */ - if (priv->ip_state_6 == NM_DEVICE_IP_STATE_CONF && !priv->dad6_ip6_config) { - if (!priv->carrier && priv->ignore_carrier && get_ip_config_may_fail(self, AF_INET6)) - _LOGI(LOGD_DEVICE | LOGD_IP6, - "IPv6 DAD: carrier missing and ignored, not delaying activation"); - else - priv->dad6_ip6_config = dad6_get_pending_addresses(self); - - if (priv->dad6_ip6_config) { - _LOGD(LOGD_DEVICE | LOGD_IP6, "IPv6 DAD: awaiting termination"); - } else { - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_DONE); - check_ip_state(self, FALSE, TRUE); - } - } - } else { - _LOGW(LOGD_DEVICE | LOGD_IP6, "Activation: Stage 5 of 5 (IPv6 Commit) failed"); - nm_device_ip_method_failed(self, AF_INET6, NM_DEVICE_STATE_REASON_CONFIG_FAILED); - } -} - /*****************************************************************************/ static void @@ -12230,7 +12151,7 @@ static void _cleanup_ip_pre(NMDevice *self, int addr_family, CleanupType cleanup_type) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_NONE); @@ -12326,55 +12247,86 @@ _nm_device_hash_check_invalid_keys(GHashTable * hash, } void -nm_device_reactivate_ip4_config(NMDevice * self, - NMSettingIPConfig *s_ip4_old, - NMSettingIPConfig *s_ip4_new) +nm_device_reactivate_ip_config(NMDevice * self, + int addr_family, + NMSettingIPConfig *s_ip_old, + NMSettingIPConfig *s_ip_new) { + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMDevicePrivate *priv; - const char * method_old, *method_new; + const char * method_old; + const char * method_new; g_return_if_fail(NM_IS_DEVICE(self)); + priv = NM_DEVICE_GET_PRIVATE(self); - if (priv->ip_state_4 != NM_DEVICE_IP_STATE_NONE) { - g_clear_object(&priv->con_ip_config_4); - g_clear_object(&priv->ext_ip_config_4); + if (priv->ip_state_x[IS_IPv4] == NM_DEVICE_IP_STATE_NONE) + return; + + g_clear_object(&priv->con_ip_config_x[IS_IPv4]); + g_clear_object(&priv->ext_ip_config_x[IS_IPv4]); + if (IS_IPv4) { g_clear_object(&priv->dev_ip_config_4.current); - g_clear_object(&priv->dev2_ip_config_4.current); - priv->con_ip_config_4 = nm_device_ip4_config_new(self); + } else { + g_clear_object(&priv->ac_ip6_config.current); + g_clear_object(&priv->dhcp6.ip6_config.current); + } + g_clear_object(&priv->dev2_ip_config_x[IS_IPv4].current); + + if (!IS_IPv4) { + if (priv->ipv6ll_handle && !IN6_IS_ADDR_UNSPECIFIED(&priv->ipv6ll_addr)) + priv->ipv6ll_has = TRUE; + } + + priv->con_ip_config_x[IS_IPv4] = nm_device_ip_config_new(self, addr_family); + + if (IS_IPv4) { nm_ip4_config_merge_setting(priv->con_ip_config_4, - s_ip4_new, + s_ip_new, _prop_get_connection_mdns(self), _prop_get_connection_llmnr(self), nm_device_get_route_table(self, AF_INET), nm_device_get_route_metric(self, AF_INET)); + } else { + nm_ip6_config_merge_setting(priv->con_ip_config_6, + s_ip_new, + nm_device_get_route_table(self, AF_INET6), + nm_device_get_route_metric(self, AF_INET6)); + } - method_old = s_ip4_old ? nm_setting_ip_config_get_method(s_ip4_old) - : NM_SETTING_IP4_CONFIG_METHOD_DISABLED; - method_new = s_ip4_new ? nm_setting_ip_config_get_method(s_ip4_new) - : NM_SETTING_IP4_CONFIG_METHOD_DISABLED; + method_old = (s_ip_old ? nm_setting_ip_config_get_method(s_ip_old) : NULL) + ?: (IS_IPv4 ? NM_SETTING_IP4_CONFIG_METHOD_DISABLED + : NM_SETTING_IP6_CONFIG_METHOD_IGNORE); + method_new = (s_ip_new ? nm_setting_ip_config_get_method(s_ip_new) : NULL) + ?: (IS_IPv4 ? NM_SETTING_IP4_CONFIG_METHOD_DISABLED + : NM_SETTING_IP6_CONFIG_METHOD_IGNORE); - if (!nm_streq0(method_old, method_new)) { - _cleanup_ip_pre(self, AF_INET, CLEANUP_TYPE_DECONFIGURE); - _set_ip_state(self, AF_INET, NM_DEVICE_IP_STATE_WAIT); - if (!nm_device_activate_stage3_ip4_start(self)) - _LOGW(LOGD_IP4, "Failed to apply IPv4 configuration"); - return; + if (!nm_streq0(method_old, method_new)) { + _cleanup_ip_pre(self, addr_family, CLEANUP_TYPE_DECONFIGURE); + _set_ip_state(self, addr_family, NM_DEVICE_IP_STATE_WAIT); + if (!nm_device_activate_stage3_ip_start(self, addr_family)) { + _LOGW(LOGD_IP4, + "Failed to apply IPv%c configuration", + nm_utils_addr_family_to_char(addr_family)); } + return; + } - if (s_ip4_old && s_ip4_new) { - gint64 metric_old, metric_new; + if (s_ip_old && s_ip_new) { + gint64 metric_old, metric_new; - /* For dynamic IP methods (DHCP, IPv4LL, WWAN) the route metric is - * set at activation/renewal time using the value from static - * configuration. To support runtime change we need to update the - * dynamic configuration in place and tell the DHCP client the new - * value to use for future renewals. - */ - metric_old = nm_setting_ip_config_get_route_metric(s_ip4_old); - metric_new = nm_setting_ip_config_get_route_metric(s_ip4_new); + /* For dynamic IP methods (DHCP, IPv4LL, WWAN) the route metric is + * set at activation/renewal time using the value from static + * configuration. To support runtime change we need to update the + * dynamic configuration in place and tell the DHCP client the new + * value to use for future renewals. + */ + metric_old = nm_setting_ip_config_get_route_metric(s_ip_old); + metric_new = nm_setting_ip_config_get_route_metric(s_ip_new); - if (metric_old != metric_new) { + if (metric_old != metric_new) { + if (IS_IPv4) { if (priv->dev_ip_config_4.orig) { nm_ip4_config_update_routes_metric((NMIP4Config *) priv->dev_ip_config_4.orig, nm_device_get_route_metric(self, AF_INET)); @@ -12387,60 +12339,7 @@ nm_device_reactivate_ip4_config(NMDevice * self, nm_dhcp_client_set_route_metric(priv->dhcp_data_4.client, nm_device_get_route_metric(self, AF_INET)); } - } - } - - if (nm_device_get_ip_ifindex(self) > 0 && !ip_config_merge_and_apply(self, AF_INET, TRUE)) - _LOGW(LOGD_IP4, "Failed to reapply IPv4 configuration"); - } -} - -void -nm_device_reactivate_ip6_config(NMDevice * self, - NMSettingIPConfig *s_ip6_old, - NMSettingIPConfig *s_ip6_new) -{ - NMDevicePrivate *priv; - const char * method_old, *method_new; - - g_return_if_fail(NM_IS_DEVICE(self)); - priv = NM_DEVICE_GET_PRIVATE(self); - - if (priv->ip_state_6 != NM_DEVICE_IP_STATE_NONE) { - g_clear_object(&priv->con_ip_config_6); - g_clear_object(&priv->ext_ip_config_6); - g_clear_object(&priv->ac_ip6_config.current); - g_clear_object(&priv->dhcp6.ip6_config.current); - g_clear_object(&priv->dev2_ip_config_6.current); - if (priv->ipv6ll_handle && !IN6_IS_ADDR_UNSPECIFIED(&priv->ipv6ll_addr)) - priv->ipv6ll_has = TRUE; - priv->con_ip_config_6 = nm_device_ip6_config_new(self); - nm_ip6_config_merge_setting(priv->con_ip_config_6, - s_ip6_new, - nm_device_get_route_table(self, AF_INET6), - nm_device_get_route_metric(self, AF_INET6)); - - method_old = s_ip6_old ? nm_setting_ip_config_get_method(s_ip6_old) - : NM_SETTING_IP6_CONFIG_METHOD_IGNORE; - method_new = s_ip6_new ? nm_setting_ip_config_get_method(s_ip6_new) - : NM_SETTING_IP6_CONFIG_METHOD_IGNORE; - - if (!nm_streq0(method_old, method_new)) { - _cleanup_ip_pre(self, AF_INET6, CLEANUP_TYPE_DECONFIGURE); - _set_ip_state(self, AF_INET6, NM_DEVICE_IP_STATE_WAIT); - if (!nm_device_activate_stage3_ip6_start(self)) - _LOGW(LOGD_IP6, "Failed to apply IPv6 configuration"); - return; - } - - if (s_ip6_old && s_ip6_new) { - gint64 metric_old, metric_new; - - /* See comment in nm_device_reactivate_ip4_config() */ - metric_old = nm_setting_ip_config_get_route_metric(s_ip6_old); - metric_new = nm_setting_ip_config_get_route_metric(s_ip6_new); - - if (metric_old != metric_new) { + } else { if (priv->ac_ip6_config.orig) { nm_ip6_config_update_routes_metric((NMIP6Config *) priv->ac_ip6_config.orig, nm_device_get_route_metric(self, AF_INET6)); @@ -12459,9 +12358,12 @@ nm_device_reactivate_ip6_config(NMDevice * self, } } } + } - if (nm_device_get_ip_ifindex(self) > 0 && !ip_config_merge_and_apply(self, AF_INET6, TRUE)) - _LOGW(LOGD_IP4, "Failed to reapply IPv6 configuration"); + if (nm_device_get_ip_ifindex(self) > 0 && !ip_config_merge_and_apply(self, addr_family, TRUE)) { + _LOGW(LOGD_IPX(IS_IPv4), + "Failed to reapply IPv%c configuration", + nm_utils_addr_family_to_char(addr_family)); } } @@ -12518,28 +12420,38 @@ can_reapply_change(NMDevice * self, NM_SETTING_CONNECTION_LLDP, NM_SETTING_CONNECTION_MDNS, NM_SETTING_CONNECTION_LLMNR); - } else if (NM_IN_STRSET(setting_name, - NM_SETTING_USER_SETTING_NAME, - NM_SETTING_PROXY_SETTING_NAME, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP6_CONFIG_SETTING_NAME)) { + } + + if (NM_IN_STRSET(setting_name, + NM_SETTING_USER_SETTING_NAME, + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_IP4_CONFIG_SETTING_NAME, + NM_SETTING_IP6_CONFIG_SETTING_NAME)) return TRUE; - } else if (nm_streq(setting_name, NM_SETTING_WIRED_SETTING_NAME) - && NM_IN_SET(NM_DEVICE_GET_CLASS(self)->get_configured_mtu, - nm_device_get_configured_mtu_wired_parent, - nm_device_get_configured_mtu_for_wired)) { - return nm_device_hash_check_invalid_keys(diffs, - NM_SETTING_WIRED_SETTING_NAME, - error, - NM_SETTING_WIRED_MTU); - } else { - g_set_error(error, - NM_DEVICE_ERROR, - NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, - "Can't reapply any changes to '%s' setting", - setting_name); - return FALSE; + + if (nm_streq(setting_name, NM_SETTING_WIRED_SETTING_NAME)) { + if (NM_IN_SET(NM_DEVICE_GET_CLASS(self)->get_configured_mtu, + nm_device_get_configured_mtu_wired_parent, + nm_device_get_configured_mtu_for_wired)) { + return nm_device_hash_check_invalid_keys(diffs, + NM_SETTING_WIRED_SETTING_NAME, + error, + NM_SETTING_WIRED_MTU); + } + goto out_fail; } + + if (nm_streq(setting_name, NM_SETTING_OVS_EXTERNAL_IDS_SETTING_NAME) + && NM_DEVICE_GET_CLASS(self)->can_reapply_change_ovs_external_ids) + return TRUE; + +out_fail: + g_set_error(error, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, + "Can't reapply any changes to '%s' setting", + setting_name); + return FALSE; } static void @@ -12682,6 +12594,8 @@ check_and_reapply_connection(NMDevice * self, con_old = applied_clone = nm_simple_connection_new_clone(applied); con_new = applied; + /* FIXME(applied-connection-immutable): we should not modify the applied + * connection but replace it with a new (immutable) instance. */ nm_connection_replace_settings_from_connection(applied, connection_clean); nm_connection_clear_secrets(applied); } else @@ -12716,8 +12630,8 @@ check_and_reapply_connection(NMDevice * self, /* Allow reapply of MTU */ priv->mtu_source = NM_DEVICE_MTU_SOURCE_NONE; - nm_device_reactivate_ip4_config(self, s_ip4_old, s_ip4_new); - nm_device_reactivate_ip6_config(self, s_ip6_old, s_ip6_new); + nm_device_reactivate_ip_config(self, AF_INET, s_ip4_old, s_ip4_new); + nm_device_reactivate_ip_config(self, AF_INET6, s_ip6_old, s_ip6_new); _routing_rules_sync(self, NM_TERNARY_TRUE); @@ -13457,7 +13371,7 @@ nm_device_set_proxy_config(NMDevice *self, const char *pac_url) NMDhcpConfig * nm_device_get_dhcp_config(NMDevice *self, int addr_family) { - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_val_if_fail(NM_IS_DEVICE(self), NULL); @@ -13482,7 +13396,7 @@ nm_device_set_ip_config(NMDevice * self, GPtrArray * ip4_dev_route_blacklist) { NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self); - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMIPConfig * old_config; gboolean has_changes = FALSE; gboolean success = TRUE; @@ -13498,7 +13412,7 @@ nm_device_set_ip_config(NMDevice * self, }))); nm_assert(IS_IPv4 || !ip4_dev_route_blacklist); - _LOGD(LOGD_IP_from_af(addr_family), + _LOGD(LOGD_IPX(IS_IPv4), "ip%c-config: update (commit=%d, new-config=%p)", nm_utils_addr_family_to_char(addr_family), commit, @@ -13535,7 +13449,7 @@ nm_device_set_ip_config(NMDevice * self, * this causes a re-read and reset. This should only happen for relevant changes */ nm_ip_config_replace(old_config, new_config, &has_changes); if (has_changes) { - _LOGD(LOGD_IP_from_af(addr_family), + _LOGD(LOGD_IPX(IS_IPv4), "ip%c-config: update IP Config instance (%s)", nm_utils_addr_family_to_char(addr_family), nm_dbus_object_get_path(NM_DBUS_OBJECT(old_config))); @@ -13546,14 +13460,14 @@ nm_device_set_ip_config(NMDevice * self, if (!nm_dbus_object_is_exported(NM_DBUS_OBJECT(new_config))) nm_dbus_object_export(NM_DBUS_OBJECT(new_config)); - _LOGD(LOGD_IP_from_af(addr_family), + _LOGD(LOGD_IPX(IS_IPv4), "ip%c-config: set IP Config instance (%s)", nm_utils_addr_family_to_char(addr_family), nm_dbus_object_get_path(NM_DBUS_OBJECT(new_config))); } else if (old_config /*&& !new_config*/) { has_changes = TRUE; priv->ip_config_x[IS_IPv4] = NULL; - _LOGD(LOGD_IP_from_af(addr_family), + _LOGD(LOGD_IPX(IS_IPv4), "ip%c-config: clear IP Config instance (%s)", nm_utils_addr_family_to_char(addr_family), nm_dbus_object_get_path(NM_DBUS_OBJECT(old_config))); @@ -13671,7 +13585,7 @@ void nm_device_set_dev2_ip_config(NMDevice *self, int addr_family, NMIPConfig *config) { NMDevicePrivate *priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_if_fail(NM_IS_DEVICE(self)); g_return_if_fail(NM_IN_SET(addr_family, AF_INET, AF_INET6)); @@ -14221,7 +14135,7 @@ update_ext_ip_config(NMDevice *self, int addr_family, gboolean intersect_configs is_up = nm_platform_link_is_up(nm_device_get_platform(self), ifindex); - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { g_clear_object(&priv->ext_ip_config_4); priv->ext_ip_config_4 = nm_ip4_config_capture(nm_device_get_multi_index(self), nm_device_get_platform(self), @@ -14270,7 +14184,7 @@ update_ext_ip_config(NMDevice *self, int addr_family, gboolean intersect_configs } } else { - nm_assert(addr_family == AF_INET6); + nm_assert(!NM_IS_IPv4(addr_family)); g_clear_object(&priv->ext_ip_config_6); g_clear_object(&priv->ext_ip6_config_captured); @@ -14345,13 +14259,13 @@ update_ip_config(NMDevice *self, int addr_family) nm_assert_addr_family(addr_family); - if (addr_family == AF_INET) + if (NM_IS_IPv4(addr_family)) priv->update_ip_config_completed_v4 = TRUE; else priv->update_ip_config_completed_v6 = TRUE; if (update_ext_ip_config(self, addr_family, TRUE)) { - if (addr_family == AF_INET) { + if (NM_IS_IPv4(addr_family)) { if (priv->ext_ip_config_4) ip_config_merge_and_apply(self, AF_INET, FALSE); } else { @@ -14376,7 +14290,7 @@ static gboolean queued_ip_config_change(NMDevice *self, int addr_family) { NMDevicePrivate *priv; - const gboolean IS_IPv4 = (addr_family == AF_INET); + const int IS_IPv4 = NM_IS_IPv4(addr_family); g_return_val_if_fail(NM_IS_DEVICE(self), G_SOURCE_REMOVE); @@ -14391,7 +14305,8 @@ queued_ip_config_change(NMDevice *self, int addr_family) * update in such case. */ if (priv->activation_source_id_x[IS_IPv4] != 0 - && priv->activation_source_func_x[IS_IPv4] == activate_stage5_ip_config_result_x[IS_IPv4]) + && priv->activation_source_func_x[IS_IPv4] + == activate_stage5_ip_config_result_x_fcn(addr_family)) return G_SOURCE_CONTINUE; priv->queued_ip_config_id_x[IS_IPv4] = 0; @@ -15740,6 +15655,7 @@ static void _cleanup_generic_pre(NMDevice *self, CleanupType cleanup_type) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); + guint i; _cancel_activation(self); @@ -15764,6 +15680,9 @@ _cleanup_generic_pre(NMDevice *self, CleanupType cleanup_type) nm_clear_pointer(&priv->shared_ip_handle, nm_netns_shared_ip_release); + for (i = 0; i < 2; i++) + nm_clear_pointer(&priv->hostname_resolver_x[i], _hostname_resolver_free); + _cleanup_ip_pre(self, AF_INET, cleanup_type); _cleanup_ip_pre(self, AF_INET6, cleanup_type); } @@ -17589,6 +17508,178 @@ nm_device_auth_retries_try_next(NMDevice *self) return TRUE; } +static void +hostname_dns_lookup_callback(GObject *source, GAsyncResult *result, gpointer user_data) +{ + HostnameResolver *resolver; + NMDevice * self; + gs_free char * hostname = NULL; + gs_free char * addr_str = NULL; + gs_free_error GError *error = NULL; + + hostname = g_resolver_lookup_by_address_finish(G_RESOLVER(source), result, &error); + if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + + resolver = user_data; + self = resolver->device; + resolver->state = RESOLVER_DONE; + resolver->hostname = g_strdup(hostname); + + _LOGD(LOGD_DNS, + "hostname-from-dns: lookup done for %s, result %s%s%s", + (addr_str = g_inet_address_to_string(resolver->address)), + NM_PRINT_FMT_QUOTE_STRING(hostname)); + + nm_clear_g_cancellable(&resolver->cancellable); + g_signal_emit(self, signals[DNS_LOOKUP_DONE], 0); +} + +static gboolean +hostname_dns_address_timeout(gpointer user_data) +{ + HostnameResolver *resolver = user_data; + NMDevice * self = resolver->device; + + g_return_val_if_fail(NM_IS_DEVICE(self), G_SOURCE_REMOVE); + + nm_assert(resolver->state == RESOLVER_WAIT_ADDRESS); + nm_assert(!resolver->address); + nm_assert(!resolver->cancellable); + + _LOGT(LOGD_DNS, + "hostname-from-dns: timed out while waiting IPv%c address", + nm_utils_addr_family_to_char(resolver->addr_family)); + + resolver->timeout_id = 0; + resolver->state = RESOLVER_DONE; + g_signal_emit(self, signals[DNS_LOOKUP_DONE], 0); + + return G_SOURCE_REMOVE; +} + +/* return value is valid only immediately */ +const char * +nm_device_get_hostname_from_dns_lookup(NMDevice *self, int addr_family, gboolean *out_wait) +{ + NMDevicePrivate * priv; + const int IS_IPv4 = NM_IS_IPv4(addr_family); + HostnameResolver *resolver; + NMIPConfig * ip_config; + const char * method; + gboolean address_changed = FALSE; + gs_unref_object GInetAddress *new_address = NULL; + + g_return_val_if_fail(NM_IS_DEVICE(self), NULL); + priv = NM_DEVICE_GET_PRIVATE(self); + + /* If the device is not supposed to have addresses, + * return an immediate empty result.*/ + method = nm_device_get_effective_ip_config_method(self, addr_family); + if (IS_IPv4) { + if (NM_IN_STRSET(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) { + nm_clear_pointer(&priv->hostname_resolver_x[IS_IPv4], _hostname_resolver_free); + NM_SET_OUT(out_wait, FALSE); + return NULL; + } + } else { + if (NM_IN_STRSET(method, + NM_SETTING_IP6_CONFIG_METHOD_DISABLED, + NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) { + nm_clear_pointer(&priv->hostname_resolver_x[IS_IPv4], _hostname_resolver_free); + NM_SET_OUT(out_wait, FALSE); + return NULL; + } + } + + resolver = priv->hostname_resolver_x[IS_IPv4]; + if (!resolver) { + resolver = g_slice_new(HostnameResolver); + *resolver = (HostnameResolver){ + .resolver = g_resolver_get_default(), + .device = self, + .addr_family = addr_family, + .state = RESOLVER_WAIT_ADDRESS, + }; + priv->hostname_resolver_x[IS_IPv4] = resolver; + } + + /* Determine the first address of the interface and + * whether it changed from the previous lookup */ + ip_config = priv->ip_config_x[IS_IPv4]; + if (ip_config) { + const NMPlatformIPAddress *addr; + + addr = nm_ip_config_get_first_address(ip_config); + if (addr) { + new_address = g_inet_address_new_from_bytes(addr->address_ptr, + IS_IPv4 ? G_SOCKET_FAMILY_IPV4 + : G_SOCKET_FAMILY_IPV6); + } + } + + if (new_address && resolver->address) { + if (!g_inet_address_equal(new_address, resolver->address)) + address_changed = TRUE; + } else if (new_address != resolver->address) + address_changed = TRUE; + + { + gs_free char *old_str = NULL; + gs_free char *new_str = NULL; + + _LOGT(LOGD_DNS, + "hostname-from-dns: ipv%c resolver state %d, old address %s, new address %s", + nm_utils_addr_family_to_char(resolver->addr_family), + resolver->state, + resolver->address ? (old_str = g_inet_address_to_string(resolver->address)) + : "(null)", + new_address ? (new_str = g_inet_address_to_string(new_address)) : "(null)"); + } + + /* In every state, if the address changed, we restart + * the resolution with the new address */ + if (address_changed) { + nm_clear_g_cancellable(&resolver->cancellable); + nm_g_object_unref(resolver->address); + resolver->state = RESOLVER_WAIT_ADDRESS; + } + + if (address_changed && new_address) { + gs_free char *str = NULL; + + _LOGT(LOGD_DNS, + "hostname-from-dns: starting lookup for address %s", + (str = g_inet_address_to_string(new_address))); + + resolver->state = RESOLVER_IN_PROGRESS; + resolver->cancellable = g_cancellable_new(); + resolver->address = g_steal_pointer(&new_address); + g_resolver_lookup_by_address_async(resolver->resolver, + resolver->address, + resolver->cancellable, + hostname_dns_lookup_callback, + resolver); + nm_clear_g_source(&resolver->timeout_id); + } + + switch (resolver->state) { + case RESOLVER_WAIT_ADDRESS: + if (!resolver->timeout_id) + resolver->timeout_id = g_timeout_add(30000, hostname_dns_address_timeout, resolver); + NM_SET_OUT(out_wait, TRUE); + return NULL; + case RESOLVER_IN_PROGRESS: + NM_SET_OUT(out_wait, TRUE); + return NULL; + case RESOLVER_DONE: + NM_SET_OUT(out_wait, FALSE); + return resolver->hostname; + } + + return nm_assert_unreachable_val(NULL); +} + /*****************************************************************************/ static const char * @@ -18766,6 +18857,16 @@ nm_device_class_init(NMDeviceClass *klass) NULL, G_TYPE_NONE, 0); + + signals[DNS_LOOKUP_DONE] = g_signal_new(NM_DEVICE_DNS_LOOKUP_DONE, + G_OBJECT_CLASS_TYPE(object_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 0); } /* Connection defaults from plugins */ diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h index 3eae931834..2885bcbb80 100644 --- a/src/devices/nm-device.h +++ b/src/devices/nm-device.h @@ -116,6 +116,7 @@ nm_device_state_reason_check(NMDeviceStateReason reason) #define NM_DEVICE_HAS_PENDING_ACTION "has-pending-action" /* Internal only */ /* Internal signals */ +#define NM_DEVICE_DNS_LOOKUP_DONE "dns-lookup-done" #define NM_DEVICE_IP4_CONFIG_CHANGED "ip4-config-changed" #define NM_DEVICE_IP6_CONFIG_CHANGED "ip6-config-changed" #define NM_DEVICE_IP6_PREFIX_DELEGATED "ip6-prefix-delegated" @@ -456,6 +457,8 @@ typedef struct _NMDeviceClass { bool act_stage1_prepare_set_hwaddr_ethernet : 1; + bool can_reapply_change_ovs_external_ids : 1; + } NMDeviceClass; GType nm_device_get_type(void); @@ -800,12 +803,10 @@ void nm_device_reapply_settings_immediately(NMDevice *self); void nm_device_update_firewall_zone(NMDevice *self); void nm_device_update_metered(NMDevice *self); -void nm_device_reactivate_ip4_config(NMDevice * device, - NMSettingIPConfig *s_ip4_old, - NMSettingIPConfig *s_ip4_new); -void nm_device_reactivate_ip6_config(NMDevice * device, - NMSettingIPConfig *s_ip6_old, - NMSettingIPConfig *s_ip6_new); +void nm_device_reactivate_ip_config(NMDevice * device, + int addr_family, + NMSettingIPConfig *s_ip_old, + NMSettingIPConfig *s_ip_new); gboolean nm_device_update_hw_address(NMDevice *self); void nm_device_update_initial_hw_address(NMDevice *self); @@ -865,4 +866,7 @@ const char *nm_device_state_reason_to_str(NMDeviceStateReason reason); gboolean nm_device_is_vpn(NMDevice *self); +const char * +nm_device_get_hostname_from_dns_lookup(NMDevice *self, int addr_family, gboolean *out_pending); + #endif /* __NETWORKMANAGER_DEVICE_H__ */ diff --git a/src/devices/nm-lldp-listener.c b/src/devices/nm-lldp-listener.c index 25d863c869..6e57e09fa2 100644 --- a/src/devices/nm-lldp-listener.c +++ b/src/devices/nm-lldp-listener.c @@ -1075,7 +1075,7 @@ nm_lldp_listener_init(NMLldpListener *self) NMLldpListener * nm_lldp_listener_new(void) { - return (NMLldpListener *) g_object_new(NM_TYPE_LLDP_LISTENER, NULL); + return g_object_new(NM_TYPE_LLDP_LISTENER, NULL); } static void diff --git a/src/devices/ovs/nm-device-ovs-bridge.c b/src/devices/ovs/nm-device-ovs-bridge.c index a7b7a539e2..d3a41edde6 100644 --- a/src/devices/ovs/nm-device-ovs-bridge.c +++ b/src/devices/ovs/nm-device-ovs-bridge.c @@ -6,6 +6,8 @@ #include "nm-default.h" #include "nm-device-ovs-bridge.h" + +#include "nm-device-ovs-interface.h" #include "nm-device-ovs-port.h" #include "nm-ovsdb.h" @@ -13,9 +15,11 @@ #include "nm-active-connection.h" #include "nm-setting-connection.h" #include "nm-setting-ovs-bridge.h" +#include "nm-setting-ovs-external-ids.h" +#include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceOvsBridge #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceOvsBridge); /*****************************************************************************/ @@ -87,6 +91,39 @@ static void release_slave(NMDevice *device, NMDevice *slave, gboolean configure) {} +void +nm_device_ovs_reapply_connection(NMDevice *self, NMConnection *con_old, NMConnection *con_new) +{ + NMDeviceType device_type; + GType type; + + nm_assert(NM_IS_DEVICE(self)); + nm_assert(g_type_parent(G_TYPE_FROM_INSTANCE(self)) == NM_TYPE_DEVICE); + + /* NMDevice's reapply_connection() doesn't do anything. No need to call the parent + * implementation. */ + + _LOGD(LOGD_DEVICE, "reapplying settings for OVS device"); + + type = G_OBJECT_TYPE(self); + if (type == NM_TYPE_DEVICE_OVS_INTERFACE) + device_type = NM_DEVICE_TYPE_OVS_INTERFACE; + else if (type == NM_TYPE_DEVICE_OVS_PORT) + device_type = NM_DEVICE_TYPE_OVS_PORT; + else { + nm_assert(type == NM_TYPE_DEVICE_OVS_BRIDGE); + device_type = NM_DEVICE_TYPE_OVS_BRIDGE; + } + + nm_ovsdb_set_external_ids( + nm_ovsdb_get(), + device_type, + nm_device_get_ip_iface(self), + nm_connection_get_uuid(con_new), + _nm_connection_get_setting(con_old, NM_TYPE_SETTING_OVS_EXTERNAL_IDS), + _nm_connection_get_setting(con_new, NM_TYPE_SETTING_OVS_EXTERNAL_IDS)); +} + /*****************************************************************************/ static void @@ -114,12 +151,14 @@ nm_device_ovs_bridge_class_init(NMDeviceOvsBridgeClass *klass) device_class->connection_type_check_compatible = NM_SETTING_OVS_BRIDGE_SETTING_NAME; device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(); - device_class->is_master = TRUE; - device_class->get_type_description = get_type_description; - device_class->create_and_realize = create_and_realize; - device_class->unrealize = unrealize; - device_class->get_generic_capabilities = get_generic_capabilities; - device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; - device_class->enslave_slave = enslave_slave; - device_class->release_slave = release_slave; + device_class->is_master = TRUE; + device_class->get_type_description = get_type_description; + device_class->create_and_realize = create_and_realize; + device_class->unrealize = unrealize; + device_class->get_generic_capabilities = get_generic_capabilities; + device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; + device_class->enslave_slave = enslave_slave; + device_class->release_slave = release_slave; + device_class->can_reapply_change_ovs_external_ids = TRUE; + device_class->reapply_connection = nm_device_ovs_reapply_connection; } diff --git a/src/devices/ovs/nm-device-ovs-bridge.h b/src/devices/ovs/nm-device-ovs-bridge.h index ba04bfebdd..304babdce1 100644 --- a/src/devices/ovs/nm-device-ovs-bridge.h +++ b/src/devices/ovs/nm-device-ovs-bridge.h @@ -22,4 +22,9 @@ typedef struct _NMDeviceOvsBridgeClass NMDeviceOvsBridgeClass; GType nm_device_ovs_bridge_get_type(void); +/*****************************************************************************/ + +void +nm_device_ovs_reapply_connection(NMDevice *device, NMConnection *con_old, NMConnection *con_new); + #endif /* __NETWORKMANAGER_DEVICE_OVS_BRIDGE_H__ */ diff --git a/src/devices/ovs/nm-device-ovs-interface.c b/src/devices/ovs/nm-device-ovs-interface.c index 16b6e04da0..a438fa6345 100644 --- a/src/devices/ovs/nm-device-ovs-interface.c +++ b/src/devices/ovs/nm-device-ovs-interface.c @@ -6,6 +6,8 @@ #include "nm-default.h" #include "nm-device-ovs-interface.h" + +#include "nm-device-ovs-bridge.h" #include "nm-ovsdb.h" #include "devices/nm-device-private.h" @@ -14,8 +16,8 @@ #include "nm-setting-ovs-interface.h" #include "nm-setting-ovs-port.h" +#define _NMLOG_DEVICE_TYPE NMDeviceOvsInterface #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceOvsInterface); /*****************************************************************************/ @@ -382,17 +384,19 @@ nm_device_ovs_interface_class_init(NMDeviceOvsInterfaceClass *klass) device_class->connection_type_check_compatible = NM_SETTING_OVS_INTERFACE_SETTING_NAME; device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(NM_LINK_TYPE_OPENVSWITCH); - device_class->can_update_from_platform_link = can_update_from_platform_link; - device_class->deactivate = deactivate; - device_class->deactivate_async = deactivate_async; - device_class->get_type_description = get_type_description; - device_class->create_and_realize = create_and_realize; - device_class->get_generic_capabilities = get_generic_capabilities; - device_class->is_available = is_available; - device_class->check_connection_compatible = check_connection_compatible; - device_class->link_changed = link_changed; - device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; - device_class->can_unmanaged_external_down = can_unmanaged_external_down; - device_class->set_platform_mtu = set_platform_mtu; - device_class->get_configured_mtu = nm_device_get_configured_mtu_for_wired; + device_class->can_update_from_platform_link = can_update_from_platform_link; + device_class->deactivate = deactivate; + device_class->deactivate_async = deactivate_async; + device_class->get_type_description = get_type_description; + device_class->create_and_realize = create_and_realize; + device_class->get_generic_capabilities = get_generic_capabilities; + device_class->is_available = is_available; + device_class->check_connection_compatible = check_connection_compatible; + device_class->link_changed = link_changed; + device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; + device_class->can_unmanaged_external_down = can_unmanaged_external_down; + device_class->set_platform_mtu = set_platform_mtu; + device_class->get_configured_mtu = nm_device_get_configured_mtu_for_wired; + device_class->can_reapply_change_ovs_external_ids = TRUE; + device_class->reapply_connection = nm_device_ovs_reapply_connection; } diff --git a/src/devices/ovs/nm-device-ovs-port.c b/src/devices/ovs/nm-device-ovs-port.c index de98e29e06..d77b475a03 100644 --- a/src/devices/ovs/nm-device-ovs-port.c +++ b/src/devices/ovs/nm-device-ovs-port.c @@ -6,7 +6,9 @@ #include "nm-default.h" #include "nm-device-ovs-port.h" + #include "nm-device-ovs-interface.h" +#include "nm-device-ovs-bridge.h" #include "nm-ovsdb.h" #include "devices/nm-device-private.h" @@ -15,8 +17,8 @@ #include "nm-setting-ovs-port.h" #include "nm-setting-ovs-port.h" +#define _NMLOG_DEVICE_TYPE NMDeviceOvsPort #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceOvsPort); /*****************************************************************************/ @@ -182,11 +184,13 @@ nm_device_ovs_port_class_init(NMDeviceOvsPortClass *klass) device_class->connection_type_check_compatible = NM_SETTING_OVS_PORT_SETTING_NAME; device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(); - device_class->is_master = TRUE; - device_class->get_type_description = get_type_description; - device_class->create_and_realize = create_and_realize; - device_class->get_generic_capabilities = get_generic_capabilities; - device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; - device_class->enslave_slave = enslave_slave; - device_class->release_slave = release_slave; + device_class->is_master = TRUE; + device_class->get_type_description = get_type_description; + device_class->create_and_realize = create_and_realize; + device_class->get_generic_capabilities = get_generic_capabilities; + device_class->act_stage3_ip_config_start = act_stage3_ip_config_start; + device_class->enslave_slave = enslave_slave; + device_class->release_slave = release_slave; + device_class->can_reapply_change_ovs_external_ids = TRUE; + device_class->reapply_connection = nm_device_ovs_reapply_connection; } diff --git a/src/devices/ovs/nm-ovs-factory.c b/src/devices/ovs/nm-ovs-factory.c index e1feacbd02..2a4667f074 100644 --- a/src/devices/ovs/nm-ovs-factory.c +++ b/src/devices/ovs/nm-ovs-factory.c @@ -64,7 +64,7 @@ G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { nm_manager_set_capability(NM_MANAGER_GET, NM_CAPABILITY_OVS); - return (NMDeviceFactory *) g_object_new(NM_TYPE_OVS_FACTORY, NULL); + return g_object_new(NM_TYPE_OVS_FACTORY, NULL); } static NMDevice * @@ -106,12 +106,10 @@ new_device_from_type(const char *name, NMDeviceType device_type) } static void -ovsdb_device_added(NMOvsdb * ovsdb, - const char * name, - NMDeviceType device_type, - NMDeviceFactory *self) +ovsdb_device_added(NMOvsdb *ovsdb, const char *name, guint device_type_i, NMDeviceFactory *self) { - NMDevice *device = NULL; + const NMDeviceType device_type = device_type_i; + NMDevice * device; device = new_device_from_type(name, device_type); if (!device) @@ -122,13 +120,11 @@ ovsdb_device_added(NMOvsdb * ovsdb, } static void -ovsdb_device_removed(NMOvsdb * ovsdb, - const char * name, - NMDeviceType device_type, - NMDeviceFactory *self) +ovsdb_device_removed(NMOvsdb *ovsdb, const char *name, guint device_type_i, NMDeviceFactory *self) { - NMDevice * device; - NMDeviceState device_state; + const NMDeviceType device_type = device_type_i; + NMDevice * device; + NMDeviceState device_state; device = nm_manager_get_device(NM_MANAGER_GET, name, device_type); if (!device) diff --git a/src/devices/ovs/nm-ovsdb.c b/src/devices/ovs/nm-ovsdb.c index 27ef789f77..08bf573880 100644 --- a/src/devices/ovs/nm-ovsdb.c +++ b/src/devices/ovs/nm-ovsdb.c @@ -11,9 +11,15 @@ #include <gio/gunixsocketaddress.h> #include "nm-glib-aux/nm-jansson.h" +#include "nm-glib-aux/nm-str-buf.h" #include "nm-core-utils.h" #include "nm-core-internal.h" #include "devices/nm-device.h" +#include "nm-setting-ovs-external-ids.h" + +/*****************************************************************************/ + +#define OVSDB_MAX_FAILURES 3 /*****************************************************************************/ @@ -22,25 +28,84 @@ #endif typedef struct { + char * port_uuid; char * name; char * connection_uuid; GPtrArray *interfaces; /* interface uuids */ + GArray * external_ids; } OpenvswitchPort; typedef struct { + char * bridge_uuid; char * name; char * connection_uuid; GPtrArray *ports; /* port uuids */ + GArray * external_ids; } OpenvswitchBridge; typedef struct { - char *name; - char *type; - char *connection_uuid; + char * interface_uuid; + char * name; + char * type; + char * connection_uuid; + GArray *external_ids; } OpenvswitchInterface; /*****************************************************************************/ +typedef void (*OvsdbMethodCallback)(NMOvsdb *self, + json_t * response, + GError * error, + gpointer user_data); + +typedef enum { + OVSDB_MONITOR, + OVSDB_ADD_INTERFACE, + OVSDB_DEL_INTERFACE, + OVSDB_SET_INTERFACE_MTU, + OVSDB_SET_EXTERNAL_IDS, +} OvsdbCommand; + +#define CALL_ID_UNSPEC G_MAXUINT64 + +typedef union { + struct { + } monitor; + struct { + NMConnection *bridge; + NMConnection *port; + NMConnection *interface; + NMDevice * bridge_device; + NMDevice * interface_device; + } add_interface; + struct { + char *ifname; + } del_interface; + struct { + char * ifname; + guint32 mtu; + } set_interface_mtu; + struct { + NMDeviceType device_type; + char * ifname; + char * connection_uuid; + GHashTable * exid_old; + GHashTable * exid_new; + } set_external_ids; +} OvsdbMethodPayload; + +typedef struct { + NMOvsdb * self; + CList calls_lst; + guint64 call_id; + OvsdbCommand command; + OvsdbMethodCallback callback; + gpointer user_data; + OvsdbMethodPayload payload; +} OvsdbMethodCall; + +/*****************************************************************************/ + enum { DEVICE_ADDED, DEVICE_REMOVED, INTERFACE_FAILED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0}; @@ -53,13 +118,15 @@ typedef struct { size_t bufp; /* Last decoded byte in the input buffer. */ GString * input; /* JSON stream waiting for decoding. */ GString * output; /* JSON stream to be sent. */ - gint64 seq; - GArray * calls; /* Method calls waiting for a response. */ - GHashTable * interfaces; /* interface uuid => OpenvswitchInterface */ - GHashTable * ports; /* port uuid => OpenvswitchPort */ - GHashTable * bridges; /* bridge uuid => OpenvswitchBridge */ - char * db_uuid; - guint num_failures; + guint64 call_id_counter; + + CList calls_lst_head; + + GHashTable *interfaces; /* interface uuid => OpenvswitchInterface */ + GHashTable *ports; /* port uuid => OpenvswitchPort */ + GHashTable *bridges; /* bridge uuid => OpenvswitchBridge */ + char * db_uuid; + guint num_failures; } NMOvsdbPrivate; struct _NMOvsdb { @@ -75,9 +142,6 @@ G_DEFINE_TYPE(NMOvsdb, nm_ovsdb, G_TYPE_OBJECT) #define NM_OVSDB_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMOvsdb, NM_IS_OVSDB) -#define _NMLOG_DOMAIN LOGD_DEVICE -#define _NMLOG(level, ...) __NMLOG_DEFAULT(level, _NMLOG_DOMAIN, "ovsdb", __VA_ARGS__) - NM_DEFINE_SINGLETON_GETTER(NMOvsdb, nm_ovsdb_get, NM_TYPE_OVSDB); /*****************************************************************************/ @@ -90,89 +154,200 @@ static void ovsdb_next_command(NMOvsdb *self); /*****************************************************************************/ -/* ovsdb command abstraction. */ +#define _NMLOG_DOMAIN LOGD_DEVICE +#define _NMLOG(level, ...) __NMLOG_DEFAULT(level, _NMLOG_DOMAIN, "ovsdb", __VA_ARGS__) -typedef void (*OvsdbMethodCallback)(NMOvsdb *self, - json_t * response, - GError * error, - gpointer user_data); +#define _NMLOG_call(level, call, ...) \ + _NMLOG((level), \ + "call[" NM_HASH_OBFUSCATE_PTR_FMT "]: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ + NM_HASH_OBFUSCATE_PTR((call)) _NM_UTILS_MACRO_REST(__VA_ARGS__)) -typedef enum { - OVSDB_MONITOR, - OVSDB_ADD_INTERFACE, - OVSDB_DEL_INTERFACE, - OVSDB_SET_INTERFACE_MTU, -} OvsdbCommand; +#define _LOGT_call(call, ...) _NMLOG_call(LOGL_TRACE, (call), __VA_ARGS__) -typedef struct { - gint64 id; -#define COMMAND_PENDING -1 /* id not yet assigned */ - OvsdbCommand command; - OvsdbMethodCallback callback; - gpointer user_data; - union { - struct { - char * ifname; - guint32 mtu; - }; - struct { - NMConnection *bridge; - NMConnection *port; - NMConnection *interface; - NMDevice * bridge_device; - NMDevice * interface_device; - }; - }; -} OvsdbMethodCall; +/*****************************************************************************/ -#define OVSDB_MAX_FAILURES 3 +#define OVSDB_METHOD_PAYLOAD_MONITOR() \ + (&((const OvsdbMethodPayload){ \ + .monitor = {}, \ + })) + +#define OVSDB_METHOD_PAYLOAD_ADD_INTERFACE(xbridge, \ + xport, \ + xinterface, \ + xbridge_device, \ + xinterface_device) \ + (&((const OvsdbMethodPayload){ \ + .add_interface = \ + { \ + .bridge = (xbridge), \ + .port = (xport), \ + .interface = (xinterface), \ + .bridge_device = (xbridge_device), \ + .interface_device = (xinterface_device), \ + }, \ + })) + +#define OVSDB_METHOD_PAYLOAD_DEL_INTERFACE(xifname) \ + (&((const OvsdbMethodPayload){ \ + .del_interface = \ + { \ + .ifname = (char *) NM_CONSTCAST(char, (xifname)), \ + }, \ + })) + +#define OVSDB_METHOD_PAYLOAD_SET_INTERFACE_MTU(xifname, xmtu) \ + (&((const OvsdbMethodPayload){ \ + .set_interface_mtu = \ + { \ + .ifname = (char *) NM_CONSTCAST(char, (xifname)), \ + .mtu = (xmtu), \ + }, \ + })) + +#define OVSDB_METHOD_PAYLOAD_SET_EXTERNAL_IDS(xdevice_type, \ + xifname, \ + xconnection_uuid, \ + xexid_old, \ + xexid_new) \ + (&((const OvsdbMethodPayload){ \ + .set_external_ids = \ + { \ + .device_type = xdevice_type, \ + .ifname = (char *) NM_CONSTCAST(char, (xifname)), \ + .connection_uuid = (char *) NM_CONSTCAST(char, (xconnection_uuid)), \ + .exid_old = (xexid_old), \ + .exid_new = (xexid_new), \ + }, \ + })) + +/*****************************************************************************/ + +static NM_UTILS_LOOKUP_STR_DEFINE(_device_type_to_table, + NMDeviceType, + NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT(NULL), + NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_TYPE_OVS_BRIDGE, "Bridge"), + NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_TYPE_OVS_PORT, "Port"), + NM_UTILS_LOOKUP_STR_ITEM(NM_DEVICE_TYPE_OVS_INTERFACE, + "Interface"), + NM_UTILS_LOOKUP_ITEM_IGNORE_OTHER(), ); + +/*****************************************************************************/ static void -_LOGT_call_do(const char *comment, OvsdbMethodCall *call, json_t *msg) +_call_complete(OvsdbMethodCall *call, json_t *response, GError *error) { - gs_free char *str = NULL; + if (response) { + gs_free char *str = NULL; + + str = json_dumps(response, 0); + if (error) + _LOGT_call(call, "completed: %s ; error: %s", str, error->message); + else + _LOGT_call(call, "completed: %s", str); + } else { + nm_assert(error); + _LOGT_call(call, "completed: error: %s", error->message); + } - if (msg) - str = json_dumps(msg, 0); + c_list_unlink_stale(&call->calls_lst); + + if (call->callback) + call->callback(call->self, response, error, call->user_data); switch (call->command) { case OVSDB_MONITOR: - _LOGT("%s: monitor%s%s", comment, msg ? ": " : "", msg ? str : ""); break; case OVSDB_ADD_INTERFACE: - _LOGT("%s: add-iface bridge=%s port=%s interface=%s%s%s", - comment, - nm_connection_get_interface_name(call->bridge), - nm_connection_get_interface_name(call->port), - nm_connection_get_interface_name(call->interface), - msg ? ": " : "", - msg ? str : ""); + g_clear_object(&call->payload.add_interface.bridge); + g_clear_object(&call->payload.add_interface.port); + g_clear_object(&call->payload.add_interface.interface); + g_clear_object(&call->payload.add_interface.bridge_device); + g_clear_object(&call->payload.add_interface.interface_device); break; case OVSDB_DEL_INTERFACE: - _LOGT("%s: del-iface interface=%s%s%s", - comment, - call->ifname, - msg ? ": " : "", - msg ? str : ""); + nm_clear_g_free(&call->payload.del_interface.ifname); break; case OVSDB_SET_INTERFACE_MTU: - _LOGT("%s: set-iface-mtu interface=%s%s%s mtu=%u", - comment, - call->ifname, - msg ? ": " : "", - msg ? str : "", - call->mtu); + nm_clear_g_free(&call->payload.set_interface_mtu.ifname); + break; + case OVSDB_SET_EXTERNAL_IDS: + nm_clear_g_free(&call->payload.set_external_ids.ifname); + nm_clear_g_free(&call->payload.set_external_ids.connection_uuid); + nm_clear_pointer(&call->payload.set_external_ids.exid_old, g_hash_table_destroy); + nm_clear_pointer(&call->payload.set_external_ids.exid_new, g_hash_table_destroy); break; } + + nm_g_slice_free(call); } -#define _LOGT_call(comment, call, message) \ - G_STMT_START \ - { \ - if (_LOGT_ENABLED()) \ - _LOGT_call_do((comment), (call), (message)); \ - } \ - G_STMT_END +/*****************************************************************************/ + +static void +_free_bridge(OpenvswitchBridge *ovs_bridge) +{ + g_free(ovs_bridge->bridge_uuid); + g_free(ovs_bridge->name); + g_free(ovs_bridge->connection_uuid); + g_ptr_array_free(ovs_bridge->ports, TRUE); + nm_g_array_unref(ovs_bridge->external_ids); + nm_g_slice_free(ovs_bridge); +} + +static void +_free_port(OpenvswitchPort *ovs_port) +{ + g_free(ovs_port->port_uuid); + g_free(ovs_port->name); + g_free(ovs_port->connection_uuid); + g_ptr_array_free(ovs_port->interfaces, TRUE); + nm_g_array_unref(ovs_port->external_ids); + nm_g_slice_free(ovs_port); +} + +static void +_free_interface(OpenvswitchInterface *ovs_interface) +{ + g_free(ovs_interface->interface_uuid); + g_free(ovs_interface->name); + g_free(ovs_interface->connection_uuid); + g_free(ovs_interface->type); + nm_g_array_unref(ovs_interface->external_ids); + nm_g_slice_free(ovs_interface); +} + +static gboolean +_openvswitch_interface_should_emit_signal(const OpenvswitchInterface *ovs_interface) +{ + /* Currently, the factory only creates NMDevices for + * internal interfaces. We ignore the rest. */ + return nm_streq0(ovs_interface->type, "internal"); +} + +/*****************************************************************************/ + +static void +_signal_emit_device_added(NMOvsdb *self, const char *name, NMDeviceType device_type) +{ + g_signal_emit(self, signals[DEVICE_ADDED], 0, name, (guint) device_type); +} + +static void +_signal_emit_device_removed(NMOvsdb *self, const char *name, NMDeviceType device_type) +{ + g_signal_emit(self, signals[DEVICE_REMOVED], 0, name, (guint) device_type); +} + +static void +_signal_emit_interface_failed(NMOvsdb * self, + const char *name, + const char *connection_uuid, + const char *error) +{ + g_signal_emit(self, signals[INTERFACE_FAILED], 0, name, connection_uuid, error); +} + +/*****************************************************************************/ /** * ovsdb_call_method: @@ -181,18 +356,12 @@ _LOGT_call_do(const char *comment, OvsdbMethodCall *call, json_t *msg) * there's no command pending completion. */ static void -ovsdb_call_method(NMOvsdb * self, - OvsdbCommand command, - const char * ifname, - NMConnection * bridge, - NMConnection * port, - NMConnection * interface, - NMDevice * bridge_device, - NMDevice * interface_device, - guint32 mtu, - OvsdbMethodCallback callback, - gpointer user_data, - gboolean add_first) +ovsdb_call_method(NMOvsdb * self, + OvsdbMethodCallback callback, + gpointer user_data, + gboolean add_first, + OvsdbCommand command, + const OvsdbMethodPayload *payload) { NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); OvsdbMethodCall *call; @@ -200,39 +369,76 @@ ovsdb_call_method(NMOvsdb * self, /* Ensure we're not unsynchronized before we queue the method call. */ ovsdb_try_connect(self); - if (add_first) { - g_array_prepend_val(priv->calls, (OvsdbMethodCall){}); - call = &g_array_index(priv->calls, OvsdbMethodCall, 0); - } else { - g_array_set_size(priv->calls, priv->calls->len + 1); - call = &g_array_index(priv->calls, OvsdbMethodCall, priv->calls->len - 1); - } - call->id = COMMAND_PENDING; - call->command = command; - call->callback = callback; - call->user_data = user_data; + call = g_slice_new(OvsdbMethodCall); + *call = (OvsdbMethodCall){ + .self = self, + .call_id = CALL_ID_UNSPEC, + .command = command, + .callback = callback, + .user_data = user_data, + }; - switch (call->command) { + if (add_first) + c_list_link_front(&priv->calls_lst_head, &call->calls_lst); + else + c_list_link_tail(&priv->calls_lst_head, &call->calls_lst); + + /* Migrate the arguments from @payload to @call->payload. Technically, + * this is not a plain copy, because + * - call->payload is not initialized (thus no need to free the previous data). + * - payload does not own the data. It is merely initialized using the + * OVSDB_METHOD_PAYLOAD_*() macros. */ + switch (command) { case OVSDB_MONITOR: + _LOGT_call(call, "new: monitor"); break; case OVSDB_ADD_INTERFACE: - call->bridge = nm_simple_connection_new_clone(bridge); - call->port = nm_simple_connection_new_clone(port); - call->interface = nm_simple_connection_new_clone(interface); - call->bridge_device = g_object_ref(bridge_device); - call->interface_device = g_object_ref(interface_device); + /* FIXME(applied-connection-immutable): we should not modify the applied + * connection, consequently there is no need to clone the connections. */ + call->payload.add_interface.bridge = + nm_simple_connection_new_clone(payload->add_interface.bridge); + call->payload.add_interface.port = + nm_simple_connection_new_clone(payload->add_interface.port); + call->payload.add_interface.interface = + nm_simple_connection_new_clone(payload->add_interface.interface); + call->payload.add_interface.bridge_device = + g_object_ref(payload->add_interface.bridge_device); + call->payload.add_interface.interface_device = + g_object_ref(payload->add_interface.interface_device); + _LOGT_call(call, + "new: add-interface bridge=%s port=%s interface=%s", + nm_connection_get_interface_name(call->payload.add_interface.bridge), + nm_connection_get_interface_name(call->payload.add_interface.port), + nm_connection_get_interface_name(call->payload.add_interface.interface)); break; case OVSDB_DEL_INTERFACE: - call->ifname = g_strdup(ifname); + call->payload.del_interface.ifname = g_strdup(payload->del_interface.ifname); + _LOGT_call(call, "new: del-interface interface=%s", call->payload.del_interface.ifname); break; case OVSDB_SET_INTERFACE_MTU: - call->ifname = g_strdup(ifname); - call->mtu = mtu; + call->payload.set_interface_mtu.ifname = g_strdup(payload->set_interface_mtu.ifname); + call->payload.set_interface_mtu.mtu = payload->set_interface_mtu.mtu; + _LOGT_call(call, + "new: set-interface-mtu interface=%s mtu=%u", + call->payload.set_interface_mtu.ifname, + call->payload.set_interface_mtu.mtu); + break; + case OVSDB_SET_EXTERNAL_IDS: + call->payload.set_external_ids.device_type = payload->set_external_ids.device_type; + call->payload.set_external_ids.ifname = g_strdup(payload->set_external_ids.ifname); + call->payload.set_external_ids.connection_uuid = + g_strdup(payload->set_external_ids.connection_uuid); + call->payload.set_external_ids.exid_old = + nm_g_hash_table_ref(payload->set_external_ids.exid_old); + call->payload.set_external_ids.exid_new = + nm_g_hash_table_ref(payload->set_external_ids.exid_new); + _LOGT_call(call, + "new: set-external-ids con-uuid=%s, interface=%s", + call->payload.set_external_ids.connection_uuid, + call->payload.set_external_ids.ifname); break; } - _LOGT_call("enqueue", call, NULL); - ovsdb_next_command(self); } @@ -437,6 +643,94 @@ _set_port_interfaces(json_t *params, const char *ifname, json_t *new_interfaces) ifname)); } +static json_t * +_j_create_external_ids_array_new(NMConnection *connection) +{ + json_t * array; + const char *const * external_ids = NULL; + guint n_external_ids = 0; + guint i; + const char * uuid; + NMSettingOvsExternalIDs *s_exid; + + nm_assert(NM_IS_CONNECTION(connection)); + + array = json_array(); + + uuid = nm_connection_get_uuid(connection); + nm_assert(uuid); + json_array_append_new(array, json_pack("[s, s]", NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID, uuid)); + + s_exid = _nm_connection_get_setting(connection, NM_TYPE_SETTING_OVS_EXTERNAL_IDS); + if (s_exid) + external_ids = nm_setting_ovs_external_ids_get_data_keys(s_exid, &n_external_ids); + for (i = 0; i < n_external_ids; i++) { + const char *k = external_ids[i]; + + json_array_append_new( + array, + json_pack("[s, s]", k, nm_setting_ovs_external_ids_get_data(s_exid, k))); + } + + return json_pack("[s, o]", "map", array); +} + +static json_t * +_j_create_external_ids_array_update(const char *connection_uuid, + GHashTable *exid_old, + GHashTable *exid_new) +{ + GHashTableIter iter; + json_t * mutations; + json_t * array; + const char * key; + const char * val; + + nm_assert(connection_uuid); + + mutations = json_array(); + + if (exid_old) { + array = NULL; + g_hash_table_iter_init(&iter, exid_old); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, NULL)) { + if (nm_g_hash_table_contains(exid_new, key)) + continue; + if (NM_STR_HAS_PREFIX(key, NM_OVS_EXTERNAL_ID_NM_PREFIX)) + continue; + + if (!array) + array = json_array(); + + json_array_append_new(array, json_string(key)); + } + if (array) { + json_array_append_new( + mutations, + json_pack("[s, s, [s, o]]", "external_ids", "delete", "set", array)); + } + } + + array = json_array(); + + json_array_append_new( + array, + json_pack("[s, s]", NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID, connection_uuid)); + + if (exid_new) { + g_hash_table_iter_init(&iter, exid_new); + while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) { + if (NM_STR_HAS_PREFIX(key, NM_OVS_EXTERNAL_ID_NM_PREFIX)) + continue; + json_array_append_new(array, json_pack("[s, s]", key, val)); + } + } + + json_array_append_new(mutations, + json_pack("[s, s, [s, o]]", "external_ids", "insert", "map", array)); + return mutations; +} + /** * _insert_interface: * @@ -487,7 +781,7 @@ _insert_interface(json_t * params, json_array_append_new(options, json_array()); } - row = json_pack("{s:s, s:s, s:o, s:[s, [[s, s]]]}", + row = json_pack("{s:s, s:s, s:o, s:o}", "name", nm_connection_get_interface_name(interface), "type", @@ -495,9 +789,7 @@ _insert_interface(json_t * params, "options", options, "external_ids", - "map", - "NM.connection.uuid", - nm_connection_get_uuid(interface)); + _j_create_external_ids_array_new(interface)); if (cloned_mac) json_object_set_new(row, "mac", json_string(cloned_mac)); @@ -562,10 +854,7 @@ _insert_port(json_t *params, NMConnection *port, json_t *new_interfaces) json_object_set_new(row, "name", json_string(nm_connection_get_interface_name(port))); json_object_set_new(row, "interfaces", json_pack("[s, O]", "set", new_interfaces)); - json_object_set_new( - row, - "external_ids", - json_pack("[s, [[s, s]]]", "map", "NM.connection.uuid", nm_connection_get_uuid(port))); + json_object_set_new(row, "external_ids", _j_create_external_ids_array_new(port)); /* Create a new one. */ json_array_append_new(params, @@ -625,10 +914,7 @@ _insert_bridge(json_t * params, json_object_set_new(row, "name", json_string(nm_connection_get_interface_name(bridge))); json_object_set_new(row, "ports", json_pack("[s, O]", "set", new_ports)); - json_object_set_new( - row, - "external_ids", - json_pack("[s, [[s, s]]]", "map", "NM.connection.uuid", nm_connection_get_uuid(bridge))); + json_object_set_new(row, "external_ids", _j_create_external_ids_array_new(bridge)); if (cloned_mac) { json_object_set_new(row, @@ -691,7 +977,6 @@ _add_interface(NMOvsdb * self, { NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); GHashTableIter iter; - const char * bridge_uuid; const char * port_uuid; const char * interface_uuid; const char * bridge_name; @@ -777,43 +1062,43 @@ _add_interface(NMOvsdb * self, } g_hash_table_iter_init(&iter, priv->bridges); - while (g_hash_table_iter_next(&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) { - json_array_append_new(bridges, json_pack("[s, s]", "uuid", bridge_uuid)); + while (g_hash_table_iter_next(&iter, (gpointer) &ovs_bridge, NULL)) { + json_array_append_new(bridges, json_pack("[s, s]", "uuid", ovs_bridge->bridge_uuid)); - if (g_strcmp0(ovs_bridge->name, bridge_name) != 0 - || g_strcmp0(ovs_bridge->connection_uuid, nm_connection_get_uuid(bridge)) != 0) + if (!nm_streq0(ovs_bridge->name, bridge_name) + || !nm_streq0(ovs_bridge->connection_uuid, nm_connection_get_uuid(bridge))) continue; for (pi = 0; pi < ovs_bridge->ports->len; pi++) { port_uuid = g_ptr_array_index(ovs_bridge->ports, pi); - ovs_port = g_hash_table_lookup(priv->ports, port_uuid); + ovs_port = g_hash_table_lookup(priv->ports, &port_uuid); json_array_append_new(ports, json_pack("[s, s]", "uuid", port_uuid)); if (!ovs_port) { /* This would be a violation of ovsdb's reference integrity (a bug). */ - _LOGW("Unknown port '%s' in bridge '%s'", port_uuid, bridge_uuid); - continue; - } else if (strcmp(ovs_port->name, port_name) != 0 - || g_strcmp0(ovs_port->connection_uuid, nm_connection_get_uuid(port)) != 0) { + _LOGW("Unknown port '%s' in bridge '%s'", port_uuid, ovs_bridge->bridge_uuid); continue; } + if (!nm_streq(ovs_port->name, port_name) + || !nm_streq0(ovs_port->connection_uuid, nm_connection_get_uuid(port))) + continue; + for (ii = 0; ii < ovs_port->interfaces->len; ii++) { interface_uuid = g_ptr_array_index(ovs_port->interfaces, ii); - ovs_interface = g_hash_table_lookup(priv->interfaces, interface_uuid); + ovs_interface = g_hash_table_lookup(priv->interfaces, &interface_uuid); json_array_append_new(interfaces, json_pack("[s, s]", "uuid", interface_uuid)); if (!ovs_interface) { /* This would be a violation of ovsdb's reference integrity (a bug). */ _LOGW("Unknown interface '%s' in port '%s'", interface_uuid, port_uuid); - } else if (strcmp(ovs_interface->name, interface_name) == 0 - && g_strcmp0(ovs_interface->connection_uuid, - nm_connection_get_uuid(interface)) - == 0) { - has_interface = TRUE; + continue; } + if (nm_streq(ovs_interface->name, interface_name) + && nm_streq0(ovs_interface->connection_uuid, nm_connection_get_uuid(interface))) + has_interface = TRUE; } break; @@ -869,7 +1154,6 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) { NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); GHashTableIter iter; - char * bridge_uuid; char * port_uuid; char * interface_uuid; OpenvswitchBridge * ovs_bridge; @@ -888,7 +1172,7 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) bridges_changed = FALSE; g_hash_table_iter_init(&iter, priv->bridges); - while (g_hash_table_iter_next(&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) { + while (g_hash_table_iter_next(&iter, (gpointer) &ovs_bridge, NULL)) { nm_auto_decref_json json_t *ports = NULL; nm_auto_decref_json json_t *new_ports = NULL; @@ -896,7 +1180,7 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) new_ports = json_array(); ports_changed = FALSE; - json_array_append_new(bridges, json_pack("[s,s]", "uuid", bridge_uuid)); + json_array_append_new(bridges, json_pack("[s,s]", "uuid", ovs_bridge->bridge_uuid)); for (pi = 0; pi < ovs_bridge->ports->len; pi++) { nm_auto_decref_json json_t *interfaces = NULL; @@ -905,7 +1189,7 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) interfaces = json_array(); new_interfaces = json_array(); port_uuid = g_ptr_array_index(ovs_bridge->ports, pi); - ovs_port = g_hash_table_lookup(priv->ports, port_uuid); + ovs_port = g_hash_table_lookup(priv->ports, &port_uuid); json_array_append_new(ports, json_pack("[s,s]", "uuid", port_uuid)); @@ -913,18 +1197,18 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) if (!ovs_port) { /* This would be a violation of ovsdb's reference integrity (a bug). */ - _LOGW("Unknown port '%s' in bridge '%s'", port_uuid, bridge_uuid); + _LOGW("Unknown port '%s' in bridge '%s'", port_uuid, ovs_bridge->bridge_uuid); continue; } for (ii = 0; ii < ovs_port->interfaces->len; ii++) { interface_uuid = g_ptr_array_index(ovs_port->interfaces, ii); - ovs_interface = g_hash_table_lookup(priv->interfaces, interface_uuid); + ovs_interface = g_hash_table_lookup(priv->interfaces, &interface_uuid); json_array_append_new(interfaces, json_pack("[s,s]", "uuid", interface_uuid)); if (ovs_interface) { - if (strcmp(ovs_interface->name, ifname) == 0) { + if (nm_streq(ovs_interface->name, ifname)) { /* skip the interface */ interfaces_changed = TRUE; continue; @@ -955,7 +1239,7 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) _expect_bridge_ports(params, ovs_bridge->name, ports); _set_bridge_ports(params, ovs_bridge->name, new_ports); } - json_array_append_new(new_bridges, json_pack("[s,s]", "uuid", bridge_uuid)); + json_array_append_new(new_bridges, json_pack("[s,s]", "uuid", ovs_bridge->bridge_uuid)); } } @@ -979,30 +1263,32 @@ static void ovsdb_next_command(NMOvsdb *self) { NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); - OvsdbMethodCall * call = NULL; + OvsdbMethodCall * call; char * cmd; nm_auto_decref_json json_t *msg = NULL; - json_t * params; if (!priv->conn) return; - if (!priv->calls->len) + + if (c_list_is_empty(&priv->calls_lst_head)) return; - call = &g_array_index(priv->calls, OvsdbMethodCall, 0); - if (call->id != COMMAND_PENDING) + + call = c_list_first_entry(&priv->calls_lst_head, OvsdbMethodCall, calls_lst); + if (call->call_id != CALL_ID_UNSPEC) return; - call->id = priv->seq++; + + call->call_id = ++priv->call_id_counter; switch (call->command) { case OVSDB_MONITOR: - msg = json_pack("{s:i, s:s, s:[s, n, {" + msg = json_pack("{s:I, s:s, s:[s, n, {" " s:[{s:[s, s, s]}]," " s:[{s:[s, s, s]}]," " s:[{s:[s, s, s, s]}]," " s:[{s:[]}]" "}]}", "id", - call->id, + (json_int_t) call->call_id, "method", "monitor", "params", @@ -1026,57 +1312,81 @@ ovsdb_next_command(NMOvsdb *self) "Open_vSwitch", "columns"); break; - case OVSDB_ADD_INTERFACE: - params = json_array(); - json_array_append_new(params, json_string("Open_vSwitch")); - json_array_append_new(params, _inc_next_cfg(priv->db_uuid)); - - _add_interface(self, - params, - call->bridge, - call->port, - call->interface, - call->bridge_device, - call->interface_device); + default: + { + json_t *params = NULL; - msg = json_pack("{s:i, s:s, s:o}", "id", call->id, "method", "transact", "params", params); - break; - case OVSDB_DEL_INTERFACE: params = json_array(); json_array_append_new(params, json_string("Open_vSwitch")); json_array_append_new(params, _inc_next_cfg(priv->db_uuid)); - _delete_interface(self, params, call->ifname); + switch (call->command) { + case OVSDB_ADD_INTERFACE: + _add_interface(self, + params, + call->payload.add_interface.bridge, + call->payload.add_interface.port, + call->payload.add_interface.interface, + call->payload.add_interface.bridge_device, + call->payload.add_interface.interface_device); + break; + case OVSDB_DEL_INTERFACE: + _delete_interface(self, params, call->payload.del_interface.ifname); + break; + case OVSDB_SET_INTERFACE_MTU: + json_array_append_new(params, + json_pack("{s:s, s:s, s:{s: I}, s:[[s, s, s]]}", + "op", + "update", + "table", + "Interface", + "row", + "mtu_request", + (json_int_t) call->payload.set_interface_mtu.mtu, + "where", + "name", + "==", + call->payload.set_interface_mtu.ifname)); + break; + case OVSDB_SET_EXTERNAL_IDS: + json_array_append_new( + params, + json_pack("{s:s, s:s, s:o, s:[[s, s, s]]}", + "op", + "mutate", + "table", + _device_type_to_table(call->payload.set_external_ids.device_type), + "mutations", + _j_create_external_ids_array_update( + call->payload.set_external_ids.connection_uuid, + call->payload.set_external_ids.exid_old, + call->payload.set_external_ids.exid_new), + "where", + "name", + "==", + call->payload.set_external_ids.ifname)); + break; - msg = json_pack("{s:i, s:s, s:o}", "id", call->id, "method", "transact", "params", params); - break; - case OVSDB_SET_INTERFACE_MTU: - params = json_array(); - json_array_append_new(params, json_string("Open_vSwitch")); - json_array_append_new(params, _inc_next_cfg(priv->db_uuid)); + default: + nm_assert_not_reached(); + break; + } - json_array_append_new(params, - json_pack("{s:s, s:s, s:{s: i}, s:[[s, s, s]]}", - "op", - "update", - "table", - "Interface", - "row", - "mtu_request", - call->mtu, - "where", - "name", - "==", - call->ifname)); - - msg = json_pack("{s:i, s:s, s:o}", "id", call->id, "method", "transact", "params", params); + msg = json_pack("{s:I, s:s, s:o}", + "id", + (json_int_t) call->call_id, + "method", + "transact", + "params", + params); break; } + } g_return_if_fail(msg); - _LOGT_call("send", call, msg); - cmd = json_dumps(msg, 0); + cmd = json_dumps(msg, 0); + _LOGT_call(call, "send: call-id=%" G_GUINT64_FORMAT ", %s", call->call_id, cmd); g_string_append(priv->output, cmd); free(cmd); @@ -1097,7 +1407,7 @@ ovsdb_next_command(NMOvsdb *self) * [ "uuid", "185c93f6-0b39-424e-8587-77d074aa7ce0" ], ... ] ] */ static void -_uuids_to_array(GPtrArray *array, const json_t *items) +_uuids_to_array_inplace(GPtrArray *array, const json_t *items) { const char *key; json_t * value; @@ -1111,38 +1421,123 @@ _uuids_to_array(GPtrArray *array, const json_t *items) value = json_array_get(items, index); index++; - if (!value) + if (!value || !key) return; - if (g_strcmp0(key, "uuid") == 0 && json_is_string(value)) { - g_ptr_array_add(array, g_strdup(json_string_value(value))); - } else if (g_strcmp0(key, "set") == 0 && json_is_array(value)) { - json_array_foreach(value, set_index, set_value) - { - _uuids_to_array(array, set_value); + if (nm_streq(key, "uuid")) { + if (json_is_string(value)) + g_ptr_array_add(array, g_strdup(json_string_value(value))); + continue; + } + if (nm_streq(key, "set")) { + if (json_is_array(value)) { + json_array_foreach (value, set_index, set_value) + _uuids_to_array_inplace(array, set_value); } + continue; } } } -static char * -_connection_uuid_from_external_ids(json_t *external_ids) +static GPtrArray * +_uuids_to_array(const json_t *items) { + GPtrArray *array; + + array = g_ptr_array_new_with_free_func(g_free); + _uuids_to_array_inplace(array, items); + return array; +} + +static void +_external_ids_extract(json_t *external_ids, GArray **out_array, const char **out_connection_uuid) +{ + json_t *array; json_t *value; - size_t index; + gsize index; - if (g_strcmp0("map", json_string_value(json_array_get(external_ids, 0))) != 0) - return NULL; + nm_assert(out_array && !*out_array); + nm_assert(!out_connection_uuid || !*out_connection_uuid); - json_array_foreach(json_array_get(external_ids, 1), index, value) - { - if (g_strcmp0("NM.connection.uuid", json_string_value(json_array_get(value, 0))) == 0) - return g_strdup(json_string_value(json_array_get(value, 1))); + if (!nm_streq0("map", json_string_value(json_array_get(external_ids, 0)))) + return; + + array = json_array_get(external_ids, 1); + + json_array_foreach (array, index, value) { + const char * key = json_string_value(json_array_get(value, 0)); + const char * val = json_string_value(json_array_get(value, 1)); + NMUtilsNamedValue *v; + + if (!key || !val) + continue; + + if (!*out_array) { + *out_array = g_array_new(FALSE, FALSE, sizeof(NMUtilsNamedValue)); + g_array_set_clear_func(*out_array, + (GDestroyNotify) nm_utils_named_value_clear_with_g_free); + } + + v = nm_g_array_append_new(*out_array, NMUtilsNamedValue); + *v = (NMUtilsNamedValue){ + .name = g_strdup(key), + .value_str = g_strdup(val), + }; + + if (out_connection_uuid && nm_streq(v->name, NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID)) { + *out_connection_uuid = v->value_str; + out_connection_uuid = NULL; + } } +} - return NULL; +static gboolean +_external_ids_equal(const GArray *arr1, const GArray *arr2) +{ + guint n; + guint i; + + n = nm_g_array_len(arr1); + + if (n != nm_g_array_len(arr2)) + return FALSE; + for (i = 0; i < n; i++) { + const NMUtilsNamedValue *n1 = &g_array_index(arr1, NMUtilsNamedValue, i); + const NMUtilsNamedValue *n2 = &g_array_index(arr2, NMUtilsNamedValue, i); + + if (!nm_streq0(n1->name, n2->name)) + return FALSE; + if (!nm_streq0(n1->value_str, n2->value_str)) + return FALSE; + } + return TRUE; } +static char * +_external_ids_to_string(const GArray *arr) +{ + NMStrBuf strbuf; + guint i; + + if (!arr) + return g_strdup("empty"); + + nm_str_buf_init(&strbuf, NM_UTILS_GET_NEXT_REALLOC_SIZE_104, FALSE); + nm_str_buf_append(&strbuf, "["); + for (i = 0; i < arr->len; i++) { + const NMUtilsNamedValue *n = &g_array_index(arr, NMUtilsNamedValue, i); + + if (i > 0) + nm_str_buf_append_c(&strbuf, ','); + nm_str_buf_append_printf(&strbuf, " \"%s\" = \"%s\"]", n->name, n->value_str); + } + nm_str_buf_append(&strbuf, " ]"); + + return nm_str_buf_finalize(&strbuf, NULL); +} + +/*****************************************************************************/ + /** * ovsdb_got_update: * @@ -1163,14 +1558,11 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg) json_error_t json_error = { 0, }; - void * iter; - const char * name; - const char * key; - const char * type; - json_t * value; - OpenvswitchBridge * ovs_bridge; - OpenvswitchPort * ovs_port; - OpenvswitchInterface *ovs_interface; + void * iter; + const char *name; + const char *key; + const char *type; + json_t * value; if (json_unpack_ex(msg, &json_error, @@ -1199,17 +1591,14 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg) nm_utils_strdup_reset(&priv->db_uuid, s); } - /* Interfaces */ - json_object_foreach(interface, key, value) - { - json_t * error = NULL; - gboolean old = FALSE; - gboolean new = FALSE; - - if (json_unpack(value, "{s:{}}", "old") == 0) - old = TRUE; + json_object_foreach (interface, key, value) { + OpenvswitchInterface *ovs_interface; + gs_unref_array GArray *external_ids_arr = NULL; + const char * connection_uuid = NULL; + json_t * error = NULL; + int r; - if (json_unpack(value, + r = json_unpack(value, "{s:{s:s, s:s, s?:o, s:o}}", "new", "name", @@ -1219,85 +1608,120 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg) "error", &error, "external_ids", - &external_ids) - == 0) - new = TRUE; - - if (old) { - ovs_interface = g_hash_table_lookup(priv->interfaces, key); - if (!ovs_interface) { - _LOGW("Interface '%s' was not seen", key); - } else if (!new || strcmp(ovs_interface->name, name) != 0) { - old = FALSE; - _LOGT("removed an '%s' interface: %s%s%s", - ovs_interface->type, - ovs_interface->name, - ovs_interface->connection_uuid ? ", " : "", - ovs_interface->connection_uuid ?: ""); - if (g_strcmp0(ovs_interface->type, "internal") == 0) { - /* Currently, the factory only creates NMDevices for - * internal interfaces. Ignore the rest. */ - g_signal_emit(self, - signals[DEVICE_REMOVED], - 0, - ovs_interface->name, - NM_DEVICE_TYPE_OVS_INTERFACE); - } + &external_ids); + if (r != 0) { + gpointer unused; + + r = json_unpack(value, "{s:{}}", "old"); + if (r != 0) + continue; + + if (!g_hash_table_steal_extended(priv->interfaces, + &key, + (gpointer *) &ovs_interface, + &unused)) + continue; + + _LOGT("obj[iface:%s]: removed an '%s' interface: %s%s%s", + key, + ovs_interface->type, + ovs_interface->name, + NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid, + ", ", + ovs_interface->connection_uuid, + "")); + if (_openvswitch_interface_should_emit_signal(ovs_interface)) { + _signal_emit_device_removed(self, + ovs_interface->name, + NM_DEVICE_TYPE_OVS_INTERFACE); + } + _free_interface(ovs_interface); + continue; + } + + ovs_interface = g_hash_table_lookup(priv->interfaces, &key); + + if (ovs_interface + && (!nm_streq0(ovs_interface->name, name) || !nm_streq0(ovs_interface->type, type))) { + if (!g_hash_table_steal(priv->interfaces, ovs_interface)) + nm_assert_not_reached(); + if (_openvswitch_interface_should_emit_signal(ovs_interface)) { + _signal_emit_device_removed(self, + ovs_interface->name, + NM_DEVICE_TYPE_OVS_INTERFACE); } - g_hash_table_remove(priv->interfaces, key); + nm_clear_pointer(&ovs_interface, _free_interface); } - if (new) { - ovs_interface = g_slice_new(OpenvswitchInterface); - ovs_interface->name = g_strdup(name); - ovs_interface->type = g_strdup(type); - ovs_interface->connection_uuid = _connection_uuid_from_external_ids(external_ids); - g_hash_table_insert(priv->interfaces, g_strdup(key), ovs_interface); - if (old) { - _LOGT("changed an '%s' interface: %s%s%s", + _external_ids_extract(external_ids, &external_ids_arr, &connection_uuid); + + if (ovs_interface) { + gboolean changed = FALSE; + + nm_assert(nm_streq0(ovs_interface->name, name)); + + changed |= nm_utils_strdup_reset(&ovs_interface->type, type); + changed |= nm_utils_strdup_reset(&ovs_interface->connection_uuid, connection_uuid); + if (!_external_ids_equal(ovs_interface->external_ids, external_ids_arr)) { + NM_SWAP(&ovs_interface->external_ids, &external_ids_arr); + changed = TRUE; + } + if (changed) { + gs_free char *strtmp = NULL; + + _LOGT("obj[iface:%s]: changed an '%s' interface: %s%s%s, external-ids=%s", + key, type, ovs_interface->name, - ovs_interface->connection_uuid ? ", " : "", - ovs_interface->connection_uuid ?: ""); - } else { - _LOGT("added an '%s' interface: %s%s%s", - ovs_interface->type, - ovs_interface->name, - ovs_interface->connection_uuid ? ", " : "", - ovs_interface->connection_uuid ?: ""); - if (g_strcmp0(ovs_interface->type, "internal") == 0) { - /* Currently, the factory only creates NMDevices for - * internal interfaces. Ignore the rest. */ - g_signal_emit(self, - signals[DEVICE_ADDED], - 0, - ovs_interface->name, - NM_DEVICE_TYPE_OVS_INTERFACE); - } - } - /* The error is a string. No error is indicated by an empty set, - * because why the fuck not: [ "set": [] ] */ - if (error && json_is_string(error)) { - g_signal_emit(self, - signals[INTERFACE_FAILED], - 0, - ovs_interface->name, - ovs_interface->connection_uuid, - json_string_value(error)); + NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid, + ", ", + ovs_interface->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_interface->external_ids))); } + } else { + gs_free char *strtmp = NULL; + + ovs_interface = g_slice_new(OpenvswitchInterface); + *ovs_interface = (OpenvswitchInterface){ + .interface_uuid = g_strdup(key), + .name = g_strdup(name), + .type = g_strdup(type), + .connection_uuid = g_strdup(connection_uuid), + .external_ids = g_steal_pointer(&external_ids_arr), + }; + g_hash_table_add(priv->interfaces, ovs_interface); + _LOGT("obj[iface:%s]: added an '%s' interface: %s%s%s, external-ids=%s", + key, + ovs_interface->type, + ovs_interface->name, + NM_PRINT_FMT_QUOTED2(ovs_interface->connection_uuid, + ", ", + ovs_interface->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_interface->external_ids))); + if (_openvswitch_interface_should_emit_signal(ovs_interface)) + _signal_emit_device_added(self, ovs_interface->name, NM_DEVICE_TYPE_OVS_INTERFACE); } - } - /* Ports */ - json_object_foreach(port, key, value) - { - gboolean old = FALSE; - gboolean new = FALSE; + /* The error is a string. No error is indicated by an empty set, + * Why not: [ "set": [] ] ? */ + if (error && json_is_string(error)) { + _signal_emit_interface_failed(self, + ovs_interface->name, + ovs_interface->connection_uuid, + json_string_value(error)); + } + } - if (json_unpack(value, "{s:{}}", "old") == 0) - old = TRUE; + json_object_foreach (port, key, value) { + gs_unref_ptrarray GPtrArray *interfaces = NULL; + OpenvswitchPort * ovs_port; + gs_unref_array GArray *external_ids_arr = NULL; + const char * connection_uuid = NULL; + int r; - if (json_unpack(value, + r = json_unpack(value, "{s:{s:s, s:o, s:o}}", "new", "name", @@ -1305,63 +1729,100 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg) "external_ids", &external_ids, "interfaces", - &items) - == 0) - new = TRUE; - - if (old) { - ovs_port = g_hash_table_lookup(priv->ports, key); - if (!new || g_strcmp0(ovs_port->name, name) != 0) { - old = FALSE; - _LOGT("removed a port: %s%s%s", - ovs_port->name, - ovs_port->connection_uuid ? ", " : "", - ovs_port->connection_uuid ?: ""); - g_signal_emit(self, - signals[DEVICE_REMOVED], - 0, - ovs_port->name, - NM_DEVICE_TYPE_OVS_PORT); - } - g_hash_table_remove(priv->ports, key); + &items); + if (r != 0) { + gpointer unused; + + r = json_unpack(value, "{s:{}}", "old"); + if (r != 0) + continue; + + if (!g_hash_table_steal_extended(priv->ports, &key, (gpointer *) &ovs_port, &unused)) + continue; + + _LOGT("obj[port:%s]: removed a port: %s%s%s", + key, + ovs_port->name, + NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid, + ", ", + ovs_port->connection_uuid, + "")); + _signal_emit_device_removed(self, ovs_port->name, NM_DEVICE_TYPE_OVS_PORT); + _free_port(ovs_port); + continue; } - if (new) { - ovs_port = g_slice_new(OpenvswitchPort); - ovs_port->name = g_strdup(name); - ovs_port->connection_uuid = _connection_uuid_from_external_ids(external_ids); - ovs_port->interfaces = g_ptr_array_new_with_free_func(g_free); - _uuids_to_array(ovs_port->interfaces, items); - g_hash_table_insert(priv->ports, g_strdup(key), ovs_port); - if (old) { - _LOGT("changed a port: %s%s%s", - ovs_port->name, - ovs_port->connection_uuid ? ", " : "", - ovs_port->connection_uuid ?: ""); - } else { - _LOGT("added a port: %s%s%s", + ovs_port = g_hash_table_lookup(priv->ports, &key); + + if (ovs_port && !nm_streq0(ovs_port->name, name)) { + if (!g_hash_table_steal(priv->ports, ovs_port)) + nm_assert_not_reached(); + _signal_emit_device_removed(self, ovs_port->name, NM_DEVICE_TYPE_OVS_PORT); + nm_clear_pointer(&ovs_port, _free_port); + } + + _external_ids_extract(external_ids, &external_ids_arr, &connection_uuid); + interfaces = _uuids_to_array(items); + + if (ovs_port) { + gboolean changed = FALSE; + + nm_assert(nm_streq0(ovs_port->name, name)); + + changed |= nm_utils_strdup_reset(&ovs_port->name, name); + changed |= nm_utils_strdup_reset(&ovs_port->connection_uuid, g_strdup(connection_uuid)); + if (nm_strv_ptrarray_cmp(ovs_port->interfaces, interfaces) != 0) { + NM_SWAP(&ovs_port->interfaces, &interfaces); + changed = TRUE; + } + if (!_external_ids_equal(ovs_port->external_ids, external_ids_arr)) { + NM_SWAP(&ovs_port->external_ids, &external_ids_arr); + changed = TRUE; + } + if (changed) { + gs_free char *strtmp = NULL; + + _LOGT("obj[port:%s]: changed a port: %s%s%s, external-ids=%s", + key, ovs_port->name, - ovs_port->connection_uuid ? ", " : "", - ovs_port->connection_uuid ?: ""); - g_signal_emit(self, - signals[DEVICE_ADDED], - 0, - ovs_port->name, - NM_DEVICE_TYPE_OVS_PORT); + NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid, + ", ", + ovs_port->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_port->external_ids))); } + } else { + gs_free char *strtmp = NULL; + + ovs_port = g_slice_new(OpenvswitchPort); + *ovs_port = (OpenvswitchPort){ + .port_uuid = g_strdup(key), + .name = g_strdup(name), + .connection_uuid = g_strdup(connection_uuid), + .interfaces = g_steal_pointer(&interfaces), + .external_ids = g_steal_pointer(&external_ids_arr), + }; + g_hash_table_add(priv->ports, ovs_port); + _LOGT("obj[port:%s]: added a port: %s%s%s, external-ids=%s", + key, + ovs_port->name, + NM_PRINT_FMT_QUOTED2(ovs_port->connection_uuid, + ", ", + ovs_port->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_port->external_ids))); + _signal_emit_device_added(self, ovs_port->name, NM_DEVICE_TYPE_OVS_PORT); } } - /* Bridges */ - json_object_foreach(bridge, key, value) - { - gboolean old = FALSE; - gboolean new = FALSE; + json_object_foreach (bridge, key, value) { + gs_unref_ptrarray GPtrArray *ports = NULL; + OpenvswitchBridge * ovs_bridge; + gs_unref_array GArray *external_ids_arr = NULL; + const char * connection_uuid = NULL; + int r; - if (json_unpack(value, "{s:{}}", "old") == 0) - old = TRUE; - - if (json_unpack(value, + r = json_unpack(value, "{s:{s:s, s:o, s:o}}", "new", "name", @@ -1369,50 +1830,94 @@ ovsdb_got_update(NMOvsdb *self, json_t *msg) "external_ids", &external_ids, "ports", - &items) - == 0) - new = TRUE; - - if (old) { - ovs_bridge = g_hash_table_lookup(priv->bridges, key); - if (!new || g_strcmp0(ovs_bridge->name, name) != 0) { - old = FALSE; - _LOGT("removed a bridge: %s%s%s", - ovs_bridge->name, - ovs_bridge->connection_uuid ? ", " : "", - ovs_bridge->connection_uuid ?: ""); - g_signal_emit(self, - signals[DEVICE_REMOVED], - 0, - ovs_bridge->name, - NM_DEVICE_TYPE_OVS_BRIDGE); - } - g_hash_table_remove(priv->bridges, key); + &items); + + if (r != 0) { + gpointer unused; + + r = json_unpack(value, "{s:{}}", "old"); + if (r != 0) + continue; + + if (!g_hash_table_steal_extended(priv->bridges, + &key, + (gpointer *) &ovs_bridge, + &unused)) + continue; + + _LOGT("obj[bridge:%s]: removed a bridge: %s%s%s", + key, + ovs_bridge->name, + NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid, + ", ", + ovs_bridge->connection_uuid, + "")); + _signal_emit_device_removed(self, ovs_bridge->name, NM_DEVICE_TYPE_OVS_BRIDGE); + _free_bridge(ovs_bridge); + continue; } - if (new) { - ovs_bridge = g_slice_new(OpenvswitchBridge); - ovs_bridge->name = g_strdup(name); - ovs_bridge->connection_uuid = _connection_uuid_from_external_ids(external_ids); - ovs_bridge->ports = g_ptr_array_new_with_free_func(g_free); - _uuids_to_array(ovs_bridge->ports, items); - g_hash_table_insert(priv->bridges, g_strdup(key), ovs_bridge); - if (old) { - _LOGT("changed a bridge: %s%s%s", - ovs_bridge->name, - ovs_bridge->connection_uuid ? ", " : "", - ovs_bridge->connection_uuid ?: ""); - } else { - _LOGT("added a bridge: %s%s%s", + ovs_bridge = g_hash_table_lookup(priv->bridges, &key); + + if (ovs_bridge && !nm_streq0(ovs_bridge->name, name)) { + if (!g_hash_table_steal(priv->bridges, ovs_bridge)) + nm_assert_not_reached(); + _signal_emit_device_removed(self, ovs_bridge->name, NM_DEVICE_TYPE_OVS_BRIDGE); + nm_clear_pointer(&ovs_bridge, _free_bridge); + } + + _external_ids_extract(external_ids, &external_ids_arr, &connection_uuid); + ports = _uuids_to_array(items); + + if (ovs_bridge) { + gboolean changed = FALSE; + + nm_assert(nm_streq0(ovs_bridge->name, name)); + + changed = nm_utils_strdup_reset(&ovs_bridge->name, name); + changed = + nm_utils_strdup_reset(&ovs_bridge->connection_uuid, g_strdup(connection_uuid)); + if (nm_strv_ptrarray_cmp(ovs_bridge->ports, ports) != 0) { + NM_SWAP(&ovs_bridge->ports, &ports); + changed = TRUE; + } + if (!_external_ids_equal(ovs_bridge->external_ids, external_ids_arr)) { + NM_SWAP(&ovs_bridge->external_ids, &external_ids_arr); + changed = TRUE; + } + if (changed) { + gs_free char *strtmp = NULL; + + _LOGT("obj[bridge:%s]: changed a bridge: %s%s%s, external-ids=%s", + key, ovs_bridge->name, - ovs_bridge->connection_uuid ? ", " : "", - ovs_bridge->connection_uuid ?: ""); - g_signal_emit(self, - signals[DEVICE_ADDED], - 0, - ovs_bridge->name, - NM_DEVICE_TYPE_OVS_BRIDGE); + NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid, + ", ", + ovs_bridge->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_bridge->external_ids))); } + } else { + gs_free char *strtmp = NULL; + + ovs_bridge = g_slice_new(OpenvswitchBridge); + *ovs_bridge = (OpenvswitchBridge){ + .bridge_uuid = g_strdup(key), + .name = g_strdup(name), + .connection_uuid = g_strdup(connection_uuid), + .ports = g_steal_pointer(&ports), + .external_ids = g_steal_pointer(&external_ids_arr), + }; + g_hash_table_add(priv->bridges, ovs_bridge); + _LOGT("obj[bridge:%s]: added a bridge: %s%s%s, external-ids=%s", + key, + ovs_bridge->name, + NM_PRINT_FMT_QUOTED2(ovs_bridge->connection_uuid, + ", ", + ovs_bridge->connection_uuid, + ""), + (strtmp = _external_ids_to_string(ovs_bridge->external_ids))); + _signal_emit_device_added(self, ovs_bridge->name, NM_DEVICE_TYPE_OVS_BRIDGE); } } } @@ -1455,16 +1960,12 @@ ovsdb_got_msg(NMOvsdb *self, json_t *msg) json_error_t json_error = { 0, }; - json_t * json_id = NULL; - gint64 id = -1; - const char * method = NULL; - json_t * params = NULL; - json_t * result = NULL; - json_t * error = NULL; - OvsdbMethodCall * call = NULL; - OvsdbMethodCallback callback; - gpointer user_data; - gs_free_error GError *local = NULL; + json_t * json_id = NULL; + json_int_t id = (json_int_t) -1; + const char *method = NULL; + json_t * params = NULL; + json_t * result = NULL; + json_t * error = NULL; if (json_unpack_ex(msg, &json_error, @@ -1497,10 +1998,10 @@ ovsdb_got_msg(NMOvsdb *self, json_t *msg) return; } - if (g_strcmp0(method, "update") == 0) { + if (nm_streq0(method, "update")) { /* This is a update method call. */ ovsdb_got_update(self, json_array_get(params, 1)); - } else if (g_strcmp0(method, "echo") == 0) { + } else if (nm_streq0(method, "echo")) { /* This is an echo request. */ ovsdb_got_echo(self, id, params); } else { @@ -1509,24 +2010,28 @@ ovsdb_got_msg(NMOvsdb *self, json_t *msg) return; } - if (id > -1) { + if (id >= 0) { + OvsdbMethodCall *call; + gs_free_error GError *local = NULL; + gs_free char * msg_as_str = NULL; + /* This is a response to a method call. */ - if (!priv->calls->len) { - _LOGE("there are no queued calls expecting response %" G_GUINT64_FORMAT, id); + if (c_list_is_empty(&priv->calls_lst_head)) { + _LOGE("there are no queued calls expecting response %" G_GUINT64_FORMAT, (guint64) id); ovsdb_disconnect(self, FALSE, FALSE); return; } - call = &g_array_index(priv->calls, OvsdbMethodCall, 0); - if (call->id != id) { + call = c_list_first_entry(&priv->calls_lst_head, OvsdbMethodCall, calls_lst); + if (call->call_id != id) { _LOGE("expected a response to call %" G_GUINT64_FORMAT ", not %" G_GUINT64_FORMAT, - call->id, - id); + call->call_id, + (guint64) id); ovsdb_disconnect(self, FALSE, FALSE); return; } /* Cool, we found a corresponding call. Finish it. */ - _LOGT_call("response", call, msg); + _LOGT_call(call, "response: %s", (msg_as_str = json_dumps(msg, 0))); if (!json_is_null(error)) { /* The response contains an error. */ @@ -1537,10 +2042,8 @@ ovsdb_got_msg(NMOvsdb *self, json_t *msg) json_string_value(error)); } - callback = call->callback; - user_data = call->user_data; - g_array_remove_index(priv->calls, 0); - callback(self, result, local, user_data); + _call_complete(call, result, local); + priv->num_failures = 0; /* Don't progress further commands in case the callback hit an error @@ -1709,11 +2212,8 @@ ovsdb_write(NMOvsdb *self) static void ovsdb_disconnect(NMOvsdb *self, gboolean retry, gboolean is_disposing) { - NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); - OvsdbMethodCall * call; - OvsdbMethodCallback callback; - gpointer user_data; - gs_free_error GError *error = NULL; + NMOvsdbPrivate * priv = NM_OVSDB_GET_PRIVATE(self); + OvsdbMethodCall *call; nm_assert(!retry || !is_disposing); @@ -1723,18 +2223,19 @@ ovsdb_disconnect(NMOvsdb *self, gboolean retry, gboolean is_disposing) _LOGD("disconnecting from ovsdb, retry %d", retry); if (retry) { - if (priv->calls->len != 0) - g_array_index(priv->calls, OvsdbMethodCall, 0).id = COMMAND_PENDING; - } else { - nm_utils_error_set_cancelled(&error, is_disposing, "NMOvsdb"); - - while (priv->calls->len) { - call = &g_array_index(priv->calls, OvsdbMethodCall, priv->calls->len - 1); - callback = call->callback; - user_data = call->user_data; - g_array_remove_index(priv->calls, priv->calls->len - 1); - callback(self, NULL, error, user_data); + if (!c_list_is_empty(&priv->calls_lst_head)) { + call = c_list_first_entry(&priv->calls_lst_head, OvsdbMethodCall, calls_lst); + call->call_id = CALL_ID_UNSPEC; } + } else { + gs_free_error GError *error = NULL; + + if (is_disposing) + nm_utils_error_set_cancelled(&error, is_disposing, "NMOvsdb"); + else + nm_utils_error_set(&error, NM_UTILS_ERROR_NOT_READY, "disconnected from ovsdb"); + while ((call = c_list_last_entry(&priv->calls_lst_head, OvsdbMethodCall, calls_lst))) + _call_complete(call, NULL, error); } priv->bufp = 0; @@ -1823,17 +2324,11 @@ ovsdb_try_connect(NMOvsdb *self) /* Queue a monitor call before any other command, ensuring that we have an up * to date view of existing bridged that we need for add and remove ops. */ ovsdb_call_method(self, - OVSDB_MONITOR, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - 0, _monitor_bridges_cb, NULL, - TRUE); + TRUE, + OVSDB_MONITOR, + OVSDB_METHOD_PAYLOAD_MONITOR()); } /*****************************************************************************/ @@ -1858,8 +2353,7 @@ _transact_cb(NMOvsdb *self, json_t *result, GError *error, gpointer user_data) if (error) goto out; - json_array_foreach(result, index, value) - { + json_array_foreach (result, index, value) { if (json_unpack(value, "{s:s, s:s}", "error", &err, "details", &err_details) == 0) { g_set_error(&error, G_IO_ERROR, @@ -1873,7 +2367,7 @@ _transact_cb(NMOvsdb *self, json_t *result, GError *error, gpointer user_data) out: call->callback(error, call->user_data); - g_slice_free(OvsdbCall, call); + nm_g_slice_free(call); } static OvsdbCall * @@ -1881,10 +2375,11 @@ ovsdb_call_new(NMOvsdbCallback callback, gpointer user_data) { OvsdbCall *call; - call = g_slice_new(OvsdbCall); - call->callback = callback; - call->user_data = user_data; - + call = g_slice_new(OvsdbCall); + *call = (OvsdbCall){ + .callback = callback, + .user_data = user_data, + }; return call; } @@ -1899,17 +2394,15 @@ nm_ovsdb_add_interface(NMOvsdb * self, gpointer user_data) { ovsdb_call_method(self, - OVSDB_ADD_INTERFACE, - NULL, - bridge, - port, - interface, - bridge_device, - interface_device, - 0, _transact_cb, ovsdb_call_new(callback, user_data), - FALSE); + FALSE, + OVSDB_ADD_INTERFACE, + OVSDB_METHOD_PAYLOAD_ADD_INTERFACE(bridge, + port, + interface, + bridge_device, + interface_device)); } void @@ -1919,17 +2412,11 @@ nm_ovsdb_del_interface(NMOvsdb * self, gpointer user_data) { ovsdb_call_method(self, - OVSDB_DEL_INTERFACE, - ifname, - NULL, - NULL, - NULL, - NULL, - NULL, - 0, _transact_cb, ovsdb_call_new(callback, user_data), - FALSE); + FALSE, + OVSDB_DEL_INTERFACE, + OVSDB_METHOD_PAYLOAD_DEL_INTERFACE(ifname)); } void @@ -1940,88 +2427,60 @@ nm_ovsdb_set_interface_mtu(NMOvsdb * self, gpointer user_data) { ovsdb_call_method(self, - OVSDB_SET_INTERFACE_MTU, - ifname, - NULL, - NULL, - NULL, - NULL, - NULL, - mtu, _transact_cb, ovsdb_call_new(callback, user_data), - FALSE); -} - -/*****************************************************************************/ - -static void -_clear_call(gpointer data) -{ - OvsdbMethodCall *call = data; - - switch (call->command) { - case OVSDB_MONITOR: - break; - case OVSDB_ADD_INTERFACE: - g_clear_object(&call->bridge); - g_clear_object(&call->port); - g_clear_object(&call->interface); - g_clear_object(&call->bridge_device); - g_clear_object(&call->interface_device); - break; - case OVSDB_DEL_INTERFACE: - case OVSDB_SET_INTERFACE_MTU: - nm_clear_g_free(&call->ifname); - break; - } + FALSE, + OVSDB_SET_INTERFACE_MTU, + OVSDB_METHOD_PAYLOAD_SET_INTERFACE_MTU(ifname, mtu)); } -static void -_free_bridge(gpointer data) +void +nm_ovsdb_set_external_ids(NMOvsdb * self, + NMDeviceType device_type, + const char * ifname, + const char * connection_uuid, + NMSettingOvsExternalIDs *s_exid_old, + NMSettingOvsExternalIDs *s_exid_new) { - OpenvswitchBridge *ovs_bridge = data; - - g_free(ovs_bridge->name); - g_free(ovs_bridge->connection_uuid); - g_ptr_array_free(ovs_bridge->ports, TRUE); - g_slice_free(OpenvswitchBridge, ovs_bridge); -} + gs_unref_hashtable GHashTable *exid_old = NULL; + gs_unref_hashtable GHashTable *exid_new = NULL; -static void -_free_port(gpointer data) -{ - OpenvswitchPort *ovs_port = data; + exid_old = s_exid_old + ? nm_utils_strdict_clone(_nm_setting_ovs_external_ids_get_data(s_exid_old)) + : NULL; + exid_new = s_exid_new + ? nm_utils_strdict_clone(_nm_setting_ovs_external_ids_get_data(s_exid_new)) + : NULL; - g_free(ovs_port->name); - g_free(ovs_port->connection_uuid); - g_ptr_array_free(ovs_port->interfaces, TRUE); - g_slice_free(OpenvswitchPort, ovs_port); + ovsdb_call_method(self, + NULL, + NULL, + FALSE, + OVSDB_SET_EXTERNAL_IDS, + OVSDB_METHOD_PAYLOAD_SET_EXTERNAL_IDS(device_type, + ifname, + connection_uuid, + exid_old, + exid_new)); } -static void -_free_interface(gpointer data) -{ - OpenvswitchInterface *ovs_interface = data; - - g_free(ovs_interface->name); - g_free(ovs_interface->connection_uuid); - g_free(ovs_interface->type); - g_slice_free(OpenvswitchInterface, ovs_interface); -} +/*****************************************************************************/ static void nm_ovsdb_init(NMOvsdb *self) { NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE(self); - priv->calls = g_array_new(FALSE, TRUE, sizeof(OvsdbMethodCall)); - g_array_set_clear_func(priv->calls, _clear_call); - priv->input = g_string_new(NULL); - priv->output = g_string_new(NULL); - priv->bridges = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, _free_bridge); - priv->ports = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, _free_port); - priv->interfaces = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, _free_interface); + c_list_init(&priv->calls_lst_head); + + priv->input = g_string_new(NULL); + priv->output = g_string_new(NULL); + priv->bridges = + g_hash_table_new_full(nm_pstr_hash, nm_pstr_equal, (GDestroyNotify) _free_bridge, NULL); + priv->ports = + g_hash_table_new_full(nm_pstr_hash, nm_pstr_equal, (GDestroyNotify) _free_port, NULL); + priv->interfaces = + g_hash_table_new_full(nm_pstr_hash, nm_pstr_equal, (GDestroyNotify) _free_interface, NULL); ovsdb_try_connect(self); } @@ -2034,6 +2493,8 @@ dispose(GObject *object) ovsdb_disconnect(self, FALSE, TRUE); + nm_assert(c_list_is_empty(&priv->calls_lst_head)); + if (priv->input) { g_string_free(priv->input, TRUE); priv->input = NULL; @@ -2042,10 +2503,6 @@ dispose(GObject *object) g_string_free(priv->output, TRUE); priv->output = NULL; } - if (priv->calls) { - g_array_free(priv->calls, TRUE); - priv->calls = NULL; - } nm_clear_pointer(&priv->bridges, g_hash_table_destroy); nm_clear_pointer(&priv->ports, g_hash_table_destroy); diff --git a/src/devices/ovs/nm-ovsdb.h b/src/devices/ovs/nm-ovsdb.h index c9eee19c39..100e2ea59c 100644 --- a/src/devices/ovs/nm-ovsdb.h +++ b/src/devices/ovs/nm-ovsdb.h @@ -46,4 +46,13 @@ void nm_ovsdb_set_interface_mtu(NMOvsdb * self, NMOvsdbCallback callback, gpointer user_data); +struct _NMSettingOvsExternalIDs; + +void nm_ovsdb_set_external_ids(NMOvsdb * self, + NMDeviceType device_type, + const char * ifname, + const char * connection_uuid, + struct _NMSettingOvsExternalIDs *s_exid_old, + struct _NMSettingOvsExternalIDs *s_exid_new); + #endif /* __NETWORKMANAGER_OVSDB_H__ */ diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c index 27aa300430..0f481b8a62 100644 --- a/src/devices/team/nm-device-team.c +++ b/src/devices/team/nm-device-team.c @@ -25,8 +25,8 @@ #include "nm-ip4-config.h" #include "nm-std-aux/nm-dbus-compat.h" +#define _NMLOG_DEVICE_TYPE NMDeviceTeam #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceTeam); /*****************************************************************************/ @@ -1003,18 +1003,18 @@ constructed(GObject *object) NMDevice * nm_device_team_new(const char *iface) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_TEAM, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_DRIVER, - "team", - NM_DEVICE_TYPE_DESC, - "Team", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_TEAM, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_TEAM, - NULL); + return g_object_new(NM_TYPE_DEVICE_TEAM, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_DRIVER, + "team", + NM_DEVICE_TYPE_DESC, + "Team", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_TEAM, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_TEAM, + NULL); } static void diff --git a/src/devices/team/nm-team-factory.c b/src/devices/team/nm-team-factory.c index 644bef1cdb..eec2a9350a 100644 --- a/src/devices/team/nm-team-factory.c +++ b/src/devices/team/nm-team-factory.c @@ -46,7 +46,7 @@ G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { nm_manager_set_capability(NM_MANAGER_GET, NM_CAPABILITY_TEAM); - return (NMDeviceFactory *) g_object_new(NM_TYPE_TEAM_FACTORY, NULL); + return g_object_new(NM_TYPE_TEAM_FACTORY, NULL); } /*****************************************************************************/ diff --git a/src/devices/wifi/nm-device-iwd.c b/src/devices/wifi/nm-device-iwd.c index 64ac3de7e6..d3bebef216 100644 --- a/src/devices/wifi/nm-device-iwd.c +++ b/src/devices/wifi/nm-device-iwd.c @@ -27,9 +27,11 @@ #include "settings/nm-settings-connection.h" #include "settings/nm-settings.h" #include "supplicant/nm-supplicant-types.h" +#include "nm-auth-utils.h" +#include "nm-manager.h" +#define _NMLOG_DEVICE_TYPE NMDeviceIwd #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceIwd); /*****************************************************************************/ @@ -54,13 +56,24 @@ typedef struct { NMDeviceWifiCapabilities capabilities; NMActRequestGetSecretsCallId *wifi_secrets_id; guint periodic_scan_id; + guint periodic_update_id; bool enabled : 1; bool can_scan : 1; - bool can_connect : 1; + bool nm_autoconnect : 1; + bool iwd_autoconnect : 1; bool scanning : 1; bool scan_requested : 1; bool act_mode_switch : 1; + bool secrets_failed : 1; + bool networks_requested : 1; + bool networks_changed : 1; gint64 last_scan; + uint32_t ap_id; + guint32 rate; + NMEtherAddr current_ap_bssid; + GDBusMethodInvocation * pending_agent_request; + NMActiveConnection * assumed_ac; + guint assumed_ac_timeout; } NMDeviceIwdPrivate; struct _NMDeviceIwd { @@ -129,7 +142,9 @@ ap_add_remove(NMDeviceIwd *self, nm_dbus_object_clear_and_unexport(&ap); } - nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + if (priv->enabled && !priv->iwd_autoconnect) + nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + if (recheck_available_connections) nm_device_recheck_available_connections(NM_DEVICE(self)); } @@ -159,6 +174,7 @@ set_current_ap(NMDeviceIwd *self, NMWifiAP *new_ap, gboolean recheck_available_c g_object_unref(old_ap); } + memset(&priv->current_ap_bssid, 0, ETH_ALEN); _notify(self, PROP_ACTIVE_ACCESS_POINT); _notify(self, PROP_MODE); } @@ -172,12 +188,12 @@ remove_all_aps(NMDeviceIwd *self) if (c_list_is_empty(&priv->aps_lst_head)) return; - set_current_ap(self, NULL, FALSE); - c_list_for_each_entry_safe (ap, ap_safe, &priv->aps_lst_head, aps_lst) ap_add_remove(self, FALSE, ap, FALSE); - nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + if (!priv->iwd_autoconnect) + nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + nm_device_recheck_available_connections(NM_DEVICE(self)); } @@ -198,49 +214,37 @@ ap_security_flags_from_network_type(const char *type) return flags; } -static void -insert_ap_from_network(NMDeviceIwd *self, - GHashTable * aps, - const char * path, - gint64 last_seen_msec, - int16_t signal, - uint32_t ap_id) +static NMWifiAP * +ap_from_network(NMDeviceIwd *self, + GDBusProxy * network, + NMRefString *bss_path, + gint64 last_seen_msec, + int16_t signal) { - gs_unref_object GDBusProxy *network_proxy = NULL; - gs_unref_variant GVariant *name_value = NULL; - gs_unref_variant GVariant *type_value = NULL; - nm_auto_ref_string NMRefString *bss_path = NULL; - const char * name; - const char * type; - NMSupplicantBssInfo bss_info; - uint8_t bssid[6]; - NMWifiAP * ap; + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + gs_unref_variant GVariant *name_value = NULL; + gs_unref_variant GVariant *type_value = NULL; + const char * name; + const char * type; + uint32_t ap_id; gs_unref_bytes GBytes *ssid = NULL; + NMWifiAP * ap; + NMSupplicantBssInfo bss_info; - bss_path = nm_ref_string_new(path); - - if (g_hash_table_lookup(aps, path)) { - _LOGD(LOGD_WIFI, "Duplicate network at %s", path); - return; - } + g_return_val_if_fail(network, NULL); - network_proxy = - nm_iwd_manager_get_dbus_interface(nm_iwd_manager_get(), path, NM_IWD_NETWORK_INTERFACE); - if (!network_proxy) - return; - - name_value = g_dbus_proxy_get_cached_property(network_proxy, "Name"); - type_value = g_dbus_proxy_get_cached_property(network_proxy, "Type"); + name_value = g_dbus_proxy_get_cached_property(network, "Name"); + type_value = g_dbus_proxy_get_cached_property(network, "Type"); if (!name_value || !g_variant_is_of_type(name_value, G_VARIANT_TYPE_STRING) || !type_value || !g_variant_is_of_type(type_value, G_VARIANT_TYPE_STRING)) - return; + return NULL; name = g_variant_get_string(name_value, NULL); type = g_variant_get_string(type_value, NULL); if (nm_streq(type, "wep")) { /* WEP not supported */ - return; + return NULL; } /* What we get from IWD are networks, or ESSs, that may contain @@ -251,12 +255,7 @@ insert_ap_from_network(NMDeviceIwd *self, * already does that. We fake the BSSIDs as they don't play any * role either. */ - bssid[0] = 0x00; - bssid[1] = 0x01; - bssid[2] = 0x02; - bssid[3] = ap_id >> 16; - bssid[4] = ap_id >> 8; - bssid[5] = ap_id; + ap_id = priv->ap_id++; ssid = g_bytes_new(name, NM_MIN(32u, strlen(name))); @@ -270,13 +269,39 @@ insert_ap_from_network(NMDeviceIwd *self, .signal_percent = nm_wifi_utils_level_to_quality(signal / 100), .frequency = 2417, .max_rate = 65000, + .bssid = NM_ETHER_ADDR_INIT(0x00, 0x01, 0x02, ap_id >> 16, ap_id >> 8, ap_id), }; - memcpy(bss_info.bssid, bssid, sizeof(bssid)); ap = nm_wifi_ap_new_from_properties(&bss_info); nm_assert(bss_path == nm_wifi_ap_get_supplicant_path(ap)); + return ap; +} + +static void +insert_ap_from_network(NMDeviceIwd *self, + GHashTable * aps, + const char * path, + gint64 last_seen_msec, + int16_t signal) +{ + gs_unref_object GDBusProxy *network_proxy = NULL; + nm_auto_ref_string NMRefString *bss_path = nm_ref_string_new(path); + NMWifiAP * ap; + + if (g_hash_table_lookup(aps, bss_path)) { + _LOGD(LOGD_WIFI, "Duplicate network at %s", path); + return; + } + + network_proxy = + nm_iwd_manager_get_dbus_interface(nm_iwd_manager_get(), path, NM_IWD_NETWORK_INTERFACE); + + ap = ap_from_network(self, network_proxy, bss_path, last_seen_msec, signal); + if (!ap) + return; + g_hash_table_insert(aps, bss_path, ap); } @@ -288,55 +313,45 @@ get_ordered_networks_cb(GObject *source, GAsyncResult *res, gpointer user_data) gs_free_error GError *error = NULL; gs_unref_variant GVariant *variant = NULL; GVariantIter * networks; - const char * path, *name, *type; + const char * path; int16_t signal; NMWifiAP * ap, *ap_safe, *new_ap; - gboolean changed = FALSE; + gboolean changed; GHashTableIter ap_iter; gs_unref_hashtable GHashTable *new_aps = NULL; - gboolean compat; - const char * return_sig; - static uint32_t ap_id = 0; gint64 last_seen_msec; variant = g_dbus_proxy_call_finish(G_DBUS_PROXY(source), res, &error); + if (!variant && nm_utils_error_is_cancelled(error)) + return; + + priv = NM_DEVICE_IWD_GET_PRIVATE(self); + priv->networks_requested = FALSE; + if (!variant) { _LOGE(LOGD_WIFI, "Station.GetOrderedNetworks failed: %s", error->message); return; } - priv = NM_DEVICE_IWD_GET_PRIVATE(self); - - /* Depending on whether we're using the Station interface or the Device - * interface for compatibility with IWD <= 0.7, the return signature of - * GetOrderedNetworks will be different. - */ - compat = priv->dbus_station_proxy == priv->dbus_device_proxy; - return_sig = compat ? "(a(osns))" : "(a(on))"; - - if (!g_variant_is_of_type(variant, G_VARIANT_TYPE(return_sig))) { + if (!g_variant_is_of_type(variant, G_VARIANT_TYPE("(a(on))"))) { _LOGE(LOGD_WIFI, - "Station.GetOrderedNetworks returned type %s instead of %s", - g_variant_get_type_string(variant), - return_sig); + "Station.GetOrderedNetworks returned type %s instead of (a(on))", + g_variant_get_type_string(variant)); return; } new_aps = g_hash_table_new_full(nm_direct_hash, NULL, NULL, g_object_unref); - - g_variant_get(variant, return_sig, &networks); + g_variant_get(variant, "(a(on))", &networks); last_seen_msec = nm_utils_get_monotonic_timestamp_msec(); - if (compat) { - while (g_variant_iter_next(networks, "(&o&sn&s)", &path, &name, &signal, &type)) - insert_ap_from_network(self, new_aps, path, last_seen_msec, signal, ap_id++); - } else { - while (g_variant_iter_next(networks, "(&on)", &path, &signal)) - insert_ap_from_network(self, new_aps, path, last_seen_msec, signal, ap_id++); - } + while (g_variant_iter_next(networks, "(&on)", &path, &signal)) + insert_ap_from_network(self, new_aps, path, last_seen_msec, signal); g_variant_iter_free(networks); + changed = priv->networks_changed; + priv->networks_changed = FALSE; + c_list_for_each_entry_safe (ap, ap_safe, &priv->aps_lst_head, aps_lst) { new_ap = g_hash_table_lookup(new_aps, nm_wifi_ap_get_supplicant_path(ap)); if (new_ap) { @@ -368,7 +383,9 @@ get_ordered_networks_cb(GObject *source, GAsyncResult *res, gpointer user_data) } if (changed) { - nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + if (!priv->iwd_autoconnect) + nm_device_emit_recheck_auto_activate(NM_DEVICE(self)); + nm_device_recheck_available_connections(NM_DEVICE(self)); } } @@ -389,6 +406,61 @@ update_aps(NMDeviceIwd *self) priv->cancellable, get_ordered_networks_cb, self); + priv->networks_requested = TRUE; +} + +static void +periodic_update(NMDeviceIwd *self) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + int ifindex; + guint32 new_rate; + int percent; + NMEtherAddr bssid; + gboolean ap_changed = FALSE; + NMPlatform * platform; + + ifindex = nm_device_get_ifindex(NM_DEVICE(self)); + if (ifindex <= 0) + g_return_if_reached(); + + platform = nm_device_get_platform(NM_DEVICE(self)); + + /* TODO: obtain quality through the net.connman.iwd.SignalLevelAgent API. + * For now we're waking up for the rate/BSSID updates anyway. + */ + if (!nm_platform_wifi_get_station(platform, ifindex, &bssid, &percent, &new_rate)) { + _LOGD(LOGD_WIFI, "BSSID / quality / rate platform query failed"); + return; + } + + if (nm_wifi_ap_set_strength(priv->current_ap, (gint8) percent)) { +#if NM_MORE_LOGGING + ap_changed = TRUE; +#endif + } + + if (new_rate != priv->rate) { + priv->rate = new_rate; + _notify(self, PROP_BITRATE); + } + + if (nm_ether_addr_is_valid(&bssid) && !nm_ether_addr_equal(&bssid, &priv->current_ap_bssid)) { + priv->current_ap_bssid = bssid; + ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, &bssid); + ap_changed |= nm_wifi_ap_set_freq(priv->current_ap, + nm_platform_wifi_get_frequency(platform, ifindex)); + } + + if (ap_changed) + _ap_dump(self, LOGL_DEBUG, priv->current_ap, "updated"); +} + +static gboolean +periodic_update_cb(gpointer user_data) +{ + periodic_update(user_data); + return TRUE; } static void @@ -414,6 +486,26 @@ wifi_secrets_cancel(NMDeviceIwd *self) if (priv->wifi_secrets_id) nm_act_request_cancel_secrets(NULL, priv->wifi_secrets_id); nm_assert(!priv->wifi_secrets_id); + + if (priv->pending_agent_request) { + g_dbus_method_invocation_return_error_literal(priv->pending_agent_request, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_INVALID_CONNECTION, + "NM secrets request cancelled"); + g_clear_object(&priv->pending_agent_request); + } +} + +static void +cleanup_assumed_connect(NMDeviceIwd *self) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + + if (!priv->assumed_ac) + return; + + g_signal_handlers_disconnect_by_data(priv->assumed_ac, self); + g_clear_object(&priv->assumed_ac); } static void @@ -421,9 +513,12 @@ cleanup_association_attempt(NMDeviceIwd *self, gboolean disconnect) { NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + cleanup_assumed_connect(self); wifi_secrets_cancel(self); set_current_ap(self, NULL, TRUE); + nm_clear_g_source(&priv->periodic_update_id); + nm_clear_g_source(&priv->assumed_ac_timeout); if (disconnect && priv->dbus_station_proxy) send_disconnect(self); @@ -448,6 +543,32 @@ reset_mode(NMDeviceIwd * self, user_data); } +static gboolean +get_variant_boolean(GVariant *v, const char *property) +{ + if (!v || !g_variant_is_of_type(v, G_VARIANT_TYPE_BOOLEAN)) { + nm_log_warn(LOGD_DEVICE | LOGD_WIFI, + "Property %s not cached or not boolean type", + property); + + return FALSE; + } + + return g_variant_get_boolean(v); +} + +static const char * +get_variant_state(GVariant *v) +{ + if (!v || !g_variant_is_of_type(v, G_VARIANT_TYPE_STRING)) { + nm_log_warn(LOGD_DEVICE | LOGD_WIFI, "State property not cached or not a string"); + + return "unknown"; + } + + return g_variant_get_string(v, NULL); +} + static void deactivate(NMDevice *device) { @@ -457,6 +578,14 @@ deactivate(NMDevice *device) if (!priv->dbus_obj) return; + if (priv->dbus_station_proxy) { + gs_unref_variant GVariant *value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + + if (NM_IN_STRSET(get_variant_state(value), "disconnecting", "disconnected")) + return; + } + cleanup_association_attempt(self, TRUE); priv->act_mode_switch = FALSE; @@ -532,27 +661,13 @@ deactivate_async(NMDevice * device, static gboolean is_connection_known_network(NMConnection *connection) { - NMSettingWireless * s_wireless; NMIwdNetworkSecurity security; - gboolean security_ok; - GBytes * ssid; - gs_free char * ssid_utf8 = NULL; - - s_wireless = nm_connection_get_setting_wireless(connection); - if (!s_wireless) - return FALSE; - - ssid = nm_setting_wireless_get_ssid(s_wireless); - if (!ssid) - return FALSE; + gs_free char * ssid = NULL; - ssid_utf8 = _nm_utils_ssid_to_utf8(ssid); - - security = nm_wifi_connection_get_iwd_security(connection, &security_ok); - if (!security_ok) + if (!nm_wifi_connection_get_iwd_ssid_and_security(connection, &ssid, &security)) return FALSE; - return nm_iwd_manager_is_known_network(nm_iwd_manager_get(), ssid_utf8, security); + return nm_iwd_manager_is_known_network(nm_iwd_manager_get(), ssid, security); } static gboolean @@ -584,7 +699,9 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * const char * perm_hw_addr; const char * mode; NMIwdNetworkSecurity security; - gboolean mapped; + GBytes * ssid; + const guint8 * ssid_bytes; + gsize ssid_len; if (!NM_DEVICE_CLASS(nm_device_iwd_parent_class) ->check_connection_compatible(device, connection, error)) @@ -592,12 +709,29 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * s_wireless = nm_connection_get_setting_wireless(connection); + /* complete_connection would be called (if at all) before this function + * so an SSID should always be set. IWD doesn't support non-UTF8 SSIDs + * (ignores BSSes with such SSIDs and has no way to represent them on + * DBus) so we can cut it short for connections with a non-UTF8 SSID. + */ + ssid = nm_setting_wireless_get_ssid(s_wireless); + if (!ssid) + return FALSE; + + ssid_bytes = g_bytes_get_data(ssid, &ssid_len); + if (!g_utf8_validate((const char *) ssid_bytes, ssid_len, NULL)) { + nm_utils_error_set_literal(error, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, + "non-UTF-8 connection SSID not supported by IWD backend"); + return FALSE; + } + perm_hw_addr = nm_device_get_permanent_hw_address(device); mac = nm_setting_wireless_get_mac_address(s_wireless); if (perm_hw_addr) { if (mac && !nm_utils_hwaddr_matches(mac, -1, perm_hw_addr, -1)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "device MAC address does not match the profile"); return FALSE; } @@ -621,10 +755,10 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * return FALSE; } - security = nm_wifi_connection_get_iwd_security(connection, &mapped); - if (!mapped) { + if (!nm_wifi_connection_get_iwd_ssid_and_security(connection, NULL, &security) + || security == NM_IWD_NETWORK_SECURITY_WEP) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "connection authentication type not supported by IWD backend"); return FALSE; } @@ -636,7 +770,7 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * && !NM_IN_STRSET(mode, NULL, NM_SETTING_WIRELESS_MODE_INFRA)) { nm_utils_error_set_literal( error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "non-infrastructure hidden networks not supported by the IWD backend"); return FALSE; } @@ -648,7 +782,7 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * if (security == NM_IWD_NETWORK_SECURITY_8021X) { if (!is_connection_known_network(connection)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "802.1x connections must have IWD provisioning files"); return FALSE; } @@ -656,7 +790,7 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * NM_IWD_NETWORK_SECURITY_NONE, NM_IWD_NETWORK_SECURITY_PSK)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "IWD backend only supports Open, PSK and 802.1x network " "authentication in Infrastructure mode"); return FALSE; @@ -664,21 +798,21 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * } else if (nm_streq(mode, NM_SETTING_WIRELESS_MODE_AP)) { if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_AP)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "device does not support Access Point mode"); return FALSE; } if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_PSK)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "IWD backend only supports PSK authentication in AP mode"); return FALSE; } } else if (nm_streq(mode, NM_SETTING_WIRELESS_MODE_ADHOC)) { if (!(priv->capabilities & NM_WIFI_DEVICE_CAP_ADHOC)) { nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "device does not support Ad-Hoc mode"); return FALSE; } @@ -686,14 +820,15 @@ check_connection_compatible(NMDevice *device, NMConnection *connection, GError * if (!NM_IN_SET(security, NM_IWD_NETWORK_SECURITY_NONE, NM_IWD_NETWORK_SECURITY_PSK)) { nm_utils_error_set_literal( error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, "IWD backend only supports Open and PSK authentication in Ad-Hoc mode"); return FALSE; } } else { - nm_utils_error_set_literal(error, - NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY, - "%s type profiles not supported by IWD backend"); + nm_utils_error_set(error, + NM_UTILS_ERROR_CONNECTION_AVAILABLE_INCOMPATIBLE, + "'%s' type profiles not supported by IWD backend", + mode); return FALSE; } @@ -707,11 +842,12 @@ check_connection_available(NMDevice * device, const char * specific_object, GError ** error) { - NMDeviceIwd * self = NM_DEVICE_IWD(device); - NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); - NMSettingWireless * s_wifi; - const char * mode; - NMWifiAP * ap = NULL; + NMDeviceIwd * self = NM_DEVICE_IWD(device); + NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMSettingWireless * s_wifi; + const char * mode; + NMWifiAP * ap = NULL; + NMIwdNetworkSecurity security; s_wifi = nm_connection_get_setting_wireless(connection); g_return_val_if_fail(s_wifi, FALSE); @@ -740,7 +876,16 @@ check_connection_available(NMDevice * device, if (NM_IN_STRSET(mode, NM_SETTING_WIRELESS_MODE_AP, NM_SETTING_WIRELESS_MODE_ADHOC)) return TRUE; - if (NM_FLAGS_HAS(flags, _NM_DEVICE_CHECK_CON_AVAILABLE_FOR_USER_REQUEST_IGNORE_AP)) + /* Hidden SSIDs obviously don't always appear in the scan list either. + * + * For an explicit user-activation-request, a connection is considered + * available because for hidden Wi-Fi, clients didn't consistently + * set the 'hidden' property to indicate hidden SSID networks. If + * activating but the network isn't available let the device recheck + * availability. + */ + if (nm_setting_wireless_get_hidden(s_wifi) + || NM_FLAGS_HAS(flags, _NM_DEVICE_CHECK_CON_AVAILABLE_FOR_USER_REQUEST_IGNORE_AP)) return TRUE; if (!ap) @@ -756,7 +901,8 @@ check_connection_available(NMDevice * device, /* 8021x networks can only be used if they've been provisioned on the IWD side and * thus are Known Networks. */ - if (nm_wifi_connection_get_iwd_security(connection, NULL) == NM_IWD_NETWORK_SECURITY_8021X) { + if (nm_wifi_connection_get_iwd_ssid_and_security(connection, NULL, &security) + && security == NM_IWD_NETWORK_SECURITY_8021X) { if (!is_ap_known_network(ap)) { nm_utils_error_set_literal( error, @@ -769,6 +915,18 @@ check_connection_available(NMDevice * device, return TRUE; } +/* To be used where the SSID has been validated before */ +static char * +iwd_ssid_to_str(const GBytes *ssid) +{ + const guint8 *ssid_bytes; + gsize ssid_len; + + ssid_bytes = g_bytes_get_data((GBytes *) ssid, &ssid_len); + nm_assert(ssid && g_utf8_validate((const char *) ssid_bytes, ssid_len, NULL)); + return g_strndup((const char *) ssid_bytes, ssid_len); +} + static gboolean complete_connection(NMDevice * device, NMConnection * connection, @@ -781,20 +939,18 @@ complete_connection(NMDevice * device, NMSettingWireless * s_wifi; gs_free char * ssid_utf8 = NULL; NMWifiAP * ap; - GBytes * ssid; - GBytes * setting_ssid = NULL; - gboolean hidden = FALSE; + GBytes * ssid = NULL; + gboolean hidden = FALSE; const char * mode; s_wifi = nm_connection_get_setting_wireless(connection); mode = s_wifi ? nm_setting_wireless_get_mode(s_wifi) : NULL; - if (nm_streq0(mode, NM_SETTING_WIRELESS_MODE_AP)) { - if (!nm_setting_verify(NM_SETTING(s_wifi), connection, error)) - return FALSE; - ap = NULL; - } else if (!specific_object) { + if (nm_streq0(mode, NM_SETTING_WIRELESS_MODE_AP) || !specific_object) { + const guint8 *ssid_bytes; + gsize ssid_len; + /* If not given a specific object, we need at minimum an SSID */ if (!s_wifi) { g_set_error_literal(error, @@ -804,16 +960,24 @@ complete_connection(NMDevice * device, return FALSE; } - setting_ssid = nm_setting_wireless_get_ssid(s_wifi); - if (!setting_ssid || g_bytes_get_size(setting_ssid) == 0) { - g_set_error_literal( - error, - NM_DEVICE_ERROR, - NM_DEVICE_ERROR_INVALID_CONNECTION, - "A 'wireless' setting with a valid SSID is required if no AP path was given."); + ssid = nm_setting_wireless_get_ssid(s_wifi); + ssid_bytes = g_bytes_get_data(ssid, &ssid_len); + + if (!ssid || ssid_len == 0 || !g_utf8_validate((const char *) ssid_bytes, ssid_len, NULL)) { + g_set_error_literal(error, + NM_DEVICE_ERROR, + NM_DEVICE_ERROR_INVALID_CONNECTION, + "A 'wireless' setting with a valid UTF-8 SSID is required if no AP " + "path was given."); return FALSE; } + } + if (nm_streq0(mode, NM_SETTING_WIRELESS_MODE_AP)) { + if (!nm_setting_verify(NM_SETTING(s_wifi), connection, error)) + return FALSE; + ap = NULL; + } else if (!specific_object) { /* Find a compatible AP in the scan list */ ap = nm_wifi_aps_find_first_compatible(&priv->aps_lst_head, connection); if (!ap) { @@ -824,6 +988,12 @@ complete_connection(NMDevice * device, if (!nm_setting_verify(NM_SETTING(s_wifi), connection, error)) return FALSE; + /* We could either require the profile to be marked as hidden by the + * client or at least check that a hidden AP with a matching security + * type is in range using Station.GetHiddenAccessPoints(). For now + * assume it is hidden even though that will reveal the SSID on the + * air. + */ hidden = TRUE; } } else { @@ -836,35 +1006,22 @@ complete_connection(NMDevice * device, specific_object); return FALSE; } - } - - /* Add a wifi setting if one doesn't exist yet */ - if (!s_wifi) { - s_wifi = (NMSettingWireless *) nm_setting_wireless_new(); - nm_connection_add_setting(connection, NM_SETTING(s_wifi)); - } - ssid = nm_setting_wireless_get_ssid(s_wifi); - if (!ssid && ap) ssid = nm_wifi_ap_get_ssid(ap); - if (!ssid) { - g_set_error_literal(error, - NM_DEVICE_ERROR, - NM_DEVICE_ERROR_INVALID_CONNECTION, - "A 'wireless' setting with a valid SSID is required."); - return FALSE; + /* Add a wifi setting if one doesn't exist yet */ + if (!s_wifi) { + s_wifi = (NMSettingWireless *) nm_setting_wireless_new(); + nm_connection_add_setting(connection, NM_SETTING(s_wifi)); + } } if (ap) { - if (!nm_wifi_ap_complete_connection(ap, - connection, - nm_wifi_utils_is_manf_default_ssid(ssid), - error)) + if (!nm_wifi_ap_complete_connection(ap, connection, FALSE, error)) return FALSE; } - ssid_utf8 = _nm_utils_ssid_to_utf8(ssid); + ssid_utf8 = iwd_ssid_to_str(ssid); nm_utils_complete_generic( nm_device_get_platform(device), connection, @@ -883,32 +1040,6 @@ complete_connection(NMDevice * device, } static gboolean -get_variant_boolean(GVariant *v, const char *property) -{ - if (!v || !g_variant_is_of_type(v, G_VARIANT_TYPE_BOOLEAN)) { - nm_log_warn(LOGD_DEVICE | LOGD_WIFI, - "Property %s not cached or not boolean type", - property); - - return FALSE; - } - - return g_variant_get_boolean(v); -} - -static const char * -get_variant_state(GVariant *v) -{ - if (!v || !g_variant_is_of_type(v, G_VARIANT_TYPE_STRING)) { - nm_log_warn(LOGD_DEVICE | LOGD_WIFI, "State property not cached or not a string"); - - return "unknown"; - } - - return g_variant_get_string(v, NULL); -} - -static gboolean is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags) { NMDeviceIwd * self = NM_DEVICE_IWD(device); @@ -934,7 +1065,7 @@ get_autoconnect_allowed(NMDevice *device) { NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(NM_DEVICE_IWD(device)); - return priv->can_connect; + return priv->nm_autoconnect; } static gboolean @@ -1114,7 +1245,6 @@ check_scanning_prohibited(NMDeviceIwd *self, gboolean periodic) case NM_DEVICE_STATE_UNAVAILABLE: case NM_DEVICE_STATE_PREPARE: case NM_DEVICE_STATE_CONFIG: - case NM_DEVICE_STATE_NEED_AUTH: case NM_DEVICE_STATE_IP_CONFIG: case NM_DEVICE_STATE_IP_CHECK: case NM_DEVICE_STATE_SECONDARIES: @@ -1124,6 +1254,7 @@ check_scanning_prohibited(NMDeviceIwd *self, gboolean periodic) case NM_DEVICE_STATE_DISCONNECTED: case NM_DEVICE_STATE_FAILED: case NM_DEVICE_STATE_ACTIVATED: + case NM_DEVICE_STATE_NEED_AUTH: break; } @@ -1131,6 +1262,27 @@ check_scanning_prohibited(NMDeviceIwd *self, gboolean periodic) return !priv->can_scan; } +static const char * +get_agent_request_network_path(GDBusMethodInvocation *invocation) +{ + const char *method_name = g_dbus_method_invocation_get_method_name(invocation); + GVariant * params = g_dbus_method_invocation_get_parameters(invocation); + const char *network_path = NULL; + + if (nm_streq(method_name, "RequestPassphrase")) + g_variant_get(params, "(s)", &network_path); + else if (nm_streq(method_name, "RequestPrivateKeyPassphrase")) + g_variant_get(params, "(s)", &network_path); + else if (nm_streq(method_name, "RequestUserNameAndPassword")) + g_variant_get(params, "(s)", &network_path); + else if (nm_streq(method_name, "RequestUserPassword")) { + const char *user; + g_variant_get(params, "(ss)", &network_path, &user); + } + + return network_path; +} + /* * try_reply_agent_request * @@ -1238,6 +1390,25 @@ try_reply_agent_request(NMDeviceIwd * self, return FALSE; } +static gboolean +assumed_ac_timeout_cb(gpointer user_data) +{ + NMDeviceIwd * self = user_data; + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + + nm_assert(priv->assumed_ac); + + priv->assumed_ac_timeout = 0; + nm_device_state_changed(NM_DEVICE(self), + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT); + /* NMDevice's state change -> NMActRequests/NMActiveConnection's state + * change -> assumed_connection_state_changed_before_managed() -> + * cleanup_association_attempt() so no need to call it explicitly. + */ + return G_SOURCE_REMOVE; +} + static void wifi_secrets_get_one(NMDeviceIwd * self, const char * setting_name, NMSecretAgentGetSecretsFlags flags, @@ -1273,6 +1444,7 @@ wifi_secrets_cb(NMActRequest * req, priv->wifi_secrets_id = NULL; if (nm_utils_error_is_cancelled(error)) { + priv->secrets_failed = TRUE; g_dbus_method_invocation_return_error_literal(invocation, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION, @@ -1300,6 +1472,20 @@ wifi_secrets_cb(NMActRequest * req, goto secrets_error; if (replied) { + /* If we replied to the secrets request from IWD in the "disconnected" + * state and IWD doesn't move to a new state within 1 second, assume + * something went wrong (shouldn't happen). If a state change arrives + * after that nothing is lost, state_changed() will try to assume the + * connection again. + */ + if (priv->assumed_ac) { + gs_unref_variant GVariant *value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + + if (nm_streq(get_variant_state(value), "disconnected")) + priv->assumed_ac_timeout = g_timeout_add_seconds(1, assumed_ac_timeout_cb, self); + } + /* Change state back to what it was before NEED_AUTH */ nm_device_state_changed(device, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE); return; @@ -1317,7 +1503,17 @@ secrets_error: NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION, "NM secrets request failed"); - /* Now wait for the Connect callback to update device state */ + + if (priv->assumed_ac) { + nm_device_state_changed(device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NO_SECRETS); + /* NMDevice's state change -> NMActRequests/NMActiveConnection's state + * change -> assumed_connection_state_changed_before_managed() -> + * cleanup_association_attempt() so no need to call it explicitly. + */ + } else { + priv->secrets_failed = TRUE; + /* Now wait for the Connect callback to update device state */ + } } static void @@ -1353,11 +1549,13 @@ network_connect_cb(GObject *source, GAsyncResult *res, gpointer user_data) gs_unref_variant GVariant *variant = NULL; gs_free_error GError *error = NULL; NMConnection * connection; - NMSettingWireless * s_wifi; - GBytes * ssid; - gs_free char * ssid_utf8 = NULL; - NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED; + gs_free char * ssid = NULL; + NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED; GVariant * value; + gboolean disconnect; + + disconnect = !priv->iwd_autoconnect + || nm_device_autoconnect_blocked_get(device, NM_DEVICE_AUTOCONNECT_BLOCKED_ALL); variant = g_dbus_proxy_call_finish(G_DBUS_PROXY(source), res, &error); if (!variant) { @@ -1391,7 +1589,7 @@ network_connect_cb(GObject *source, GAsyncResult *res, gpointer user_data) /* If secrets were wrong, we'd be getting a net.connman.iwd.Failed */ reason = NM_DEVICE_STATE_REASON_NO_SECRETS; - } else if (nm_streq0(dbus_error, "net.connman.iwd.Aborted")) { + } else if (nm_streq0(dbus_error, "net.connman.iwd.Aborted") && priv->secrets_failed) { /* If agent call was cancelled we'd be getting a net.connman.iwd.Aborted */ reason = NM_DEVICE_STATE_REASON_NO_SECRETS; } @@ -1401,37 +1599,36 @@ network_connect_cb(GObject *source, GAsyncResult *res, gpointer user_data) nm_assert(nm_device_get_state(device) == NM_DEVICE_STATE_CONFIG); + disconnect = TRUE; + connection = nm_device_get_applied_connection(device); if (!connection) goto failed; - s_wifi = nm_connection_get_setting_wireless(connection); - if (!s_wifi) - goto failed; - - ssid = nm_setting_wireless_get_ssid(s_wifi); - if (!ssid) + if (!nm_wifi_connection_get_iwd_ssid_and_security(connection, &ssid, NULL)) goto failed; - ssid_utf8 = _nm_utils_ssid_to_utf8(ssid); - _LOGI(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) Stage 2 of 5 (Device Configure) successful. Connected to '%s'.", - ssid_utf8); + ssid); nm_device_activate_schedule_stage3_ip_config_start(device); return; failed: - /* Call Disconnect to make sure IWD's autoconnect is disabled */ - cleanup_association_attempt(self, TRUE); + /* If necessary call Disconnect to make sure IWD's autoconnect is disabled */ + cleanup_association_attempt(self, disconnect); - nm_device_queue_state(device, NM_DEVICE_STATE_FAILED, reason); + nm_device_state_changed(device, NM_DEVICE_STATE_FAILED, reason); value = g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); - if (!priv->can_connect && nm_streq0(get_variant_state(value), "disconnected")) { - priv->can_connect = true; - nm_device_emit_recheck_auto_activate(device); + if (!priv->iwd_autoconnect && nm_streq(get_variant_state(value), "disconnected")) { + schedule_periodic_scan(self, TRUE); + + if (!priv->nm_autoconnect) { + priv->nm_autoconnect = true; + nm_device_emit_recheck_auto_activate(device); + } } g_variant_unref(value); } @@ -1466,14 +1663,12 @@ act_start_cb(GObject *source, GAsyncResult *res, gpointer user_data) NMDevice * device = NM_DEVICE(self); gs_unref_variant GVariant *variant = NULL; gs_free_error GError *error = NULL; - NMSettingWireless * s_wireless; - GBytes * ssid; - gs_free char * ssid_utf8 = NULL; + gs_free char * ssid = NULL; variant = g_dbus_proxy_call_finish(G_DBUS_PROXY(source), res, &error); if (!variant) { _LOGE(LOGD_DEVICE | LOGD_WIFI, - "Activation: (wifi) Network.Connect failed: %s", + "Activation: (wifi) {AccessPoint,AdHoc}.Start() failed: %s", error->message); if (nm_utils_error_is_cancelled(error)) @@ -1487,21 +1682,16 @@ act_start_cb(GObject *source, GAsyncResult *res, gpointer user_data) nm_assert(nm_device_get_state(device) == NM_DEVICE_STATE_CONFIG); - s_wireless = nm_device_get_applied_setting(device, NM_TYPE_SETTING_WIRELESS); - if (!s_wireless) - goto error; - - ssid = nm_setting_wireless_get_ssid(s_wireless); - if (!ssid) + if (!nm_wifi_connection_get_iwd_ssid_and_security(nm_device_get_applied_connection(device), + &ssid, + NULL)) goto error; - ssid_utf8 = _nm_utils_ssid_to_utf8(ssid); - _LOGI(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) Stage 2 of 5 (Device Configure) successful. Started '%s'.", - ssid_utf8); - + ssid); nm_device_activate_schedule_stage3_ip_config_start(device); + return; error: @@ -1515,14 +1705,13 @@ error: static void act_check_interface(NMDeviceIwd *self) { - NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); - NMDevice * device = NM_DEVICE(self); - NMSettingWireless * s_wireless; - NMSettingWirelessSecurity *s_wireless_sec; - GDBusProxy * proxy = NULL; - GBytes * ssid; - gs_free char * ssid_utf8 = NULL; - const char * mode; + NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMDevice * device = NM_DEVICE(self); + NMSettingWireless * s_wireless; + GDBusProxy * proxy = NULL; + gs_free char * ssid = NULL; + const char * mode; + NMIwdNetworkSecurity security; if (!priv->act_mode_switch) return; @@ -1544,44 +1733,46 @@ act_check_interface(NMDeviceIwd *self) if (!NM_IN_SET(nm_device_get_state(device), NM_DEVICE_STATE_CONFIG)) return; - ssid = nm_setting_wireless_get_ssid(s_wireless); - if (!ssid) + if (!nm_wifi_connection_get_iwd_ssid_and_security(nm_device_get_applied_connection(device), + &ssid, + &security)) goto failed; - ssid_utf8 = _nm_utils_ssid_to_utf8(ssid); - - s_wireless_sec = (NMSettingWirelessSecurity *) nm_device_get_applied_setting( - device, - NM_TYPE_SETTING_WIRELESS_SECURITY); - - if (!s_wireless_sec) { + if (security == NM_IWD_NETWORK_SECURITY_NONE) { g_dbus_proxy_call(proxy, "StartOpen", - g_variant_new("(s)", ssid_utf8), + g_variant_new("(s)", ssid), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, priv->cancellable, act_start_cb, self); - } else { - const char *psk = nm_setting_wireless_security_get_psk(s_wireless_sec); + } else if (security == NM_IWD_NETWORK_SECURITY_PSK) { + NMSettingWirelessSecurity *s_wireless_sec; + const char * psk; + + s_wireless_sec = (NMSettingWirelessSecurity *) nm_device_get_applied_setting( + device, + NM_TYPE_SETTING_WIRELESS_SECURITY); + psk = nm_setting_wireless_security_get_psk(s_wireless_sec); if (!psk) { - _LOGE(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) No PSK for '%s'.", ssid_utf8); + _LOGE(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) No PSK for '%s'.", ssid); goto failed; } g_dbus_proxy_call(proxy, "Start", - g_variant_new("(ss)", ssid_utf8, psk), + g_variant_new("(ss)", ssid, psk), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, priv->cancellable, act_start_cb, self); - } + } else + goto failed; - _LOGD(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) Called Start('%s').", ssid_utf8); + _LOGD(LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) Called Start('%s').", ssid); return; failed: @@ -1718,6 +1909,237 @@ set_powered(NMDeviceIwd *self, gboolean powered) /*****************************************************************************/ +static NMWifiAP * +find_ap_by_supplicant_path(NMDeviceIwd *self, const NMRefString *path) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMWifiAP * tmp; + + c_list_for_each_entry (tmp, &priv->aps_lst_head, aps_lst) + if (nm_wifi_ap_get_supplicant_path(tmp) == path) + return tmp; + + return NULL; +} + +static void +assumed_connection_state_changed(NMActiveConnection *active, GParamSpec *pspec, NMDeviceIwd *self) +{ + NMSettingsConnection * sett_conn = nm_active_connection_get_settings_connection(active); + NMActiveConnectionState state = nm_active_connection_get_state(active); + + /* Delete the temporary connection created for an external IWD connection + * (triggered by somebody outside of NM, be it IWD autoconnect or a + * parallel client), unless it's been referenced by a Known Network + * object since, which would remove the EXTERNAL flag. + * + * Note we can't do this too early, e.g. at the same time that we're + * setting the device state to FAILED or DISCONNECTING because the + * connection shouldn't disappear while it's still being used. We do + * this on the connection's transition to DEACTIVATED same as as + * NMManager does for external activations. + */ + if (state != NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) + return; + + g_signal_handlers_disconnect_by_func(active, assumed_connection_state_changed, NULL); + + if (sett_conn + && NM_FLAGS_HAS(nm_settings_connection_get_flags(sett_conn), + NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL)) + nm_settings_connection_delete(sett_conn, FALSE); +} + +static void +assumed_connection_state_changed_before_managed(NMActiveConnection *active, + GParamSpec * pspec, + NMDeviceIwd * self) +{ + NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMActiveConnectionState state = nm_active_connection_get_state(active); + gboolean disconnect; + + if (state != NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) + return; + + /* When an assumed connection fails we always get called, even if the + * activation hasn't reached PREPARE or CONFIG, e.g. because of a policy + * or authorization problem in NMManager. .deactivate would only be + * called starting at some stage so we can't rely on that. + * + * If the error happened before PREPARE (where we set a non-NULL + * priv->current_ap) that will mean NM is somehow blocking autoconnect + * so we want to call IWD's Station.Disconnect() to block its + * autoconnect. If this happens during or after PREPARE, we just + * clean up and wait for a new attempt by IWD. + * + * cleanup_association_attempt will clear priv->assumed_ac, disconnect + * this callback from the signal and also send a Disconnect to IWD if + * needed. + * + * Note this function won't be called after IWD transitions to + * "connected" (and NMDevice to IP_CONFIG) as we disconnect from the + * signal at that point, cleanup_association_attempt() will be + * triggered by an IWD state change instead. + */ + disconnect = !priv->current_ap; + cleanup_association_attempt(self, disconnect); +} + +static void +assume_connection(NMDeviceIwd *self, NMWifiAP *ap) +{ + NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMSettingsConnection *sett_conn; + gs_unref_object NMAuthSubject *subject = NULL; + NMActiveConnection * ac; + gs_free_error GError *error = NULL; + + /* We can use the .update_connection / nm_device_emit_recheck_assume + * API but we can also pass an assumed/external activation type + * directly to nm_manager_activate_connection() and skip the + * complicated process of creating a matching connection, taking + * advantage of the Known Networks pointing directly to a mirror + * connection. The only downside seems to be + * nm_manager_activate_connection() goes through the extra + * authorization. + * + * However for now we implement a similar behaviour using a normal + * "managed" activation. For one, assumed/external + * connection state is not reflected in nm_manager_get_state() until + * fully activated. Secondly setting the device state to FAILED + * is treated as ACTIVATED so we'd have to find another way to signal + * that stage2 is failing asynchronously. Thirdly the connection + * becomes "managed" only when ACTIVATED but for IWD it's really + * managed when IP_CONFIG starts. + */ + sett_conn = nm_iwd_manager_get_ap_mirror_connection(nm_iwd_manager_get(), ap); + if (!sett_conn) + goto error; + + subject = nm_auth_subject_new_internal(); + ac = nm_manager_activate_connection( + NM_MANAGER_GET, + sett_conn, + NULL, + nm_dbus_object_get_path(NM_DBUS_OBJECT(ap)), + NM_DEVICE(self), + subject, + NM_ACTIVATION_TYPE_MANAGED, + NM_ACTIVATION_REASON_ASSUME, + NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY, + &error); + + if (!ac) { + _LOGW(LOGD_WIFI, "Activation: (wifi) assume error: %s", error->message); + goto error; + } + + /* If no Known Network existed for this AP, we generated a temporary + * NMSettingsConnection with the EXTERNAL flag. It is not referenced by + * any Known Network objects at this time so we want to delete it if the + * IWD connection ends up failing or a later part of the activation fails + * before IWD created a Known Network. + * Setting the activation type to EXTERNAL would do this by causing + * NM_ACTIVATION_STATE_FLAG_EXTERNAL to be set on the NMActiveConnection + * but we don't want the connection to be marked EXTERNAL because we + * will be assuming the ownership of it in IP_CONFIG or thereabouts. + * + * This callback stays connected forever while the second one gets + * disconnected when we reset the activation type to managed. + */ + g_signal_connect(ac, + "notify::" NM_ACTIVE_CONNECTION_STATE, + G_CALLBACK(assumed_connection_state_changed), + NULL); + g_signal_connect(ac, + "notify::" NM_ACTIVE_CONNECTION_STATE, + G_CALLBACK(assumed_connection_state_changed_before_managed), + self); + priv->assumed_ac = g_object_ref(ac); + + return; + +error: + send_disconnect(self); + + if (sett_conn + && NM_FLAGS_HAS(nm_settings_connection_get_flags(sett_conn), + NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL)) + nm_settings_connection_delete(sett_conn, FALSE); +} + +static void +assumed_connection_progress_to_ip_config(NMDeviceIwd *self, gboolean was_postponed) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMDevice * device = NM_DEVICE(self); + NMDeviceState dev_state = nm_device_get_state(device); + + wifi_secrets_cancel(self); + nm_clear_g_source(&priv->assumed_ac_timeout); + + /* NM takes over the activation from this point on so clear the assumed + * activation state and if we were using NM_ACTIVATION_TYPE_ASSUMED or + * _EXTERNAL we'd need to reset the activation type to _MANAGED at this + * point instead of waiting for the ACTIVATED state (as done in + * nm_active_connection_set_state). + */ + cleanup_assumed_connect(self); + + if (dev_state == NM_DEVICE_STATE_NEED_AUTH) + nm_device_state_changed(NM_DEVICE(self), + NM_DEVICE_STATE_CONFIG, + NM_DEVICE_STATE_REASON_NONE); + + /* If stage2 had returned NM_ACT_STAGE_RETURN_POSTPONE, we tell NMDevice + * that stage2 is done. + */ + if (was_postponed) + nm_device_activate_schedule_stage3_ip_config_start(NM_DEVICE(self)); +} + +static void +initial_check_assume(NMDeviceIwd *self) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + const char * network_path_str; + nm_auto_ref_string NMRefString *network_path = NULL; + NMWifiAP * ap = NULL; + gs_unref_variant GVariant *state_value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + gs_unref_variant GVariant *cn_value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "ConnectedNetwork"); + + if (!NM_IN_STRSET(get_variant_state(state_value), "connecting", "connected", "roaming")) + return; + + if (!priv->iwd_autoconnect) { + send_disconnect(self); + return; + } + + if (!cn_value || !g_variant_is_of_type(cn_value, G_VARIANT_TYPE_OBJECT_PATH)) { + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "ConnectedNetwork property not cached or not an object path"); + return; + } + + network_path_str = g_variant_get_string(cn_value, NULL); + network_path = nm_ref_string_new(network_path_str); + ap = find_ap_by_supplicant_path(self, network_path); + + if (!ap) { + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "ConnectedNetwork points to an unknown Network %s", + network_path_str); + return; + } + + _LOGD(LOGD_DEVICE | LOGD_WIFI, "assuming connection in initial_check_assume"); + assume_connection(self, ap); +} + static NMActStageReturn act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason) { @@ -1740,9 +2162,9 @@ act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason) s_wireless = nm_connection_get_setting_wireless(connection); g_return_val_if_fail(s_wireless, NM_ACT_STAGE_RETURN_FAILURE); - /* AP mode never uses a specific object or existing scanned AP */ + /* AP, Ad-Hoc modes never use a specific object or existing scanned AP */ mode = nm_setting_wireless_get_mode(s_wireless); - if (nm_streq0(mode, NM_SETTING_WIRELESS_MODE_AP)) + if (NM_IN_STRSET(mode, NM_SETTING_WIRELESS_MODE_AP, NM_SETTING_WIRELESS_MODE_ADHOC)) goto add_new; ap_path = nm_active_connection_get_specific_object(NM_ACTIVE_CONNECTION(req)); @@ -1760,14 +2182,16 @@ act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason) return NM_ACT_STAGE_RETURN_SUCCESS; } - if (nm_streq0(mode, NM_SETTING_WIRELESS_MODE_INFRA)) { - /* Hidden networks not supported at this time */ + /* In infrastructure mode the specific object should be set by now except + * for a first-time connection to a hidden network. If a hidden network is + * a Known Network it should still have been in the AP list. + */ + if (!nm_setting_wireless_get_hidden(s_wireless) || is_connection_known_network(connection)) return NM_ACT_STAGE_RETURN_FAILURE; - } add_new: /* If the user is trying to connect to an AP that NM doesn't yet know about - * (hidden network or something) or starting a Hotspot, create an fake AP + * (hidden network or something) or starting a Hotspot, create a fake AP * from the security settings in the connection. This "fake" AP gets used * until the real one is found in the scan list (Ad-Hoc or Hidden), or until * the device is deactivated (Ad-Hoc or Hotspot). @@ -1814,6 +2238,42 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) goto out_fail; } + /* With priv->iwd_autoconnect, if we're assuming a connection because + * of a state change to "connecting", signal stage 2 is still running. + * If "connected" or "roaming", we can go right to the IP_CONFIG state + * and there's nothing left to do in CONFIG. + * If we're assuming the connection because of an agent request we + * switch to NEED_AUTH and actually send the request now that we + * have an activation request. + * + * This all assumes ConnectedNetwork hasn't changed. + */ + if (priv->assumed_ac) { + gboolean result; + + if (!priv->pending_agent_request) { + gs_unref_variant GVariant *value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + + if (nm_streq(get_variant_state(value), "connecting")) { + return NM_ACT_STAGE_RETURN_POSTPONE; + } else { + /* This basically forgets that the connection was "assumed" + * as we can treat it like any connection triggered by a + * Network.Connect() call from now on. + */ + assumed_connection_progress_to_ip_config(self, FALSE); + return NM_ACT_STAGE_RETURN_SUCCESS; + } + } + + result = nm_device_iwd_agent_query(self, priv->pending_agent_request); + g_clear_object(&priv->pending_agent_request); + nm_assert(result); + + return NM_ACT_STAGE_RETURN_POSTPONE; + } + /* 802.1x networks that are not IWD Known Networks will definitely * fail, for other combinations we will let the Connect call fail * or ask us for any missing secrets through the Agent. @@ -1828,15 +2288,28 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) goto out_fail; } - if (!is_connection_known_network(connection) - && nm_setting_wireless_get_hidden(s_wireless)) { - gs_free char *ssid_str = NULL; + priv->secrets_failed = FALSE; + + if (nm_wifi_ap_get_fake(ap)) { + gs_free char *ssid = NULL; + + if (!nm_setting_wireless_get_hidden(s_wireless)) { + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "Activation: (wifi) target network not known to IWD but is not " + "marked hidden"); + NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); + goto out_fail; + } + + if (!nm_wifi_connection_get_iwd_ssid_and_security(connection, &ssid, NULL)) { + NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); + goto out_fail; + } /* Use Station.ConnectHiddenNetwork method instead of Network proxy. */ - ssid_str = _nm_utils_ssid_to_utf8(nm_setting_wireless_get_ssid(s_wireless)); g_dbus_proxy_call(priv->dbus_station_proxy, "ConnectHiddenNetwork", - g_variant_new("(s)", ssid_str), + g_variant_new("(s)", ssid), G_DBUS_CALL_FLAGS_NONE, G_MAXINT, priv->cancellable, @@ -1845,14 +2318,6 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) return NM_ACT_STAGE_RETURN_POSTPONE; } - if (!nm_wifi_ap_get_supplicant_path(ap)) { - _LOGW(LOGD_DEVICE | LOGD_WIFI, - "Activation: (wifi) network is provisioned but dbus supplicant path for AP " - "unknown"); - NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); - goto out_fail; - } - network_proxy = nm_iwd_manager_get_dbus_interface( nm_iwd_manager_get(), nm_ref_string_get_str(nm_wifi_ap_get_supplicant_path(ap)), @@ -1951,31 +2416,26 @@ static void schedule_periodic_scan(NMDeviceIwd *self, gboolean initial_scan) { NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); - GVariant * value; - gboolean disconnected = TRUE; guint interval; - if (priv->can_scan) { - value = g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); - disconnected = nm_streq0(get_variant_state(value), "disconnected"); - g_variant_unref(value); - } - - /* Start scan immediately after a disconnect, mode change or - * device UP, otherwise wait 10 seconds. When connected, update - * AP list mainly on UI requests. + /* Automatically start a scan after a disconnect, mode change or device UP, + * otherwise scan periodically every 10 seconds if needed for NM's + * autoconnect. There's no need to scan When using IWD's autoconnect or + * when connected, we update the AP list on UI requests. * - * (initial_scan && disconnected) override priv->scanning below - * because of an IWD quirk where a device will often be in the - * autoconnect state and scanning at the time of our initial_scan, - * but our logic will then send it a Disconnect() causing IWD to - * exit autoconnect and interrupt the ongoing scan, meaning that - * we still want a new scan ASAP. + * (initial_scan && disconnected && !priv->iwd_autoconnect) override + * priv->scanning below because of an IWD quirk where a device will often + * be in the autoconnect state and scanning at the time of our initial_scan, + * but our logic will then send it a Disconnect() causing IWD to exit + * autoconnect and interrupt the ongoing scan, meaning that we still want + * a new scan ASAP. */ - if (!priv->can_scan || !disconnected || priv->scan_requested || priv->scanning) + if (!priv->can_scan || priv->scan_requested || priv->current_ap || priv->iwd_autoconnect) interval = -1; - else if (initial_scan) + else if (initial_scan && priv->scanning) interval = 0; + else if (priv->scanning) + interval = -1; else if (!priv->periodic_scan_id) interval = 10; else @@ -1997,7 +2457,8 @@ set_can_scan(NMDeviceIwd *self, gboolean can_scan) priv->can_scan = can_scan; - schedule_periodic_scan(self, TRUE); + if (!priv->iwd_autoconnect) + schedule_periodic_scan(self, TRUE); } static void @@ -2008,6 +2469,8 @@ device_state_changed(NMDevice * device, { NMDeviceIwd * self = NM_DEVICE_IWD(device); NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMSettingWireless * s_wireless; + const char * mode; switch (new_state) { case NM_DEVICE_STATE_UNMANAGED: @@ -2024,15 +2487,22 @@ device_state_changed(NMDevice * device, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); } break; - case NM_DEVICE_STATE_NEED_AUTH: - break; - case NM_DEVICE_STATE_IP_CHECK: - break; - case NM_DEVICE_STATE_ACTIVATED: - break; - case NM_DEVICE_STATE_FAILED: - break; case NM_DEVICE_STATE_DISCONNECTED: + if (old_state == NM_DEVICE_STATE_UNAVAILABLE) + initial_check_assume(self); + break; + case NM_DEVICE_STATE_IP_CONFIG: + s_wireless = + (NMSettingWireless *) nm_device_get_applied_setting(device, NM_TYPE_SETTING_WIRELESS); + mode = nm_setting_wireless_get_mode(s_wireless); + if (!priv->periodic_update_id + && NM_IN_STRSET(mode, + NULL, + NM_SETTING_WIRELESS_MODE_INFRA, + NM_SETTING_WIRELESS_MODE_ADHOC)) { + priv->periodic_update_id = g_timeout_add_seconds(6, periodic_update_cb, self); + periodic_update(self); + } break; default: break; @@ -2128,7 +2598,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) break; case PROP_BITRATE: - g_value_set_uint(value, 65000); + g_value_set_uint(value, priv->rate); break; case PROP_CAPABILITIES: g_value_set_uint(value, priv->capabilities); @@ -2164,51 +2634,149 @@ state_changed(NMDeviceIwd *self, const char *new_state) NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); NMDevice * device = NM_DEVICE(self); NMDeviceState dev_state = nm_device_get_state(device); + gboolean nm_connection = priv->current_ap || priv->assumed_ac; gboolean iwd_connection = FALSE; - gboolean can_connect = priv->can_connect; + NMWifiAP * ap = NULL; + gboolean can_connect = priv->nm_autoconnect; _LOGI(LOGD_DEVICE | LOGD_WIFI, "new IWD device state is %s", new_state); - if (dev_state >= NM_DEVICE_STATE_CONFIG && dev_state <= NM_DEVICE_STATE_ACTIVATED) - iwd_connection = TRUE; + if (NM_IN_STRSET(new_state, "connecting", "connected", "roaming")) { + gs_unref_variant GVariant *value = NULL; + const char * network_path_str; + nm_auto_ref_string NMRefString *network_path = NULL; + + value = g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "ConnectedNetwork"); + if (!value || !g_variant_is_of_type(value, G_VARIANT_TYPE_OBJECT_PATH)) { + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "ConnectedNetwork property not cached or not an object path"); + return; + } + + iwd_connection = TRUE; + network_path_str = g_variant_get_string(value, NULL); + network_path = nm_ref_string_new(network_path_str); + ap = find_ap_by_supplicant_path(self, network_path); + + if (!ap) { + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "ConnectedNetwork points to an unknown Network %s", + network_path_str); + return; + } + } /* Don't allow scanning while connecting, disconnecting or roaming */ set_can_scan(self, NM_IN_STRSET(new_state, "connected", "disconnected")); - priv->can_connect = FALSE; + priv->nm_autoconnect = FALSE; - if (NM_IN_STRSET(new_state, "connecting", "connected", "roaming")) { + if (nm_connection && iwd_connection && priv->current_ap && ap != priv->current_ap) { + gboolean switch_ap = priv->iwd_autoconnect && priv->assumed_ac; + + _LOGW(LOGD_DEVICE | LOGD_WIFI, + "IWD is connecting to the wrong AP, %s activation", + switch_ap ? "replacing" : "aborting"); + cleanup_association_attempt(self, !switch_ap); + nm_device_state_changed(device, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); + + if (switch_ap) + assume_connection(self, ap); + return; + } + + if (priv->iwd_autoconnect && iwd_connection) { + if (dev_state < NM_DEVICE_STATE_DISCONNECTED) + return; + + /* If IWD is in any state other than disconnected and the NMDevice is + * in DISCONNECTED then someone else, possibly IWD's autoconnect, has + * commanded an action and we need to update our NMDevice's state to + * match, including finding the NMSettingsConnection and NMWifiAP + * matching the network pointed to by Station.ConnectedNetwork. + * + * If IWD is in the connected state and we're in CONFIG, we only have + * to signal that the existing connection request has advanced to a new + * state. If the connection request came from NM, we must have used + * Network.Connect() so that method call's callback will update the + * connection request, otherwise we do it here. + * + * If IWD is disconnecting or just disconnected, the common code below + * (independent from priv->iwd_autoconnect) will handle this case. + * If IWD is disconnecting but we never saw a connection request in the + * first place (maybe because we're only startig up) we won't be + * setting up an NMActiveConnection just to put the NMDevice in the + * DEACTIVATING state and we ignore this case. + * + * If IWD was in the disconnected state and transitioned to + * "connecting" but we were already in NEED_AUTH because we handled an + * agent query -- IWD normally stays in "disconnected" until it has all + * the secrets -- we record this fact and remain in NEED_AUTH. + */ + if (!nm_connection) { + _LOGD(LOGD_DEVICE | LOGD_WIFI, "This is a new connection, 'assuming' it"); + assume_connection(self, ap); + return; + } + + if (priv->assumed_ac && dev_state >= NM_DEVICE_STATE_PREPARE + && dev_state < NM_DEVICE_STATE_IP_CONFIG + && NM_IN_STRSET(new_state, "connected", "roaming")) { + _LOGD(LOGD_DEVICE | LOGD_WIFI, "Updating assumed activation state"); + assumed_connection_progress_to_ip_config(self, TRUE); + return; + } + + if (priv->assumed_ac) { + _LOGD(LOGD_DEVICE | LOGD_WIFI, "Clearing assumed activation timeout"); + nm_clear_g_source(&priv->assumed_ac_timeout); + return; + } + } else if (!priv->iwd_autoconnect && iwd_connection) { /* If we were connecting, do nothing, the confirmation of * a connection success is handled in the Device.Connect * method return callback. Otherwise, IWD must have connected * without Network Manager's will so for simplicity force a * disconnect. */ - if (iwd_connection) + if (nm_connection) return; - _LOGW(LOGD_DEVICE | LOGD_WIFI, "Unsolicited connection success, asking IWD to disconnect"); + _LOGW(LOGD_DEVICE | LOGD_WIFI, "Unsolicited connection, asking IWD to disconnect"); send_disconnect(self); } else if (NM_IN_STRSET(new_state, "disconnecting", "disconnected")) { - /* Call Disconnect on the IWD device object to make sure it - * disables its own autoconnect. + /* If necessary, call Disconnect on the IWD device object to make sure + * it disables its autoconnect. */ - send_disconnect(self); + if ((!priv->iwd_autoconnect + || nm_device_autoconnect_blocked_get(device, NM_DEVICE_AUTOCONNECT_BLOCKED_ALL)) + && !priv->wifi_secrets_id && !priv->pending_agent_request) + send_disconnect(self); /* * If IWD is still handling the Connect call, let our Connect * callback for the dbus method handle the failure. The main - * reason we can't handle the failure here is because the method - * callback will have more information on the specific failure - * reason. + * reason we don't want to handle the failure here is because the + * method callback will have more information on the specific + * failure reason. + * + * If IWD is handling an autoconnect agent call, let the agent's + * Cancel() handler take care of this. */ - if (NM_IN_SET(dev_state, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_NEED_AUTH)) + if (NM_IN_SET(dev_state, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_NEED_AUTH) + && !priv->assumed_ac) + return; + if (NM_IN_SET(dev_state, NM_DEVICE_STATE_NEED_AUTH) && priv->assumed_ac) return; - if (iwd_connection) + if (nm_connection) { + cleanup_association_attempt(self, FALSE); nm_device_state_changed(device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT); + } } else if (!nm_streq(new_state, "unknown")) { _LOGE(LOGD_WIFI, "State %s unknown", new_state); return; @@ -2217,8 +2785,8 @@ state_changed(NMDeviceIwd *self, const char *new_state) /* Don't allow new connection until iwd exits disconnecting and no * Connect callback is pending. */ - if (NM_IN_STRSET(new_state, "disconnected")) { - priv->can_connect = TRUE; + if (!priv->iwd_autoconnect && NM_IN_STRSET(new_state, "disconnected")) { + priv->nm_autoconnect = TRUE; if (!can_connect) nm_device_emit_recheck_auto_activate(device); } @@ -2239,7 +2807,7 @@ scanning_changed(NMDeviceIwd *self, gboolean new_scanning) if (!priv->scanning) { update_aps(self); - if (!priv->scan_requested) + if (!priv->scan_requested && !priv->iwd_autoconnect) schedule_periodic_scan(self, FALSE); } } @@ -2281,7 +2849,6 @@ powered_changed(NMDeviceIwd *self, gboolean new_powered) { NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); GDBusInterface * interface; - GVariant * value; nm_device_queue_recheck_available(NM_DEVICE(self), NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE, @@ -2340,24 +2907,11 @@ powered_changed(NMDeviceIwd *self, gboolean new_powered) if (new_powered && !priv->dbus_ap_proxy && !priv->dbus_adhoc_proxy) { interface = g_dbus_object_get_interface(priv->dbus_obj, NM_IWD_STATION_INTERFACE); if (!interface) { - /* No Station interface on the device object. Check if the - * "State" property is present on the Device interface, that - * would mean we're dealing with an IWD version from before the - * Device/Station split (0.7 or earlier) and we can easily - * handle that by making priv->dbus_device_proxy and - * priv->dbus_station_proxy both point at the Device interface. - */ - value = g_dbus_proxy_get_cached_property(priv->dbus_device_proxy, "State"); - if (value) { - g_variant_unref(value); - interface = g_object_ref(G_DBUS_INTERFACE(priv->dbus_device_proxy)); - } else { - _LOGE(LOGD_WIFI, - "Interface %s not found on obj %s", - NM_IWD_STATION_INTERFACE, - g_dbus_object_get_object_path(priv->dbus_obj)); - interface = NULL; - } + _LOGE(LOGD_WIFI, + "Interface %s not found on obj %s", + NM_IWD_STATION_INTERFACE, + g_dbus_object_get_object_path(priv->dbus_obj)); + interface = NULL; } } else interface = NULL; @@ -2370,6 +2924,8 @@ powered_changed(NMDeviceIwd *self, gboolean new_powered) } if (interface) { + GVariant *value; + priv->dbus_station_proxy = G_DBUS_PROXY(interface); g_signal_connect(priv->dbus_station_proxy, "g-properties-changed", @@ -2385,11 +2941,21 @@ powered_changed(NMDeviceIwd *self, gboolean new_powered) g_variant_unref(value); update_aps(self); + + /* When a device is brought UP in station mode, including after a mode + * switch, IWD re-enables autoconnect. This is unlike NM's autoconnect + * where a mode change doesn't interfere with the + * BLOCKED_MANUAL_DISCONNECT flag. + */ + if (priv->iwd_autoconnect) { + nm_device_autoconnect_blocked_unset(NM_DEVICE(self), + NM_DEVICE_AUTOCONNECT_BLOCKED_INTERNAL); + } } else { set_can_scan(self, FALSE); priv->scanning = FALSE; priv->scan_requested = FALSE; - priv->can_connect = FALSE; + priv->nm_autoconnect = FALSE; cleanup_association_attempt(self, FALSE); remove_all_aps(self); } @@ -2408,6 +2974,36 @@ device_properties_changed(GDBusProxy *proxy, powered_changed(self, new_bool); } +static void +config_changed(NMConfig * config, + NMConfigData * config_data, + NMConfigChangeFlags changes, + NMConfigData * old_data, + NMDeviceIwd * self) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + gboolean old_iwd_ac = priv->iwd_autoconnect; + + priv->iwd_autoconnect = + nm_config_data_get_device_config_boolean(config_data, + NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_IWD_AUTOCONNECT, + NM_DEVICE(self), + TRUE, + TRUE); + + if (old_iwd_ac != priv->iwd_autoconnect && priv->dbus_station_proxy && !priv->current_ap) { + gs_unref_variant GVariant *value = NULL; + + if (!priv->iwd_autoconnect + && !nm_device_autoconnect_blocked_get(NM_DEVICE(self), + NM_DEVICE_AUTOCONNECT_BLOCKED_ALL)) + send_disconnect(self); + + value = g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + state_changed(self, get_variant_state(value)); + } +} + void nm_device_iwd_set_dbus_object(NMDeviceIwd *self, GDBusObject *object) { @@ -2432,6 +3028,8 @@ nm_device_iwd_set_dbus_object(NMDeviceIwd *self, GDBusObject *object) powered_changed(self, FALSE); priv->act_mode_switch = FALSE; + + g_signal_handlers_disconnect_by_func(nm_config_get(), config_changed, self); } if (!object) @@ -2494,6 +3092,13 @@ nm_device_iwd_set_dbus_object(NMDeviceIwd *self, GDBusObject *object) _notify(self, PROP_CAPABILITIES); } + /* Update iwd_autoconnect before any state_changed call */ + g_signal_connect(nm_config_get(), + NM_CONFIG_SIGNAL_CONFIG_CHANGED, + G_CALLBACK(config_changed), + self); + config_changed(NULL, NM_CONFIG_GET_DATA, 0, NULL, self); + g_variant_unref(value); value = g_dbus_proxy_get_cached_property(priv->dbus_device_proxy, "Powered"); powered = get_variant_boolean(value, "Powered"); @@ -2513,24 +3118,127 @@ error: gboolean nm_device_iwd_agent_query(NMDeviceIwd *self, GDBusMethodInvocation *invocation) { - NMActRequest * req; + NMDevice * device = NM_DEVICE(self); + NMDeviceIwdPrivate * priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMDeviceState state = nm_device_get_state(device); const char * setting_name; const char * setting_key; gboolean replied; + NMWifiAP * ap; NMSecretAgentGetSecretsFlags get_secret_flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION; + nm_auto_ref_string NMRefString *network_path = NULL; - req = nm_device_get_act_request(NM_DEVICE(self)); - if (!req) + if (!invocation) { + gs_unref_variant GVariant *value = + g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + gboolean disconnect; + + if (!priv->wifi_secrets_id && !priv->pending_agent_request) + return FALSE; + + _LOGI(LOGD_WIFI, "IWD agent request is being cancelled"); + wifi_secrets_cancel(self); + + if (state == NM_DEVICE_STATE_NEED_AUTH) + nm_device_state_changed(device, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE); + + /* The secrets request is being cancelled. If we don't have an assumed + * connection than we've probably called Network.Connect and that method + * call's callback is going to handle the failure. And if the state was + * not "disconnected" then let the state change handler process the + * failure. + */ + if (!priv->assumed_ac) + return TRUE; + + if (!nm_streq(get_variant_state(value), "disconnected")) + return TRUE; + + disconnect = nm_device_autoconnect_blocked_get(device, NM_DEVICE_AUTOCONNECT_BLOCKED_ALL); + cleanup_association_attempt(self, disconnect); + nm_device_state_changed(device, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); + return TRUE; + } + + if (state > NM_DEVICE_STATE_CONFIG && state < NM_DEVICE_STATE_DEACTIVATING) { + _LOGW(LOGD_WIFI, "Can't handle the IWD agent request in current device state"); + return FALSE; + } + + if (priv->wifi_secrets_id || priv->pending_agent_request) { + _LOGW(LOGD_WIFI, "There's already a pending agent request for this device"); return FALSE; + } + + network_path = nm_ref_string_new(get_agent_request_network_path(invocation)); + ap = find_ap_by_supplicant_path(self, network_path); + if (!ap) { + _LOGW(LOGD_WIFI, "IWD Network object not found for the agent request"); + return FALSE; + } + + if (priv->assumed_ac) { + const char *ac_ap_path = nm_active_connection_get_specific_object(priv->assumed_ac); + + if (!nm_streq(ac_ap_path, nm_dbus_object_get_path(NM_DBUS_OBJECT(ap)))) { + _LOGW(LOGD_WIFI, + "Dropping an existing assumed connection to create a new one based on the IWD " + "agent request network parameter"); + + if (priv->current_ap) + nm_device_state_changed(device, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); + + cleanup_association_attempt(self, FALSE); + priv->pending_agent_request = g_object_ref(invocation); + assume_connection(self, ap); + return TRUE; + } + + if (state != NM_DEVICE_STATE_CONFIG) { + _LOGI(LOGD_WIFI, "IWD agent request deferred until in CONFIG"); + priv->pending_agent_request = g_object_ref(invocation); + return TRUE; + } + + /* Otherwise handle as usual */ + } else if (!priv->current_ap) { + _LOGI(LOGD_WIFI, "IWD is asking for secrets without explicit connect request"); + + if (priv->iwd_autoconnect) { + priv->pending_agent_request = g_object_ref(invocation); + assume_connection(self, ap); + return TRUE; + } + + send_disconnect(self); + return FALSE; + } else if (priv->current_ap) { + if (priv->current_ap != ap) { + _LOGW(LOGD_WIFI, "IWD agent request for a wrong network object"); + cleanup_association_attempt(self, TRUE); + nm_device_state_changed(device, + NM_DEVICE_STATE_FAILED, + NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED); + return FALSE; + } + + /* Otherwise handle as usual */ + } if (!try_reply_agent_request(self, - nm_act_request_get_applied_connection(req), + nm_device_get_applied_connection(device), invocation, &setting_name, &setting_key, - &replied)) + &replied)) { + priv->secrets_failed = TRUE; return FALSE; + } if (replied) return TRUE; @@ -2543,17 +3251,83 @@ nm_device_iwd_agent_query(NMDeviceIwd *self, GDBusMethodInvocation *invocation) * Connection timestamp is set after activation or after first * activation failure (to 0). */ - if (nm_settings_connection_get_timestamp(nm_act_request_get_settings_connection(req), NULL)) + if (nm_settings_connection_get_timestamp(nm_device_get_settings_connection(device), NULL)) get_secret_flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW; - nm_device_state_changed(NM_DEVICE(self), - NM_DEVICE_STATE_NEED_AUTH, - NM_DEVICE_STATE_REASON_NO_SECRETS); + nm_device_state_changed(device, NM_DEVICE_STATE_NEED_AUTH, NM_DEVICE_STATE_REASON_NO_SECRETS); wifi_secrets_get_one(self, setting_name, get_secret_flags, setting_key, invocation); return TRUE; } +void +nm_device_iwd_network_add_remove(NMDeviceIwd *self, GDBusProxy *network, bool add) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + NMWifiAP * ap = NULL; + bool recheck; + nm_auto_ref_string NMRefString *bss_path = NULL; + + bss_path = nm_ref_string_new(g_dbus_proxy_get_object_path(network)); + ap = find_ap_by_supplicant_path(self, bss_path); + + /* We could schedule an update_aps(self) idle call here but up to IWD 1.9 + * when a hidden network connection is attempted, that network is initially + * only added as a Network object but not shown in GetOrderedNetworks() + * return values, and for some corner case scenarios it's beneficial to + * have that Network reflected in our ap list so that we don't attempt + * calling ConnectHiddenNetwork() on it, as that will fail in 1.9. But we + * can skip recheck-available if we're currently scanning or in the middle + * of a GetOrderedNetworks() call as that will trigger the recheck too. + */ + recheck = priv->enabled && !priv->scanning && !priv->networks_requested; + + if (!add) { + if (ap) { + ap_add_remove(self, FALSE, ap, recheck); + priv->networks_changed |= !recheck; + } + + return; + } + + if (!ap) { + ap = ap_from_network(self, + network, + bss_path, + nm_utils_get_monotonic_timestamp_msec(), + -10000); + if (!ap) + return; + + ap_add_remove(self, TRUE, ap, recheck); + g_object_unref(ap); + priv->networks_changed |= !recheck; + return; + } +} + +static void +autoconnect_changed(NMDevice *device, GParamSpec *pspec, NMDeviceIwd *self) +{ + NMDeviceIwdPrivate *priv = NM_DEVICE_IWD_GET_PRIVATE(self); + gs_unref_variant GVariant *value = NULL; + + /* Note IWD normally remains in "disconnected" during a secret request + * and we don't want to interrupt it by calling Station.Disconnect(). + */ + if (!priv->dbus_station_proxy || !priv->iwd_autoconnect + || !nm_device_autoconnect_blocked_get(device, NM_DEVICE_AUTOCONNECT_BLOCKED_ALL) + || priv->wifi_secrets_id || priv->pending_agent_request) + return; + + value = g_dbus_proxy_get_cached_property(priv->dbus_station_proxy, "State"); + if (!nm_streq(get_variant_state(value), "disconnected")) + return; + + send_disconnect(self); +} + /*****************************************************************************/ static const char * @@ -2573,6 +3347,8 @@ nm_device_iwd_init(NMDeviceIwd *self) c_list_init(&priv->aps_lst_head); + g_signal_connect(self, "notify::" NM_DEVICE_AUTOCONNECT, G_CALLBACK(autoconnect_changed), self); + /* Make sure the manager is running */ (void) nm_iwd_manager_get(); } @@ -2602,6 +3378,7 @@ dispose(GObject *object) nm_clear_g_cancellable(&priv->cancellable); + g_signal_handlers_disconnect_by_func(self, autoconnect_changed, self); nm_device_iwd_set_dbus_object(self, NULL); G_OBJECT_CLASS(nm_device_iwd_parent_class)->dispose(object); @@ -2643,6 +3420,13 @@ nm_device_iwd_class_init(NMDeviceIwdClass *klass) device_class->deactivate_async = deactivate_async; device_class->can_reapply_change = can_reapply_change; + /* Stage 1 needed only for the set_current_ap() call. Stage 2 is + * needed if we're assuming a connection still in the "connecting" + * state or on an agent request. + */ + device_class->act_stage1_prepare_also_for_external_or_assume = TRUE; + device_class->act_stage2_config_also_for_external_or_assume = TRUE; + device_class->state_changed = device_state_changed; obj_properties[PROP_MODE] = g_param_spec_uint(NM_DEVICE_IWD_MODE, diff --git a/src/devices/wifi/nm-device-iwd.h b/src/devices/wifi/nm-device-iwd.h index e364beaf3d..d4bf5dd61d 100644 --- a/src/devices/wifi/nm-device-iwd.h +++ b/src/devices/wifi/nm-device-iwd.h @@ -44,4 +44,6 @@ void _nm_device_iwd_request_scan(NMDeviceIwd * self, GVariant * options, GDBusMethodInvocation *invocation); +void nm_device_iwd_network_add_remove(NMDeviceIwd *device, GDBusProxy *network, bool add); + #endif /* __NETWORKMANAGER_DEVICE_IWD_H__ */ diff --git a/src/devices/wifi/nm-device-olpc-mesh.c b/src/devices/wifi/nm-device-olpc-mesh.c index 22e94a6dcc..d3874ff16d 100644 --- a/src/devices/wifi/nm-device-olpc-mesh.c +++ b/src/devices/wifi/nm-device-olpc-mesh.c @@ -30,8 +30,8 @@ #include "nm-manager.h" #include "platform/nm-platform.h" +#define _NMLOG_DEVICE_TYPE NMDeviceOlpcMesh #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceOlpcMesh); /*****************************************************************************/ @@ -460,16 +460,16 @@ constructed(GObject *object) NMDevice * nm_device_olpc_mesh_new(const char *iface) { - return (NMDevice *) g_object_new(NM_TYPE_DEVICE_OLPC_MESH, - NM_DEVICE_IFACE, - iface, - NM_DEVICE_TYPE_DESC, - "802.11 OLPC Mesh", - NM_DEVICE_DEVICE_TYPE, - NM_DEVICE_TYPE_OLPC_MESH, - NM_DEVICE_LINK_TYPE, - NM_LINK_TYPE_OLPC_MESH, - NULL); + return g_object_new(NM_TYPE_DEVICE_OLPC_MESH, + NM_DEVICE_IFACE, + iface, + NM_DEVICE_TYPE_DESC, + "802.11 OLPC Mesh", + NM_DEVICE_DEVICE_TYPE, + NM_DEVICE_TYPE_OLPC_MESH, + NM_DEVICE_LINK_TYPE, + NM_LINK_TYPE_OLPC_MESH, + NULL); } static void diff --git a/src/devices/wifi/nm-device-wifi-p2p.c b/src/devices/wifi/nm-device-wifi-p2p.c index 2e5317fd95..0780d80b34 100644 --- a/src/devices/wifi/nm-device-wifi-p2p.c +++ b/src/devices/wifi/nm-device-wifi-p2p.c @@ -27,8 +27,8 @@ #include "platform/nmp-object.h" #include "settings/nm-settings.h" +#define _NMLOG_DEVICE_TYPE NMDeviceWifiP2P #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceWifiP2P); /*****************************************************************************/ diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index 980916dde3..bbd2b130d8 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -41,8 +41,8 @@ #include "nm-core-internal.h" #include "nm-config.h" +#define _NMLOG_DEVICE_TYPE NMDeviceWifi #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceWifi); #define SCAN_INTERVAL_SEC_MIN 3 #define SCAN_INTERVAL_SEC_STEP 20 @@ -728,6 +728,7 @@ periodic_update(NMDeviceWifi *self) NMDeviceWifiPrivate *priv; int ifindex; guint32 new_rate; + int percent; if (nm_device_get_state(NM_DEVICE(self)) != NM_DEVICE_STATE_ACTIVATED) { /* BSSID and signal strength have meaningful values only if the device @@ -757,23 +758,22 @@ periodic_update(NMDeviceWifi *self) if (ifindex <= 0) g_return_if_reached(); - if (priv->current_ap) { - int percent; - - percent = nm_platform_wifi_get_quality(nm_device_get_platform(NM_DEVICE(self)), ifindex); - if (percent >= 0 && percent <= 100) { - if (nm_wifi_ap_set_strength(priv->current_ap, (gint8) percent)) { + if (priv->current_ap + && nm_platform_wifi_get_station(nm_device_get_platform(NM_DEVICE(self)), + ifindex, + NULL, + &percent, + &new_rate)) { + if (nm_wifi_ap_set_strength(priv->current_ap, (gint8) percent)) { #if NM_MORE_LOGGING - _ap_dump(self, LOGL_TRACE, priv->current_ap, "updated", 0); + _ap_dump(self, LOGL_TRACE, priv->current_ap, "updated", 0); #endif - } } - } - new_rate = nm_platform_wifi_get_rate(nm_device_get_platform(NM_DEVICE(self)), ifindex); - if (new_rate != priv->rate) { - priv->rate = new_rate; - _notify(self, PROP_BITRATE); + if (new_rate != priv->rate) { + priv->rate = new_rate; + _notify(self, PROP_BITRATE); + } } } @@ -3136,6 +3136,9 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) NMSettingWireless * s_wireless; GError * error = NULL; guint timeout; + NMActRequest * request; + NMActiveConnection * master_ac; + NMDevice * master; nm_clear_g_source(&priv->sup_timeout_id); nm_clear_g_source(&priv->link_timeout_id); @@ -3209,6 +3212,15 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason) goto out_fail; } + /* Tell the supplicant in which bridge the interface is */ + if ((request = nm_device_get_act_request(device)) + && (master_ac = nm_active_connection_get_master(NM_ACTIVE_CONNECTION(request))) + && (master = nm_active_connection_get_device(master_ac)) + && nm_device_get_device_type(master) == NM_DEVICE_TYPE_BRIDGE) { + nm_supplicant_interface_set_bridge(priv->sup_iface, nm_device_get_iface(master)); + } else + nm_supplicant_interface_set_bridge(priv->sup_iface, NULL); + nm_supplicant_interface_assoc(priv->sup_iface, config, supplicant_iface_assoc_cb, self); /* Set up a timeout on the association attempt */ @@ -3357,31 +3369,33 @@ activation_success_handler(NMDevice *device) g_warn_if_fail(priv->current_ap); if (priv->current_ap) { if (nm_wifi_ap_get_fake(priv->current_ap)) { - gboolean ap_changed = FALSE; + gboolean ap_changed = FALSE; + gboolean update_bssid = !nm_wifi_ap_get_address(priv->current_ap); + gboolean update_rate = !nm_wifi_ap_get_max_bitrate(priv->current_ap); + NMEtherAddr bssid; + guint32 rate; /* If the activation AP hasn't been seen by the supplicant in a scan * yet, it will be "fake". This usually happens for Ad-Hoc and * AP-mode connections. Fill in the details from the device itself * until the supplicant sends the scan result. */ - if (!nm_wifi_ap_get_address(priv->current_ap)) { - guint8 bssid[ETH_ALEN] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - gs_free char *bssid_str = NULL; - - if (nm_platform_wifi_get_bssid(nm_device_get_platform(device), ifindex, bssid) - && nm_ethernet_address_is_valid(bssid, ETH_ALEN)) { - bssid_str = nm_utils_hwaddr_ntoa(bssid, ETH_ALEN); - ap_changed |= nm_wifi_ap_set_address(priv->current_ap, bssid_str); - } - } if (!nm_wifi_ap_get_freq(priv->current_ap)) ap_changed |= nm_wifi_ap_set_freq( priv->current_ap, nm_platform_wifi_get_frequency(nm_device_get_platform(device), ifindex)); - if (!nm_wifi_ap_get_max_bitrate(priv->current_ap)) - ap_changed |= nm_wifi_ap_set_max_bitrate( - priv->current_ap, - nm_platform_wifi_get_rate(nm_device_get_platform(device), ifindex)); + + if ((update_bssid || update_rate) + && nm_platform_wifi_get_station(nm_device_get_platform(device), + ifindex, + update_bssid ? &bssid : NULL, + NULL, + update_rate ? &rate : NULL)) { + if (update_bssid && nm_ether_addr_is_valid(&bssid)) + ap_changed |= nm_wifi_ap_set_address_bin(priv->current_ap, &bssid); + if (update_rate) + ap_changed |= nm_wifi_ap_set_max_bitrate(priv->current_ap, rate); + } if (ap_changed) _ap_dump(self, LOGL_DEBUG, priv->current_ap, "updated", 0); diff --git a/src/devices/wifi/nm-iwd-manager.c b/src/devices/wifi/nm-iwd-manager.c index c7e99e0bf4..2be208c774 100644 --- a/src/devices/wifi/nm-iwd-manager.c +++ b/src/devices/wifi/nm-iwd-manager.c @@ -16,6 +16,7 @@ #include "nm-wifi-utils.h" #include "nm-glib-aux/nm-random-utils.h" #include "settings/nm-settings.h" +#include "nm-std-aux/nm-dbus-compat.h" /*****************************************************************************/ @@ -39,6 +40,7 @@ typedef struct { guint agent_id; char * agent_path; GHashTable * known_networks; + NMDeviceIwd * last_agent_call_device; } NMIwdManagerPrivate; struct _NMIwdManager { @@ -87,7 +89,8 @@ G_DEFINE_TYPE(NMIwdManager, nm_iwd_manager, G_TYPE_OBJECT) /*****************************************************************************/ -static void mirror_8021x_connection_take_and_delete(NMSettingsConnection *sett_conn); +static void mirror_connection_take_and_delete(NMSettingsConnection *sett_conn, + KnownNetworkData * data); /*****************************************************************************/ @@ -117,6 +120,59 @@ get_property_string_or_null(GDBusProxy *proxy, const char *property) return get_variant_string_or_null(value); } +static gboolean +get_property_bool(GDBusProxy *proxy, const char *property, gboolean default_val) +{ + gs_unref_variant GVariant *value = NULL; + + if (!proxy || !property) + return default_val; + + value = g_dbus_proxy_get_cached_property(proxy, property); + if (!value || !g_variant_is_of_type(value, G_VARIANT_TYPE_BOOLEAN)) + return default_val; + + return g_variant_get_boolean(value); +} + +static NMDeviceIwd * +get_device_from_network(NMIwdManager *self, GDBusProxy *network) +{ + NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self); + const char * ifname; + const char * device_path; + NMDevice * device; + gs_unref_object GDBusInterface *device_obj = NULL; + + /* Try not to rely on the path of the Device being a prefix of the + * Network's object path. + */ + + device_path = get_property_string_or_null(network, "Device"); + if (!device_path) { + _LOGD("Device not cached for network at %s", g_dbus_proxy_get_object_path(network)); + return NULL; + } + + device_obj = g_dbus_object_manager_get_interface(priv->object_manager, + device_path, + NM_IWD_DEVICE_INTERFACE); + + ifname = get_property_string_or_null(G_DBUS_PROXY(device_obj), "Name"); + if (!ifname) { + _LOGD("Name not cached for device at %s", device_path); + return NULL; + } + + device = nm_manager_get_device(priv->manager, ifname, NM_DEVICE_TYPE_WIFI); + if (!device || !NM_IS_DEVICE_IWD(device)) { + _LOGD("NM device %s is not an IWD-managed device", ifname); + return NULL; + } + + return NM_DEVICE_IWD(device); +} + static void agent_dbus_method_cb(GDBusConnection * connection, const char * sender, @@ -129,12 +185,10 @@ agent_dbus_method_cb(GDBusConnection * connection, { NMIwdManager * self = user_data; NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self); - const char * network_path, *device_path, *ifname; - gs_unref_object GDBusInterface *network = NULL, *device_obj = NULL; - int ifindex; - NMDevice * device; - gs_free char * name_owner = NULL; - int errsv; + const char * network_path; + NMDeviceIwd * device; + gs_free char * name_owner = NULL; + gs_unref_object GDBusInterface *network = NULL; /* Be paranoid and check the sender address */ name_owner = g_dbus_object_manager_client_get_name_owner( @@ -142,6 +196,25 @@ agent_dbus_method_cb(GDBusConnection * connection, if (!nm_streq0(name_owner, sender)) goto return_error; + if (!strcmp(method_name, "Cancel")) { + const char *reason = NULL; + + g_variant_get(parameters, "(&s)", &reason); + _LOGD("agent-request: Cancel reason: %s", reason); + + if (!priv->last_agent_call_device) + goto return_error; + + if (nm_device_iwd_agent_query(priv->last_agent_call_device, NULL)) { + priv->last_agent_call_device = NULL; + g_dbus_method_invocation_return_value(invocation, NULL); + return; + } + + priv->last_agent_call_device = NULL; + goto return_error; + } + if (!strcmp(method_name, "RequestUserPassword")) g_variant_get(parameters, "(&os)", &network_path, NULL); else @@ -151,47 +224,23 @@ agent_dbus_method_cb(GDBusConnection * connection, network_path, NM_IWD_NETWORK_INTERFACE); if (!network) { - _LOGE("unable to find the network object"); - return; - } - - device_path = get_property_string_or_null(G_DBUS_PROXY(network), "Device"); - if (!device_path) { - _LOGD("agent-request: device not cached for network %s in IWD Agent request", network_path); + _LOGE("agent-request: unable to find the network object"); goto return_error; } - device_obj = g_dbus_object_manager_get_interface(priv->object_manager, - device_path, - NM_IWD_DEVICE_INTERFACE); - - ifname = get_property_string_or_null(G_DBUS_PROXY(device_obj), "Name"); - if (!ifname) { - _LOGD("agent-request: name not cached for device %s in IWD Agent request", device_path); - goto return_error; - } - - ifindex = if_nametoindex(ifname); - if (!ifindex) { - errsv = errno; - _LOGD("agent-request: if_nametoindex failed for Name %s for Device at %s: %i", - ifname, - device_path, - errsv); - goto return_error; - } - - device = nm_manager_get_device_by_ifindex(priv->manager, ifindex); - if (!NM_IS_DEVICE_IWD(device)) { - _LOGD("agent-request: IWD device named %s is not a Wifi device in IWD Agent request", - ifname); + device = get_device_from_network(self, G_DBUS_PROXY(network)); + if (!device) { + _LOGD("agent-request: device not found in IWD Agent request"); goto return_error; } - if (nm_device_iwd_agent_query(NM_DEVICE_IWD(device), invocation)) + if (nm_device_iwd_agent_query(device, invocation)) { + priv->last_agent_call_device = device; return; + } - _LOGD("agent-request: device %s did not handle the IWD Agent request", ifname); + _LOGD("agent-request: device %s did not handle the IWD Agent request", + nm_device_get_iface(NM_DEVICE(device))); return_error: /* IWD doesn't look at the specific error */ @@ -219,10 +268,12 @@ static const GDBusInterfaceInfo iwd_agent_iface_info = NM_DEFINE_GDBUS_INTERFACE NM_DEFINE_GDBUS_ARG_INFO("password", "s"), ), ), NM_DEFINE_GDBUS_METHOD_INFO( "RequestUserPassword", - .in_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"), + .in_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("network", "o"), NM_DEFINE_GDBUS_ARG_INFO("user", "s"), ), - .out_args = - NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("password", "s"), ), ), ), ); + .out_args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("password", "s"), ), ), + NM_DEFINE_GDBUS_METHOD_INFO("Cancel", + .in_args = NM_DEFINE_GDBUS_ARG_INFOS( + NM_DEFINE_GDBUS_ARG_INFO("reason", "s"), ), ), ), ); static guint iwd_agent_export(GDBusConnection *connection, gpointer user_data, char **agent_path, GError **error) @@ -259,17 +310,8 @@ register_agent(NMIwdManager *self) GDBusInterface * agent_manager; agent_manager = g_dbus_object_manager_get_interface(priv->object_manager, - "/net/connman/iwd", + "/net/connman/iwd", /* IWD 1.0+ */ NM_IWD_AGENT_MANAGER_INTERFACE); - - if (!agent_manager) { - /* IWD prior to 1.0 dated 30 October, 2019 has the agent manager on a - * different path. */ - agent_manager = g_dbus_object_manager_get_interface(priv->object_manager, - "/", - NM_IWD_AGENT_MANAGER_INTERFACE); - } - if (!agent_manager) { _LOGE("unable to register the IWD Agent: PSK/8021x Wi-Fi networks may not work"); return; @@ -328,7 +370,7 @@ known_network_data_free(KnownNetworkData *network) return; g_object_unref(network->known_network); - mirror_8021x_connection_take_and_delete(network->mirror_connection); + mirror_connection_take_and_delete(network->mirror_connection, network); g_slice_free(KnownNetworkData, network); } @@ -369,14 +411,72 @@ set_device_dbus_object(NMIwdManager *self, GDBusProxy *proxy, GDBusObject *objec nm_device_iwd_set_dbus_object(NM_DEVICE_IWD(device), object); } -/* Look up an existing NMSettingsConnection for a WPA2-Enterprise network - * that has been preprovisioned with an IWD config file, or create a new - * in-memory connection object so that NM autoconnect mechanism and the - * clients know this networks needs no additional EAP configuration from - * the user. +static void +known_network_update_cb(GObject *source, GAsyncResult *res, gpointer user_data) +{ + gs_unref_variant GVariant *variant = NULL; + gs_free_error GError *error = NULL; + + variant = g_dbus_proxy_call_finish(G_DBUS_PROXY(source), res, &error); + if (!variant) { + nm_log_warn(LOGD_WIFI, + "Updating %s on IWD known network %s failed: %s", + (const char *) user_data, + g_dbus_proxy_get_object_path(G_DBUS_PROXY(source)), + error->message); + } +} + +static void +sett_conn_changed(NMSettingsConnection *sett_conn, guint update_reason, KnownNetworkData *data) +{ + NMSettingsConnectionIntFlags flags; + NMConnection * conn = nm_settings_connection_get_connection(sett_conn); + NMSettingConnection * s_conn = nm_connection_get_setting_connection(conn); + gboolean nm_autoconnectable = nm_setting_connection_get_autoconnect(s_conn); + gboolean iwd_autoconnectable = get_property_bool(data->known_network, "AutoConnect", TRUE); + + nm_assert(sett_conn == data->mirror_connection); + + if (iwd_autoconnectable == nm_autoconnectable) + return; + + /* If this is a generated connection it may be ourselves updating it */ + flags = nm_settings_connection_get_flags(data->mirror_connection); + if (NM_FLAGS_HAS(flags, NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED)) + return; + + nm_log_dbg(LOGD_WIFI, + "Updating AutoConnect on known network at %s based on connection %s", + g_dbus_proxy_get_object_path(data->known_network), + nm_settings_connection_get_id(data->mirror_connection)); + g_dbus_proxy_call(data->known_network, + DBUS_INTERFACE_PROPERTIES ".Set", + g_variant_new("(ssv)", + NM_IWD_KNOWN_NETWORK_INTERFACE, + "AutoConnect", + g_variant_new_boolean(nm_autoconnectable)), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + known_network_update_cb, + "AutoConnect"); +} + +/* Look up an existing NMSettingsConnection for a network that has been + * preprovisioned with an IWD config file or has been connected to before, + * or create a new in-memory NMSettingsConnection object. This will let + * users control the few supported properties (mainly make it + * IWD-autoconnectable or not), remove/forget the network, or, for a + * WPA2-Enterprise type network it will inform the NM autoconnect mechanism + * and the clients that this networks needs no additional EAP configuration + * from the user. */ static NMSettingsConnection * -mirror_8021x_connection(NMIwdManager *self, const char *name, gboolean create_new) +mirror_connection(NMIwdManager * self, + const KnownNetworkId *id, + gboolean create_new, + GDBusProxy * known_network) { NMIwdManagerPrivate * priv = NM_IWD_MANAGER_GET_PRIVATE(self); NMSettingsConnection *const *iter; @@ -384,43 +484,126 @@ mirror_8021x_connection(NMIwdManager *self, const char *name, gboolean create_ne NMSettingsConnection * settings_connection = NULL; char uuid[37]; NMSetting * setting; - GError * error = NULL; - gs_unref_bytes GBytes *new_ssid = NULL; + gs_free_error GError *error = NULL; + gs_unref_bytes GBytes *new_ssid = NULL; + gsize ssid_len = strlen(id->name); + gboolean autoconnectable = TRUE; + gboolean hidden = FALSE; + gboolean exact_match = TRUE; + const char * key_mgmt = NULL; + + if (known_network) { + autoconnectable = get_property_bool(known_network, "AutoConnect", TRUE); + hidden = get_property_bool(known_network, "Hidden", FALSE); + } for (iter = nm_settings_get_connections(priv->settings, NULL); *iter; iter++) { NMSettingsConnection *sett_conn = *iter; NMConnection * conn = nm_settings_connection_get_connection(sett_conn); NMIwdNetworkSecurity security; - gs_free char * ssid_name = NULL; NMSettingWireless * s_wifi; - NMSetting8021x * s_8021x; - gboolean external = FALSE; - guint i; + const guint8 * ssid_bytes; + gsize ssid_len2; + + if (!nm_wifi_connection_get_iwd_ssid_and_security(conn, NULL, &security)) + continue; - security = nm_wifi_connection_get_iwd_security(conn, NULL); - if (security != NM_IWD_NETWORK_SECURITY_8021X) + if (security != id->security) continue; s_wifi = nm_connection_get_setting_wireless(conn); if (!s_wifi) continue; - ssid_name = _nm_utils_ssid_to_utf8(nm_setting_wireless_get_ssid(s_wifi)); - - if (!nm_streq(ssid_name, name)) + /* The SSID must be UTF-8 if it matches since id->name is known to be + * valid UTF-8, so just memcmp them. + */ + ssid_bytes = g_bytes_get_data(nm_setting_wireless_get_ssid(s_wifi), &ssid_len2); + if (!ssid_bytes || ssid_len2 != ssid_len || memcmp(ssid_bytes, id->name, ssid_len)) continue; - s_8021x = nm_connection_get_setting_802_1x(conn); - for (i = 0; i < nm_setting_802_1x_get_num_eap_methods(s_8021x); i++) { - if (nm_streq(nm_setting_802_1x_get_eap_method(s_8021x, i), "external")) { - external = TRUE; - break; + exact_match = TRUE; + + if (known_network) { + NMSettingConnection *s_conn = nm_connection_get_setting_connection(conn); + + if (nm_setting_connection_get_autoconnect(s_conn) != autoconnectable + || nm_setting_wireless_get_hidden(s_wifi) != hidden) + exact_match = FALSE; + } + + switch (id->security) { + case NM_IWD_NETWORK_SECURITY_WEP: + case NM_IWD_NETWORK_SECURITY_NONE: + case NM_IWD_NETWORK_SECURITY_PSK: + break; + case NM_IWD_NETWORK_SECURITY_8021X: + { + NMSetting8021x *s_8021x = nm_connection_get_setting_802_1x(conn); + gboolean external = FALSE; + guint i; + + for (i = 0; i < nm_setting_802_1x_get_num_eap_methods(s_8021x); i++) { + if (nm_streq(nm_setting_802_1x_get_eap_method(s_8021x, i), "external")) { + external = TRUE; + break; + } } + + /* Prefer returning connections with EAP method "external" */ + if (!external) + exact_match = FALSE; + } } - /* Prefer returning connections for EAP method "external" */ - if (!settings_connection || external) + if (!settings_connection || exact_match) settings_connection = sett_conn; + + if (exact_match) + break; + } + + if (settings_connection && known_network && !exact_match) { + NMSettingsConnectionIntFlags flags = nm_settings_connection_get_flags(settings_connection); + + /* If we found a connection and it's generated (likely by ourselves) + * it may have been created on a request by + * nm_iwd_manager_get_ap_mirror_connection() when no Known Network + * was available so we didn't have access to its properties other + * than Name and Security. Copy their values to the generated + * NMConnection. + * TODO: avoid notify signals triggering our own watch. + * + * If on the other hand this is a user-created NMConnection we + * should try to copy the properties from it to IWD's Known Network + * using the Properties DBus interface in case the user created an + * NM connection before IWD appeared on the bus, or before IWD + * created its Known Network object. + */ + if (NM_FLAGS_HAS(flags, NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED)) { + NMConnection *tmp_conn = nm_settings_connection_get_connection(settings_connection); + NMSettingConnection *s_conn = nm_connection_get_setting_connection(tmp_conn); + NMSettingWireless * s_wifi = nm_connection_get_setting_wireless(tmp_conn); + + g_object_set(G_OBJECT(s_conn), + NM_SETTING_CONNECTION_AUTOCONNECT, + autoconnectable, + NULL); + g_object_set(G_OBJECT(s_wifi), NM_SETTING_WIRELESS_HIDDEN, hidden, NULL); + } else { + KnownNetworkData data = {known_network, settings_connection}; + sett_conn_changed(settings_connection, 0, &data); + } + } + + if (settings_connection && known_network) { + /* Reset NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL now that the + * connection is going to be referenced by a known network, we don't + * want it to be deleted when activation fails anymore. + */ + nm_settings_connection_set_flags_full(settings_connection, + NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL, + 0); } /* If we already have an NMSettingsConnection matching this @@ -437,58 +620,82 @@ mirror_8021x_connection(NMIwdManager *self, const char *name, gboolean create_ne NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_CONNECTION_ID, - name, + id->name, NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_buf(uuid), + NM_SETTING_CONNECTION_AUTOCONNECT, + autoconnectable, NULL)); nm_connection_add_setting(connection, setting); - new_ssid = g_bytes_new(name, strlen(name)); + new_ssid = g_bytes_new(id->name, ssid_len); setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SSID, new_ssid, NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA, + NM_SETTING_WIRELESS_HIDDEN, + hidden, NULL)); nm_connection_add_setting(connection, setting); - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, - NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, - "open", - NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, - "wpa-eap", - NULL)); - nm_connection_add_setting(connection, setting); + switch (id->security) { + case NM_IWD_NETWORK_SECURITY_WEP: + key_mgmt = "none"; + break; + case NM_IWD_NETWORK_SECURITY_NONE: + key_mgmt = NULL; + break; + case NM_IWD_NETWORK_SECURITY_PSK: + key_mgmt = "wpa-psk"; + break; + case NM_IWD_NETWORK_SECURITY_8021X: + key_mgmt = "wpa-eap"; + break; + } - /* "password" and "private-key-password" may be requested by the IWD agent - * from NM and IWD will implement a specific secret cache policy so by - * default respect that policy and don't save copies of those secrets in - * NM settings. The saved values can not be used anyway because of our - * use of NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW. - */ - setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_802_1X, - NM_SETTING_802_1X_PASSWORD_FLAGS, - NM_SETTING_SECRET_FLAG_NOT_SAVED, - NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, - NM_SETTING_SECRET_FLAG_NOT_SAVED, - NULL)); - nm_setting_802_1x_add_eap_method(NM_SETTING_802_1X(setting), "external"); - nm_connection_add_setting(connection, setting); + if (key_mgmt) { + setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_WIRELESS_SECURITY, + NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, + "open", + NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, + key_mgmt, + NULL)); + nm_connection_add_setting(connection, setting); + } + + if (id->security == NM_IWD_NETWORK_SECURITY_8021X) { + /* "password" and "private-key-password" may be requested by the IWD agent + * from NM and IWD will implement a specific secret cache policy so by + * default respect that policy and don't save copies of those secrets in + * NM settings. The saved values can not be used anyway because of our + * use of NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW. + */ + setting = NM_SETTING(g_object_new(NM_TYPE_SETTING_802_1X, + NM_SETTING_802_1X_PASSWORD_FLAGS, + NM_SETTING_SECRET_FLAG_NOT_SAVED, + NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, + NM_SETTING_SECRET_FLAG_NOT_SAVED, + NULL)); + nm_setting_802_1x_add_eap_method(NM_SETTING_802_1X(setting), "external"); + nm_connection_add_setting(connection, setting); + } if (!nm_connection_normalize(connection, NULL, NULL, NULL)) return NULL; - if (!nm_settings_add_connection(priv->settings, - connection, - NM_SETTINGS_CONNECTION_PERSIST_MODE_IN_MEMORY_ONLY, - NM_SETTINGS_CONNECTION_ADD_REASON_NONE, - NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED, - &settings_connection, - &error)) { + if (!nm_settings_add_connection( + priv->settings, + connection, + NM_SETTINGS_CONNECTION_PERSIST_MODE_IN_MEMORY_ONLY, + NM_SETTINGS_CONNECTION_ADD_REASON_NONE, + NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED + | (known_network ? 0 : NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL), + &settings_connection, + &error)) { _LOGW("failed to add a mirror NMConnection for IWD's Known Network '%s': %s", - name, + id->name, error->message); - g_error_free(error); return NULL; } @@ -496,7 +703,7 @@ mirror_8021x_connection(NMIwdManager *self, const char *name, gboolean create_ne } static void -mirror_8021x_connection_take_and_delete(NMSettingsConnection *sett_conn) +mirror_connection_take_and_delete(NMSettingsConnection *sett_conn, KnownNetworkData *data) { NMSettingsConnectionIntFlags flags; @@ -510,6 +717,7 @@ mirror_8021x_connection_take_and_delete(NMSettingsConnection *sett_conn) if (NM_FLAGS_HAS(flags, NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED)) nm_settings_connection_delete(sett_conn, FALSE); + g_signal_handlers_disconnect_by_data(sett_conn, data); g_object_unref(sett_conn); } @@ -539,6 +747,7 @@ interface_added(GDBusObjectManager *object_manager, if (nm_streq(iface_name, NM_IWD_KNOWN_NETWORK_INTERFACE)) { KnownNetworkId * id; + KnownNetworkId * orig_id; KnownNetworkData * data; NMIwdNetworkSecurity security; const char * type_str, *name; @@ -560,28 +769,42 @@ interface_added(GDBusObjectManager *object_manager, id = known_network_id_new(name, security); - data = g_hash_table_lookup(priv->known_networks, id); - if (data) { + if (g_hash_table_lookup_extended(priv->known_networks, + id, + (void **) &orig_id, + (void **) &data)) { _LOGW("DBus error: KnownNetwork already exists ('%s', %s)", name, type_str); - g_free(id); nm_g_object_ref_set(&data->known_network, proxy); + g_free(id); + id = orig_id; } else { data = g_slice_new0(KnownNetworkData); data->known_network = g_object_ref(proxy); g_hash_table_insert(priv->known_networks, id, data); } - if (security == NM_IWD_NETWORK_SECURITY_8021X) { - sett_conn = mirror_8021x_connection(self, name, TRUE); + sett_conn = mirror_connection(self, id, TRUE, proxy); - if (sett_conn && sett_conn != data->mirror_connection) { - NMSettingsConnection *sett_conn_old = data->mirror_connection; + if (sett_conn && sett_conn != data->mirror_connection) { + NMSettingsConnection *sett_conn_old = data->mirror_connection; - data->mirror_connection = nm_g_object_ref(sett_conn); - mirror_8021x_connection_take_and_delete(sett_conn_old); - } - } else - mirror_8021x_connection_take_and_delete(g_steal_pointer(&data->mirror_connection)); + data->mirror_connection = nm_g_object_ref(sett_conn); + mirror_connection_take_and_delete(sett_conn_old, data); + + g_signal_connect(sett_conn, + NM_SETTINGS_CONNECTION_UPDATED_INTERNAL, + G_CALLBACK(sett_conn_changed), + data); + } + + return; + } + + if (nm_streq(iface_name, NM_IWD_NETWORK_INTERFACE)) { + NMDeviceIwd *device = get_device_from_network(self, proxy); + + if (device) + nm_device_iwd_network_add_remove(device, proxy, TRUE); return; } @@ -629,6 +852,15 @@ interface_removed(GDBusObjectManager *object_manager, g_hash_table_remove(priv->known_networks, &id); return; } + + if (nm_streq(iface_name, NM_IWD_NETWORK_INTERFACE)) { + NMDeviceIwd *device = get_device_from_network(self, proxy); + + if (device) + nm_device_iwd_network_add_remove(device, proxy, FALSE); + + return; + } } static void @@ -666,42 +898,47 @@ object_removed(GDBusObjectManager *object_manager, GDBusObject *object, gpointer static void connection_removed(NMSettings *settings, NMSettingsConnection *sett_conn, gpointer user_data) { - NMIwdManager * self = user_data; - NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self); - NMConnection * conn = nm_settings_connection_get_connection(sett_conn); - NMSettingWireless * s_wireless; - gboolean mapped; - KnownNetworkData * data; - KnownNetworkId id; - gs_free char * ssid_str = NULL; - - id.security = nm_wifi_connection_get_iwd_security(conn, &mapped); - if (!mapped) + NMIwdManager * self = user_data; + NMIwdManagerPrivate * priv = NM_IWD_MANAGER_GET_PRIVATE(self); + NMConnection * conn = nm_settings_connection_get_connection(sett_conn); + NMSettingWireless * s_wireless; + KnownNetworkData * data; + KnownNetworkId id; + char ssid_buf[33]; + const guint8 * ssid_bytes; + gsize ssid_len; + NMSettingsConnection *new_mirror_conn; + + if (!nm_wifi_connection_get_iwd_ssid_and_security(conn, NULL, &id.security)) return; s_wireless = nm_connection_get_setting_wireless(conn); - ssid_str = _nm_utils_ssid_to_utf8(nm_setting_wireless_get_ssid(s_wireless)); - id.name = ssid_str; - data = g_hash_table_lookup(priv->known_networks, &id); - if (!data) + if (!s_wireless) return; - if (id.security == NM_IWD_NETWORK_SECURITY_8021X) { - NMSettingsConnection *new_mirror_conn; + ssid_bytes = g_bytes_get_data(nm_setting_wireless_get_ssid(s_wireless), &ssid_len); + if (!ssid_bytes || ssid_len > 32 || memchr(ssid_bytes, 0, ssid_len)) + return; - if (data->mirror_connection != sett_conn) - return; + memcpy(ssid_buf, ssid_bytes, ssid_len); + ssid_buf[ssid_len] = '\0'; + id.name = ssid_buf; + data = g_hash_table_lookup(priv->known_networks, &id); + if (!data) + return; + + if (data->mirror_connection != sett_conn) + return; - g_clear_object(&data->mirror_connection); + g_clear_object(&data->mirror_connection); - /* Don't call Forget for an 8021x network until there's no - * longer *any* matching NMSettingsConnection (debatable) - */ - new_mirror_conn = mirror_8021x_connection(self, id.name, FALSE); - if (new_mirror_conn) { - data->mirror_connection = g_object_ref(new_mirror_conn); - return; - } + /* Don't call Forget on the Known Network until there's no longer *any* + * matching NMSettingsConnection (debatable) + */ + new_mirror_conn = mirror_connection(self, &id, FALSE, NULL); + if (new_mirror_conn) { + data->mirror_connection = g_object_ref(new_mirror_conn); + return; } if (!priv->running) @@ -801,7 +1038,28 @@ device_added(NMManager *manager, NMDevice *device, gpointer user_data) if (!priv->running) return; + /* Here we handle a potential scenario where IWD's DBus objects for the + * new device popped up before the NMDevice. The + * interface_added/object_added signals have been received already and + * the handlers couldn't do much because the NMDevice wasn't there yet + * so now we go over the Network and Device interfaces again. In this + * exact order for "object path" property consistency -- see reasoning + * in object_compare_interfaces. + */ objects = g_dbus_object_manager_get_objects(priv->object_manager); + + for (iter = objects; iter; iter = iter->next) { + GDBusObject * object = G_DBUS_OBJECT(iter->data); + gs_unref_object GDBusInterface *interface = NULL; + + interface = g_dbus_object_get_interface(object, NM_IWD_NETWORK_INTERFACE); + if (!interface) + continue; + + if (NM_DEVICE_IWD(device) == get_device_from_network(self, (GDBusProxy *) interface)) + nm_device_iwd_network_add_remove(NM_DEVICE_IWD(device), (GDBusProxy *) interface, TRUE); + } + for (iter = objects; iter; iter = iter->next) { GDBusObject * object = G_DBUS_OBJECT(iter->data); gs_unref_object GDBusInterface *interface = NULL; @@ -821,6 +1079,73 @@ device_added(NMManager *manager, NMDevice *device, gpointer user_data) } static void +device_removed(NMManager *manager, NMDevice *device, gpointer user_data) +{ + NMIwdManager * self = user_data; + NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE(self); + + if (!NM_IS_DEVICE_IWD(device)) + return; + + if (priv->last_agent_call_device == NM_DEVICE_IWD(device)) + priv->last_agent_call_device = NULL; +} + +/* This is used to sort the list of objects returned by GetManagedObjects() + * based on the DBus interfaces available on these objects in such a way that + * the interface_added calls happen in the right order. The order is defined + * by how some DBus interfaces point to interfaces on other objects using + * DBus properties of the type "object path" ("o" signature). This creates + * "dependencies" between objects. + * + * When NM and IWD are running, the InterfacesAdded signals should come in + * an order that ensures consistency of those object paths. For example + * when a Network interface is added with a KnownNetwork property, or that + * property is assigned a new value, the KnownNetwork object pointed to by + * it will have been added in an earlier InterfacesAdded signal. Similarly + * Station.ConnectedNetwork and Station.GetOrdereNetworks() only point to + * existing Network objects. (There may be circular dependencies but during + * initialization we only need a subset of those properties that doesn't + * have this problem.) + * + * But GetManagedObjects doesn't guarantee this kind of consistency so we + * order the returned object list ourselves to simplify the job of + * interface_added(). Objects that don't have any interfaces listed in + * interface_order are moved to the end of the list. + */ +static int +object_compare_interfaces(gconstpointer a, gconstpointer b) +{ + static const char *interface_order[] = { + NM_IWD_KNOWN_NETWORK_INTERFACE, + NM_IWD_NETWORK_INTERFACE, + NM_IWD_DEVICE_INTERFACE, + }; + int rank_a = G_N_ELEMENTS(interface_order); + int rank_b = G_N_ELEMENTS(interface_order); + guint pos; + + for (pos = 0; interface_order[pos]; pos++) { + GDBusInterface *iface_a; + GDBusInterface *iface_b; + + if (rank_a == G_N_ELEMENTS(interface_order) + && (iface_a = g_dbus_object_get_interface(G_DBUS_OBJECT(a), interface_order[pos]))) { + rank_a = pos; + g_object_unref(iface_a); + } + + if (rank_b == G_N_ELEMENTS(interface_order) + && (iface_b = g_dbus_object_get_interface(G_DBUS_OBJECT(b), interface_order[pos]))) { + rank_b = pos; + g_object_unref(iface_b); + } + } + + return rank_a - rank_b; +} + +static void got_object_manager(GObject *object, GAsyncResult *result, gpointer user_data) { NMIwdManager * self = user_data; @@ -875,6 +1200,7 @@ got_object_manager(GObject *object, GAsyncResult *result, gpointer user_data) g_hash_table_remove_all(priv->known_networks); objects = g_dbus_object_manager_get_objects(object_manager); + objects = g_list_sort(objects, object_compare_interfaces); for (iter = objects; iter; iter = iter->next) object_added(NULL, G_DBUS_OBJECT(iter->data), self); @@ -911,6 +1237,47 @@ nm_iwd_manager_is_known_network(NMIwdManager *self, const char *name, NMIwdNetwo return g_hash_table_contains(priv->known_networks, &kn_id); } +NMSettingsConnection * +nm_iwd_manager_get_ap_mirror_connection(NMIwdManager *self, NMWifiAP *ap) +{ + NMIwdManagerPrivate * priv = NM_IWD_MANAGER_GET_PRIVATE(self); + KnownNetworkData * data; + char name_buf[33]; + KnownNetworkId kn_id = {name_buf, NM_IWD_NETWORK_SECURITY_NONE}; + const guint8 * ssid_bytes; + gsize ssid_len; + NM80211ApFlags flags = nm_wifi_ap_get_flags(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); + memcpy(name_buf, ssid_bytes, ssid_len); + name_buf[ssid_len] = '\0'; + + if (flags & NM_802_11_AP_FLAGS_PRIVACY) + kn_id.security = NM_IWD_NETWORK_SECURITY_WEP; + + if (sec_flags & NM_802_11_AP_SEC_KEY_MGMT_PSK) + kn_id.security = NM_IWD_NETWORK_SECURITY_PSK; + else if (sec_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X) + kn_id.security = NM_IWD_NETWORK_SECURITY_8021X; + + /* Right now it's easier for us to do a name+security lookup than to use + * the Network.KnownNetwork property to look up by path. + */ + data = g_hash_table_lookup(priv->known_networks, &kn_id); + if (data) + return data->mirror_connection; + + /* We have no KnownNetwork for this AP, we're probably connecting to it for + * the first time. This is not a usual/supported scenario so we don't need + * to bother too much about creating a great mirror connection, we don't + * even have any more information than the Name & Type properties on the + * Network interface. This *should* never happen for an 8021x type network. + */ + return mirror_connection(self, &kn_id, TRUE, NULL); +} + GDBusProxy * nm_iwd_manager_get_dbus_interface(NMIwdManager *self, const char *path, const char *name) { @@ -936,6 +1303,7 @@ nm_iwd_manager_init(NMIwdManager *self) priv->manager = g_object_ref(NM_MANAGER_GET); g_signal_connect(priv->manager, NM_MANAGER_DEVICE_ADDED, G_CALLBACK(device_added), self); + g_signal_connect(priv->manager, NM_MANAGER_DEVICE_REMOVED, G_CALLBACK(device_removed), self); priv->settings = g_object_ref(NM_SETTINGS_GET); g_signal_connect(priv->settings, @@ -978,6 +1346,8 @@ dispose(GObject *object) g_clear_object(&priv->manager); } + priv->last_agent_call_device = NULL; + G_OBJECT_CLASS(nm_iwd_manager_parent_class)->dispose(object); } diff --git a/src/devices/wifi/nm-iwd-manager.h b/src/devices/wifi/nm-iwd-manager.h index 00f0c30411..5a0f66680c 100644 --- a/src/devices/wifi/nm-iwd-manager.h +++ b/src/devices/wifi/nm-iwd-manager.h @@ -8,6 +8,7 @@ #include "devices/nm-device.h" #include "nm-wifi-utils.h" +#include "nm-wifi-ap.h" #define NM_IWD_BUS_TYPE G_BUS_TYPE_SYSTEM #define NM_IWD_SERVICE "net.connman.iwd" @@ -44,6 +45,8 @@ gboolean nm_iwd_manager_is_known_network(NMIwdManager * self, const char * name, NMIwdNetworkSecurity security); +NMSettingsConnection *nm_iwd_manager_get_ap_mirror_connection(NMIwdManager *self, NMWifiAP *ap); + GDBusProxy * nm_iwd_manager_get_dbus_interface(NMIwdManager *self, const char *path, const char *name); diff --git a/src/devices/wifi/nm-wifi-ap.c b/src/devices/wifi/nm-wifi-ap.c index 55438a53e4..4fa44f0126 100644 --- a/src/devices/wifi/nm-wifi-ap.c +++ b/src/devices/wifi/nm-wifi-ap.c @@ -83,29 +83,6 @@ nm_wifi_ap_get_ssid(const NMWifiAP *ap) } gboolean -nm_wifi_ap_set_ssid_arr(NMWifiAP *ap, const guint8 *ssid, gsize ssid_len) -{ - NMWifiAPPrivate *priv; - - g_return_val_if_fail(NM_IS_WIFI_AP(ap), FALSE); - - if (ssid_len > 32) - g_return_val_if_reached(FALSE); - - priv = NM_WIFI_AP_GET_PRIVATE(ap); - - if (nm_utils_gbytes_equal_mem(priv->ssid, ssid, ssid_len)) - return FALSE; - - nm_clear_pointer(&priv->ssid, g_bytes_unref); - if (ssid_len > 0) - priv->ssid = g_bytes_new(ssid, ssid_len); - - _notify(ap, PROP_SSID); - return TRUE; -} - -gboolean nm_wifi_ap_set_ssid(NMWifiAP *ap, GBytes *ssid) { NMWifiAPPrivate *priv; @@ -185,11 +162,13 @@ nm_wifi_ap_get_address(const NMWifiAP *ap) return NM_WIFI_AP_GET_PRIVATE(ap)->address; } -static gboolean -nm_wifi_ap_set_address_bin(NMWifiAP *ap, const guint8 addr[static 6 /* ETH_ALEN */]) +gboolean +nm_wifi_ap_set_address_bin(NMWifiAP *ap, const NMEtherAddr *addr) { NMWifiAPPrivate *priv = NM_WIFI_AP_GET_PRIVATE(ap); + nm_assert(addr); + if (!priv->address || !nm_utils_hwaddr_matches(addr, ETH_ALEN, priv->address, -1)) { g_free(priv->address); priv->address = nm_utils_hwaddr_ntoa(addr, ETH_ALEN); @@ -202,13 +181,13 @@ nm_wifi_ap_set_address_bin(NMWifiAP *ap, const guint8 addr[static 6 /* ETH_ALEN gboolean nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr) { - guint8 addr_buf[ETH_ALEN]; + NMEtherAddr addr_buf; g_return_val_if_fail(NM_IS_WIFI_AP(ap), FALSE); - if (!addr || !nm_utils_hwaddr_aton(addr, addr_buf, sizeof(addr_buf))) + if (!addr || !nm_utils_hwaddr_aton(addr, &addr_buf, sizeof(addr_buf))) g_return_val_if_reached(FALSE); - return nm_wifi_ap_set_address_bin(ap, addr_buf); + return nm_wifi_ap_set_address_bin(ap, &addr_buf); } NM80211Mode @@ -365,6 +344,18 @@ nm_wifi_ap_get_metered(const NMWifiAP *self) return NM_WIFI_AP_GET_PRIVATE(self)->metered; } +NM80211ApSecurityFlags +nm_wifi_ap_get_wpa_flags(const NMWifiAP *self) +{ + return NM_WIFI_AP_GET_PRIVATE(self)->wpa_flags; +} + +NM80211ApSecurityFlags +nm_wifi_ap_get_rsn_flags(const NMWifiAP *self) +{ + return NM_WIFI_AP_GET_PRIVATE(self)->rsn_flags; +} + /*****************************************************************************/ gboolean @@ -395,7 +386,7 @@ nm_wifi_ap_update_from_properties(NMWifiAP *ap, const NMSupplicantBssInfo *bss_i changed |= nm_wifi_ap_set_ssid(ap, bss_info->ssid); if (bss_info->bssid_valid) - changed |= nm_wifi_ap_set_address_bin(ap, bss_info->bssid); + changed |= nm_wifi_ap_set_address_bin(ap, &bss_info->bssid); else { /* we don't actually clear the value. */ } @@ -751,7 +742,7 @@ nm_wifi_ap_new_fake_from_connection(NMConnection *connection) s_wireless = nm_connection_get_setting_wireless(connection); g_return_val_if_fail(s_wireless != NULL, NULL); - ap = (NMWifiAP *) g_object_new(NM_TYPE_WIFI_AP, NULL); + ap = g_object_new(NM_TYPE_WIFI_AP, NULL); priv = NM_WIFI_AP_GET_PRIVATE(ap); priv->fake = TRUE; diff --git a/src/devices/wifi/nm-wifi-ap.h b/src/devices/wifi/nm-wifi-ap.h index 4608c6ff60..da360325f6 100644 --- a/src/devices/wifi/nm-wifi-ap.h +++ b/src/devices/wifi/nm-wifi-ap.h @@ -64,23 +64,25 @@ nm_wifi_ap_get_supplicant_path(NMWifiAP *ap) return ap->_supplicant_path; } -GBytes * nm_wifi_ap_get_ssid(const NMWifiAP *ap); -gboolean nm_wifi_ap_set_ssid_arr(NMWifiAP *ap, const guint8 *ssid, gsize ssid_len); -gboolean nm_wifi_ap_set_ssid(NMWifiAP *ap, GBytes *ssid); -const char * nm_wifi_ap_get_address(const NMWifiAP *ap); -gboolean nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr); -NM80211Mode nm_wifi_ap_get_mode(NMWifiAP *ap); -gboolean nm_wifi_ap_is_hotspot(NMWifiAP *ap); -gint8 nm_wifi_ap_get_strength(NMWifiAP *ap); -gboolean nm_wifi_ap_set_strength(NMWifiAP *ap, gint8 strength); -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); -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); -gboolean nm_wifi_ap_get_metered(const NMWifiAP *self); +GBytes * nm_wifi_ap_get_ssid(const NMWifiAP *ap); +gboolean nm_wifi_ap_set_ssid(NMWifiAP *ap, GBytes *ssid); +const char * nm_wifi_ap_get_address(const NMWifiAP *ap); +gboolean nm_wifi_ap_set_address(NMWifiAP *ap, const char *addr); +gboolean nm_wifi_ap_set_address_bin(NMWifiAP *ap, const NMEtherAddr *addr); +NM80211Mode nm_wifi_ap_get_mode(NMWifiAP *ap); +gboolean nm_wifi_ap_is_hotspot(NMWifiAP *ap); +gint8 nm_wifi_ap_get_strength(NMWifiAP *ap); +gboolean nm_wifi_ap_set_strength(NMWifiAP *ap, gint8 strength); +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); +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); +gboolean nm_wifi_ap_get_metered(const NMWifiAP *self); +NM80211ApSecurityFlags nm_wifi_ap_get_wpa_flags(const NMWifiAP *self); +NM80211ApSecurityFlags nm_wifi_ap_get_rsn_flags(const NMWifiAP *self); const char * nm_wifi_ap_to_string(const NMWifiAP *self, char *str_buf, gulong buf_len, gint64 now_msec); diff --git a/src/devices/wifi/nm-wifi-factory.c b/src/devices/wifi/nm-wifi-factory.c index 1d1407592a..bbf56abfa9 100644 --- a/src/devices/wifi/nm-wifi-factory.c +++ b/src/devices/wifi/nm-wifi-factory.c @@ -52,7 +52,7 @@ NM_DEVICE_FACTORY_DECLARE_TYPES( G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { - return (NMDeviceFactory *) g_object_new(NM_TYPE_WIFI_FACTORY, NULL); + return g_object_new(NM_TYPE_WIFI_FACTORY, NULL); } /*****************************************************************************/ diff --git a/src/devices/wifi/nm-wifi-p2p-peer.c b/src/devices/wifi/nm-wifi-p2p-peer.c index a194f168c0..cfcf96ab90 100644 --- a/src/devices/wifi/nm-wifi-p2p-peer.c +++ b/src/devices/wifi/nm-wifi-p2p-peer.c @@ -407,7 +407,7 @@ nm_wifi_p2p_peer_update_from_properties(NMWifiP2PPeer *peer, const NMSupplicantP /* We currently only use the groups information internally to check if * the peer is still joined. */ - if (!_nm_utils_strv_equal((char **) priv->groups, (char **) peer_info->groups)) { + if (!nm_utils_strv_equal(priv->groups, peer_info->groups)) { g_free(priv->groups); priv->groups = nm_utils_strv_dup_packed(peer_info->groups, -1); changed |= TRUE; diff --git a/src/devices/wifi/nm-wifi-utils.c b/src/devices/wifi/nm-wifi-utils.c index e371d19755..3fa33256ad 100644 --- a/src/devices/wifi/nm-wifi-utils.c +++ b/src/devices/wifi/nm-wifi-utils.c @@ -886,34 +886,49 @@ nm_wifi_utils_is_manf_default_ssid(GBytes *ssid) return FALSE; } -NMIwdNetworkSecurity -nm_wifi_connection_get_iwd_security(NMConnection *connection, gboolean *mapped) +/* To be used for connections where the SSID has been validated before */ +gboolean +nm_wifi_connection_get_iwd_ssid_and_security(NMConnection * connection, + char ** ssid, + NMIwdNetworkSecurity *security) { + NMSettingWireless * s_wireless; NMSettingWirelessSecurity *s_wireless_sec; const char * key_mgmt = NULL; - if (!nm_connection_get_setting_wireless(connection)) - goto error; + s_wireless = nm_connection_get_setting_wireless(connection); + if (!s_wireless) + return FALSE; + + if (ssid) { + GBytes * bytes = nm_setting_wireless_get_ssid(s_wireless); + gsize ssid_len; + const char *ssid_str = (const char *) g_bytes_get_data(bytes, &ssid_len); - NM_SET_OUT(mapped, TRUE); + nm_assert(bytes && g_utf8_validate(ssid_str, ssid_len, NULL)); + NM_SET_OUT(ssid, g_strndup(ssid_str, ssid_len)); + } + + if (!security) + return TRUE; s_wireless_sec = nm_connection_get_setting_wireless_security(connection); - if (!s_wireless_sec) - return NM_IWD_NETWORK_SECURITY_NONE; + if (!s_wireless_sec) { + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_NONE); + return TRUE; + } key_mgmt = nm_setting_wireless_security_get_key_mgmt(s_wireless_sec); nm_assert(key_mgmt); if (NM_IN_STRSET(key_mgmt, "none", "ieee8021x")) - return NM_IWD_NETWORK_SECURITY_WEP; - - if (nm_streq(key_mgmt, "wpa-psk")) - return NM_IWD_NETWORK_SECURITY_PSK; - - if (nm_streq(key_mgmt, "wpa-eap")) - return NM_IWD_NETWORK_SECURITY_8021X; + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_WEP); + else if (nm_streq(key_mgmt, "wpa-psk")) + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_PSK); + else if (nm_streq(key_mgmt, "wpa-eap")) + NM_SET_OUT(security, NM_IWD_NETWORK_SECURITY_8021X); + else + return FALSE; -error: - NM_SET_OUT(mapped, FALSE); - return NM_IWD_NETWORK_SECURITY_NONE; + return TRUE; } diff --git a/src/devices/wifi/nm-wifi-utils.h b/src/devices/wifi/nm-wifi-utils.h index 678b353b1e..e6cec37d4a 100644 --- a/src/devices/wifi/nm-wifi-utils.h +++ b/src/devices/wifi/nm-wifi-utils.h @@ -32,7 +32,8 @@ gboolean nm_wifi_utils_complete_connection(GBytes * ssid, gboolean nm_wifi_utils_is_manf_default_ssid(GBytes *ssid); -NMIwdNetworkSecurity nm_wifi_connection_get_iwd_security(NMConnection *connection, - gboolean * mapped); +gboolean nm_wifi_connection_get_iwd_ssid_and_security(NMConnection * connection, + char ** ssid, + NMIwdNetworkSecurity *security); #endif /* __NM_WIFI_UTILS_H__ */ diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c index f77de85aac..5b8b3bd29d 100644 --- a/src/devices/wwan/nm-device-modem.c +++ b/src/devices/wwan/nm-device-modem.c @@ -16,8 +16,8 @@ #include "NetworkManagerUtils.h" #include "nm-core-internal.h" +#define _NMLOG_DEVICE_TYPE NMDeviceModem #include "devices/nm-device-logging.h" -_LOG_DECLARE_SELF(NMDeviceModem); /*****************************************************************************/ diff --git a/src/devices/wwan/nm-modem-ofono.c b/src/devices/wwan/nm-modem-ofono.c index d8d0893bf8..ec53186639 100644 --- a/src/devices/wwan/nm-modem-ofono.c +++ b/src/devices/wwan/nm-modem-ofono.c @@ -1160,20 +1160,20 @@ nm_modem_ofono_new(const char *path) */ basename = g_path_get_basename(path); - return (NMModem *) g_object_new(NM_TYPE_MODEM_OFONO, - NM_MODEM_PATH, - path, - NM_MODEM_UID, - basename, - NM_MODEM_DEVICE_ID, - basename, - NM_MODEM_CONTROL_PORT, - "ofono", /* mandatory */ - NM_MODEM_DRIVER, - "ofono", - NM_MODEM_STATE, - (int) NM_MODEM_STATE_INITIALIZING, - NULL); + return g_object_new(NM_TYPE_MODEM_OFONO, + NM_MODEM_PATH, + path, + NM_MODEM_UID, + basename, + NM_MODEM_DEVICE_ID, + basename, + NM_MODEM_CONTROL_PORT, + "ofono", /* mandatory */ + NM_MODEM_DRIVER, + "ofono", + NM_MODEM_STATE, + (int) NM_MODEM_STATE_INITIALIZING, + NULL); } static void diff --git a/src/devices/wwan/nm-wwan-factory.c b/src/devices/wwan/nm-wwan-factory.c index 1c3406daed..c9c4758419 100644 --- a/src/devices/wwan/nm-wwan-factory.c +++ b/src/devices/wwan/nm-wwan-factory.c @@ -54,7 +54,7 @@ NM_DEVICE_FACTORY_DECLARE_TYPES(NM_DEVICE_FACTORY_DECLARE_LINK_TYPES( G_MODULE_EXPORT NMDeviceFactory * nm_device_factory_create(GError **error) { - return (NMDeviceFactory *) g_object_new(NM_TYPE_WWAN_FACTORY, NULL); + return g_object_new(NM_TYPE_WWAN_FACTORY, NULL); } /*****************************************************************************/ diff --git a/src/dns/nm-dns-dnsmasq.c b/src/dns/nm-dns-dnsmasq.c index 97f1dfabf8..a560723807 100644 --- a/src/dns/nm-dns-dnsmasq.c +++ b/src/dns/nm-dns-dnsmasq.c @@ -804,7 +804,7 @@ add_global_config(NMDnsDnsmasq * self, } static void -add_ip_config(NMDnsDnsmasq *self, GVariantBuilder *servers, const NMDnsIPConfigData *ip_data) +add_ip_config(NMDnsDnsmasq *self, GVariantBuilder *servers, const NMDnsConfigIPData *ip_data) { NMIPConfig * ip_config = ip_data->ip_config; gconstpointer addr; @@ -850,7 +850,7 @@ create_update_args(NMDnsDnsmasq * self, const char * hostname) { GVariantBuilder servers; - const NMDnsIPConfigData *ip_data; + const NMDnsConfigIPData *ip_data; g_variant_builder_init(&servers, G_VARIANT_TYPE("aas")); diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 3fc9a3963c..ac7021db4b 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -80,14 +80,18 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMDnsManager, PROP_MODE, PROP_RC_MANAGER, PROP_CONF static guint signals[LAST_SIGNAL] = {0}; typedef struct { - GHashTable *configs; - CList ip_config_lst_head; - GVariant * config_variant; + GHashTable *configs_dict; + CList configs_lst_head; - NMDnsIPConfigData *best_ip_config_4; - NMDnsIPConfigData *best_ip_config_6; + CList ip_configs_lst_head; + GVariant *config_variant; - bool ip_config_lst_need_sort : 1; + NMDnsConfigIPData *best_ip_config_4; + NMDnsConfigIPData *best_ip_config_6; + + bool ip_configs_lst_need_sort : 1; + + bool configs_lst_need_sort : 1; bool dns_touched : 1; bool is_stopped : 1; @@ -158,7 +162,7 @@ NM_DEFINE_SINGLETON_GETTER(NMDnsManager, nm_dns_manager_get, NM_TYPE_DNS_MANAGER /*****************************************************************************/ static void -_ip_config_dns_priority_changed(gpointer config, GParamSpec *pspec, NMDnsIPConfigData *ip_data); +_ip_config_dns_priority_changed(gpointer config, GParamSpec *pspec, NMDnsConfigIPData *ip_data); /*****************************************************************************/ @@ -207,7 +211,7 @@ static NM_UTILS_LOOKUP_STR_DEFINE( /*****************************************************************************/ static void -_ASSERT_config_data(const NMDnsConfigData *data) +_ASSERT_dns_config_data(const NMDnsConfigData *data) { nm_assert(data); nm_assert(NM_IS_DNS_MANAGER(data->self)); @@ -215,10 +219,10 @@ _ASSERT_config_data(const NMDnsConfigData *data) } static void -_ASSERT_ip_config_data(const NMDnsIPConfigData *ip_data) +_ASSERT_dns_config_ip_data(const NMDnsConfigIPData *ip_data) { nm_assert(ip_data); - _ASSERT_config_data(ip_data->data); + _ASSERT_dns_config_data(ip_data->data); nm_assert(NM_IS_IP_CONFIG(ip_data->ip_config)); nm_assert(c_list_contains(&ip_data->data->data_lst_head, &ip_data->data_lst)); nm_assert(ip_data->data->ifindex == nm_ip_config_get_ifindex(ip_data->ip_config)); @@ -244,23 +248,25 @@ _ASSERT_ip_config_data(const NMDnsIPConfigData *ip_data) #endif } -static NMDnsIPConfigData * -_ip_config_data_new(NMDnsConfigData *data, NMIPConfig *ip_config, NMDnsIPConfigType ip_config_type) +static NMDnsConfigIPData * +_dns_config_ip_data_new(NMDnsConfigData * data, + NMIPConfig * ip_config, + NMDnsIPConfigType ip_config_type) { - NMDnsIPConfigData *ip_data; + NMDnsConfigIPData *ip_data; - _ASSERT_config_data(data); + _ASSERT_dns_config_data(data); nm_assert(NM_IS_IP_CONFIG(ip_config)); nm_assert(ip_config_type != NM_DNS_IP_CONFIG_TYPE_REMOVED); - ip_data = g_slice_new(NMDnsIPConfigData); - *ip_data = (NMDnsIPConfigData){ + ip_data = g_slice_new(NMDnsConfigIPData); + *ip_data = (NMDnsConfigIPData){ .data = data, .ip_config = g_object_ref(ip_config), .ip_config_type = ip_config_type, }; c_list_link_tail(&data->data_lst_head, &ip_data->data_lst); - c_list_link_tail(&NM_DNS_MANAGER_GET_PRIVATE(data->self)->ip_config_lst_head, + c_list_link_tail(&NM_DNS_MANAGER_GET_PRIVATE(data->self)->ip_configs_lst_head, &ip_data->ip_config_lst); g_signal_connect(ip_config, @@ -269,14 +275,14 @@ _ip_config_data_new(NMDnsConfigData *data, NMIPConfig *ip_config, NMDnsIPConfigT (GCallback) _ip_config_dns_priority_changed, ip_data); - _ASSERT_ip_config_data(ip_data); + _ASSERT_dns_config_ip_data(ip_data); return ip_data; } static void -_ip_config_data_free(NMDnsIPConfigData *ip_data) +_dns_config_ip_data_free(NMDnsConfigIPData *ip_data) { - _ASSERT_ip_config_data(ip_data); + _ASSERT_dns_config_ip_data(ip_data); c_list_unlink_stale(&ip_data->data_lst); c_list_unlink_stale(&ip_data->ip_config_lst); @@ -292,15 +298,15 @@ _ip_config_data_free(NMDnsIPConfigData *ip_data) nm_g_slice_free(ip_data); } -static NMDnsIPConfigData * -_config_data_find_ip_config(NMDnsConfigData *data, NMIPConfig *ip_config) +static NMDnsConfigIPData * +_dns_config_data_find_ip_config(NMDnsConfigData *data, NMIPConfig *ip_config) { - NMDnsIPConfigData *ip_data; + NMDnsConfigIPData *ip_data; - _ASSERT_config_data(data); + _ASSERT_dns_config_data(data); c_list_for_each_entry (ip_data, &data->data_lst_head, data_lst) { - _ASSERT_ip_config_data(ip_data); + _ASSERT_dns_config_ip_data(ip_data); if (ip_data->ip_config == ip_config) return ip_data; @@ -309,19 +315,20 @@ _config_data_find_ip_config(NMDnsConfigData *data, NMIPConfig *ip_config) } static void -_config_data_free(NMDnsConfigData *data) +_dns_config_data_free(NMDnsConfigData *data) { - _ASSERT_config_data(data); + _ASSERT_dns_config_data(data); nm_assert(c_list_is_empty(&data->data_lst_head)); + c_list_unlink_stale(&data->configs_lst); nm_g_slice_free(data); } static int -_ip_config_lst_cmp(const CList *a_lst, const CList *b_lst, const void *user_data) +_mgr_get_ip_configs_lst_cmp(const CList *a_lst, const CList *b_lst, const void *user_data) { - const NMDnsIPConfigData *a = c_list_entry(a_lst, NMDnsIPConfigData, ip_config_lst); - const NMDnsIPConfigData *b = c_list_entry(b_lst, NMDnsIPConfigData, ip_config_lst); + const NMDnsConfigIPData *a = c_list_entry(a_lst, NMDnsConfigIPData, ip_config_lst); + const NMDnsConfigIPData *b = c_list_entry(b_lst, NMDnsConfigIPData, ip_config_lst); /* Configurations with lower priority value first */ NM_CMP_DIRECT(nm_ip_config_get_dns_priority(a->ip_config), @@ -334,16 +341,39 @@ _ip_config_lst_cmp(const CList *a_lst, const CList *b_lst, const void *user_data } static CList * -_ip_config_lst_head(NMDnsManager *self) +_mgr_get_ip_configs_lst_head(NMDnsManager *self) { NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self); - if (priv->ip_config_lst_need_sort) { - priv->ip_config_lst_need_sort = FALSE; - c_list_sort(&priv->ip_config_lst_head, _ip_config_lst_cmp, NULL); + if (G_UNLIKELY(priv->ip_configs_lst_need_sort)) { + priv->ip_configs_lst_need_sort = FALSE; + c_list_sort(&priv->ip_configs_lst_head, _mgr_get_ip_configs_lst_cmp, NULL); } - return &priv->ip_config_lst_head; + return &priv->ip_configs_lst_head; +} + +static int +_mgr_get_configs_lst_cmp(const CList *a_lst, const CList *b_lst, const void *user_data) +{ + const NMDnsConfigData *a = c_list_entry(a_lst, NMDnsConfigData, configs_lst); + const NMDnsConfigData *b = c_list_entry(b_lst, NMDnsConfigData, configs_lst); + + NM_CMP_FIELD(b, a, ifindex); + return nm_assert_unreachable_val(0); +} + +_nm_unused static CList * +_mgr_get_configs_lst_head(NMDnsManager *self) +{ + NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self); + + if (G_UNLIKELY(priv->configs_lst_need_sort)) { + priv->configs_lst_need_sort = FALSE; + c_list_sort(&priv->configs_lst_head, _mgr_get_configs_lst_cmp, NULL); + } + + return &priv->configs_lst_head; } /*****************************************************************************/ @@ -1077,7 +1107,7 @@ static void compute_hash(NMDnsManager *self, const NMGlobalDnsConfig *global, guint8 buffer[HASH_LEN]) { nm_auto_free_checksum GChecksum *sum = NULL; - NMDnsIPConfigData * ip_data; + NMDnsConfigIPData * ip_data; sum = g_checksum_new(G_CHECKSUM_SHA1); nm_assert(HASH_LEN == g_checksum_type_get_length(G_CHECKSUM_SHA1)); @@ -1089,7 +1119,7 @@ compute_hash(NMDnsManager *self, const NMGlobalDnsConfig *global, guint8 buffer[ /* FIXME(ip-config-checksum): this relies on the fact that an IP * configuration without DNS parameters gives a zero checksum. */ - head = _ip_config_lst_head(self); + head = _mgr_get_ip_configs_lst_head(self); c_list_for_each_entry (ip_data, head, ip_config_lst) nm_ip_config_hash(ip_data->ip_config, sum, TRUE); } @@ -1196,15 +1226,15 @@ _collect_resolv_conf_data(NMDnsManager * self, else { nm_auto_free_gstring GString *tmp_gstring = NULL; int prio, first_prio = 0; - const NMDnsIPConfigData * ip_data; + const NMDnsConfigIPData * ip_data; const CList * head; gboolean is_first = TRUE; - head = _ip_config_lst_head(self); + head = _mgr_get_ip_configs_lst_head(self); c_list_for_each_entry (ip_data, head, ip_config_lst) { gboolean skip = FALSE; - _ASSERT_ip_config_data(ip_data); + _ASSERT_dns_config_ip_data(ip_data); prio = nm_ip_config_get_dns_priority(ip_data->ip_config); @@ -1259,41 +1289,35 @@ _collect_resolv_conf_data(NMDnsManager * self, *out_nis_domain = rc.nis_domain; } +/*****************************************************************************/ + static char ** get_ip_rdns_domains(NMIPConfig *ip_config) { - int addr_family = nm_ip_config_get_addr_family(ip_config); - char ** strv; - GPtrArray * domains = NULL; - NMDedupMultiIter ipconf_iter; + int addr_family = nm_ip_config_get_addr_family(ip_config); + char ** strv; + GPtrArray * domains; + NMDedupMultiIter ipconf_iter; + const NMPlatformIPAddress *address; + const NMPlatformIPRoute * route; nm_assert_addr_family(addr_family); domains = g_ptr_array_sized_new(5); - if (addr_family == AF_INET) { - NMIP4Config * ip4 = (gpointer) ip_config; - const NMPlatformIP4Address *address; - const NMPlatformIP4Route * route; - - nm_ip_config_iter_ip4_address_for_each (&ipconf_iter, ip4, &address) - nm_utils_get_reverse_dns_domains_ip4(address->address, address->plen, domains); - - nm_ip_config_iter_ip4_route_for_each (&ipconf_iter, ip4, &route) { - if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route)) - nm_utils_get_reverse_dns_domains_ip4(route->network, route->plen, domains); - } - } else { - NMIP6Config * ip6 = (gpointer) ip_config; - const NMPlatformIP6Address *address; - const NMPlatformIP6Route * route; - - nm_ip_config_iter_ip6_address_for_each (&ipconf_iter, ip6, &address) - nm_utils_get_reverse_dns_domains_ip6(&address->address, address->plen, domains); + nm_ip_config_iter_ip_address_for_each (&ipconf_iter, ip_config, &address) { + nm_utils_get_reverse_dns_domains_ip(addr_family, + address->address_ptr, + address->plen, + domains); + } - nm_ip_config_iter_ip6_route_for_each (&ipconf_iter, ip6, &route) { - if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route)) - nm_utils_get_reverse_dns_domains_ip6(&route->network, route->plen, domains); + nm_ip_config_iter_ip_route_for_each (&ipconf_iter, ip_config, &route) { + if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route)) { + nm_utils_get_reverse_dns_domains_ip(addr_family, + route->network_ptr, + route->plen, + domains); } } @@ -1307,7 +1331,7 @@ get_ip_rdns_domains(NMIPConfig *ip_config) } static gboolean -domain_ht_get_priority(GHashTable *ht, const char *domain, int *out_priority) +_domain_track_get_priority(GHashTable *ht, const char *domain, int *out_priority) { gpointer ptr; @@ -1321,11 +1345,11 @@ domain_ht_get_priority(GHashTable *ht, const char *domain, int *out_priority) /* Check if the domain is shadowed by a parent domain with more negative priority */ static gboolean -domain_is_shadowed(GHashTable * ht, - const char * domain, - int priority, - const char **out_parent, - int * out_parent_priority) +_domain_track_is_shadowed(GHashTable * ht, + const char * domain, + int priority, + const char **out_parent, + int * out_parent_priority) { char *parent; int parent_priority; @@ -1335,7 +1359,7 @@ domain_is_shadowed(GHashTable * ht, nm_assert(!g_hash_table_contains(ht, domain)); - if (domain_ht_get_priority(ht, "", &parent_priority)) { + if (_domain_track_get_priority(ht, "", &parent_priority)) { nm_assert(parent_priority <= priority); if (parent_priority < 0 && parent_priority < priority) { *out_parent = ""; @@ -1347,7 +1371,7 @@ domain_is_shadowed(GHashTable * ht, parent = strchr(domain, '.'); while (parent && parent[1]) { parent++; - if (domain_ht_get_priority(ht, parent, &parent_priority)) { + if (_domain_track_get_priority(ht, parent, &parent_priority)) { nm_assert(parent_priority <= priority); if (parent_priority < 0 && parent_priority < priority) { *out_parent = parent; @@ -1362,18 +1386,18 @@ domain_is_shadowed(GHashTable * ht, } static void -rebuild_domain_lists(NMDnsManager *self) +_mgr_configs_data_construct(NMDnsManager *self) { - NMDnsIPConfigData *ip_data; + NMDnsConfigIPData *ip_data; gs_unref_hashtable GHashTable *ht = NULL; gs_unref_hashtable GHashTable *wildcard_entries = NULL; CList * head; int prev_priority = G_MININT; - head = _ip_config_lst_head(self); + head = _mgr_get_ip_configs_lst_head(self); #if NM_MORE_ASSERTS - /* we call clear_domain_lists() at the end of update. We + /* we call _mgr_configs_data_clear() at the end of update. We * don't expect any domain settings here. */ c_list_for_each_entry (ip_data, head, ip_config_lst) { nm_assert(!ip_data->domains.search); @@ -1496,7 +1520,7 @@ rebuild_domain_lists(NMDnsManager *self) break; /* Remove domains with lower priority */ - if (domain_ht_get_priority(ht, domain_clean, &old_priority)) { + if (_domain_track_get_priority(ht, domain_clean, &old_priority)) { nm_assert(old_priority <= priority); if (old_priority < priority) { _LOGT("plugin: drop domain %s%s%s (i=%d, p=%d) because it already exists " @@ -1511,7 +1535,11 @@ rebuild_domain_lists(NMDnsManager *self) old_priority); continue; } - } else if (domain_is_shadowed(ht, domain_clean, priority, &parent, &parent_priority)) { + } else if (_domain_track_is_shadowed(ht, + domain_clean, + priority, + &parent, + &parent_priority)) { _LOGT("plugin: drop domain %s%s%s (i=%d, p=%d) shadowed by '%s' (p=%d)", NM_PRINT_FMT_QUOTED(!check_default_route, "'", @@ -1578,12 +1606,12 @@ rebuild_domain_lists(NMDnsManager *self) } static void -clear_domain_lists(NMDnsManager *self) +_mgr_configs_data_clear(NMDnsManager *self) { - NMDnsIPConfigData *ip_data; + NMDnsConfigIPData *ip_data; CList * head; - head = _ip_config_lst_head(self); + head = _mgr_get_ip_configs_lst_head(self); c_list_for_each_entry (ip_data, head, ip_config_lst) { nm_clear_g_free(&ip_data->domains.search); nm_clear_pointer(&ip_data->domains.reverse, g_strfreev); @@ -1593,6 +1621,8 @@ clear_domain_lists(NMDnsManager *self) } } +/*****************************************************************************/ + static gboolean update_dns(NMDnsManager *self, gboolean no_caching, GError **error) { @@ -1645,12 +1675,12 @@ update_dns(NMDnsManager *self, gboolean no_caching, GError **error) &nis_domain); if (priv->plugin || priv->sd_resolve_plugin) - rebuild_domain_lists(self); + _mgr_configs_data_construct(self); if (priv->sd_resolve_plugin) { nm_dns_plugin_update(priv->sd_resolve_plugin, global_config, - _ip_config_lst_head(self), + _mgr_get_ip_configs_lst_head(self), priv->hostname, NULL); } @@ -1672,7 +1702,7 @@ update_dns(NMDnsManager *self, gboolean no_caching, GError **error) _LOGD("update-dns: updating plugin %s", plugin_name); if (!nm_dns_plugin_update(plugin, global_config, - _ip_config_lst_head(self), + _mgr_get_ip_configs_lst_head(self), priv->hostname, &plugin_error)) { _LOGW("update-dns: plugin %s update failed: %s", plugin_name, plugin_error->message); @@ -1689,7 +1719,7 @@ plugin_skip:; /* Clear the generated search list as it points to * strings owned by IP configurations and we can't * guarantee they stay alive. */ - clear_domain_lists(self); + _mgr_configs_data_clear(self); update_resolv_conf_no_stub(self, NM_CAST_STRV_CC(searches), @@ -1702,6 +1732,8 @@ plugin_skip:; */ if (caching) { const char *lladdr = "127.0.0.1"; + gboolean need_edns0; + gboolean need_trust; if (NM_IS_DNS_SYSTEMD_RESOLVED(priv->plugin)) { /* systemd-resolved uses a different link-local address */ @@ -1711,6 +1743,21 @@ plugin_skip:; g_strfreev(nameservers); nameservers = g_new0(char *, 2); nameservers[0] = g_strdup(lladdr); + + need_edns0 = nm_utils_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_EDNS0) < 0; + need_trust = nm_utils_strv_find_first(options, -1, NM_SETTING_DNS_OPTION_TRUST_AD) < 0; + + if (need_edns0 || need_trust) { + gsize len; + + len = NM_PTRARRAY_LEN(options); + options = g_realloc(options, sizeof(char *) * (len + 3u)); + if (need_edns0) + options[len++] = g_strdup(NM_SETTING_DNS_OPTION_EDNS0); + if (need_trust) + options[len++] = g_strdup(NM_SETTING_DNS_OPTION_TRUST_AD); + options[len] = NULL; + } } if (do_update) { @@ -1788,11 +1835,11 @@ plugin_skip:; /*****************************************************************************/ static void -_ip_config_dns_priority_changed(gpointer config, GParamSpec *pspec, NMDnsIPConfigData *ip_data) +_ip_config_dns_priority_changed(gpointer config, GParamSpec *pspec, NMDnsConfigIPData *ip_data) { - _ASSERT_ip_config_data(ip_data); + _ASSERT_dns_config_ip_data(ip_data); - NM_DNS_MANAGER_GET_PRIVATE(ip_data->data->self)->ip_config_lst_need_sort = TRUE; + NM_DNS_MANAGER_GET_PRIVATE(ip_data->data->self)->ip_configs_lst_need_sort = TRUE; } gboolean @@ -1801,10 +1848,10 @@ nm_dns_manager_set_ip_config(NMDnsManager * self, NMDnsIPConfigType ip_config_type) { NMDnsManagerPrivate *priv; - NMDnsIPConfigData * ip_data; + NMDnsConfigIPData * ip_data; NMDnsConfigData * data; int ifindex; - NMDnsIPConfigData ** p_best; + NMDnsConfigIPData ** p_best; g_return_val_if_fail(NM_IS_DNS_MANAGER(self), FALSE); g_return_val_if_fail(NM_IS_IP_CONFIG(ip_config), FALSE); @@ -1814,11 +1861,11 @@ nm_dns_manager_set_ip_config(NMDnsManager * self, priv = NM_DNS_MANAGER_GET_PRIVATE(self); - data = g_hash_table_lookup(priv->configs, &ifindex); + data = g_hash_table_lookup(priv->configs_dict, &ifindex); if (!data) ip_data = NULL; else - ip_data = _config_data_find_ip_config(data, ip_config); + ip_data = _dns_config_data_find_ip_config(data, ip_config); if (ip_config_type == NM_DNS_IP_CONFIG_TYPE_REMOVED) { if (!ip_data) @@ -1828,9 +1875,9 @@ nm_dns_manager_set_ip_config(NMDnsManager * self, if (priv->best_ip_config_6 == ip_data) priv->best_ip_config_6 = NULL; /* deleting a config doesn't invalidate the configs' sort order. */ - _ip_config_data_free(ip_data); + _dns_config_ip_data_free(ip_data); if (c_list_is_empty(&data->data_lst_head)) - g_hash_table_remove(priv->configs, &ifindex); + g_hash_table_remove(priv->configs_dict, &ifindex); goto changed; } @@ -1846,16 +1893,18 @@ nm_dns_manager_set_ip_config(NMDnsManager * self, .self = self, .data_lst_head = C_LIST_INIT(data->data_lst_head), }; - _ASSERT_config_data(data); - g_hash_table_add(priv->configs, data); + _ASSERT_dns_config_data(data); + g_hash_table_add(priv->configs_dict, data); + c_list_link_tail(&priv->configs_lst_head, &data->configs_lst); + priv->configs_lst_need_sort = TRUE; } if (!ip_data) - ip_data = _ip_config_data_new(data, ip_config, ip_config_type); + ip_data = _dns_config_ip_data_new(data, ip_config, ip_config_type); else ip_data->ip_config_type = ip_config_type; - priv->ip_config_lst_need_sort = TRUE; + priv->ip_configs_lst_need_sort = TRUE; p_best = NM_IS_IP4_CONFIG(ip_config) ? &priv->best_ip_config_4 : &priv->best_ip_config_6; @@ -2375,7 +2424,7 @@ _get_config_variant(NMDnsManager *self) NMGlobalDnsConfig * global_config; gs_free char * str = NULL; GVariantBuilder builder; - NMDnsIPConfigData * ip_data; + NMDnsConfigIPData * ip_data; const CList * head; gs_unref_ptrarray GPtrArray *array_domains = NULL; @@ -2391,7 +2440,7 @@ _get_config_variant(NMDnsManager *self) g_variant_builder_init(&builder, G_VARIANT_TYPE("aa{sv}")); - head = _ip_config_lst_head(self); + head = _mgr_get_ip_configs_lst_head(self); c_list_for_each_entry (ip_data, head, ip_config_lst) { const NMIPConfig *ip_config = ip_data->ip_config; GVariantBuilder entry_builder; @@ -2496,15 +2545,16 @@ nm_dns_manager_init(NMDnsManager *self) _LOGT("creating..."); - c_list_init(&priv->ip_config_lst_head); + c_list_init(&priv->configs_lst_head); + c_list_init(&priv->ip_configs_lst_head); priv->config = g_object_ref(nm_config_get()); G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NMDnsConfigData, ifindex) == 0); - priv->configs = g_hash_table_new_full(nm_pint_hash, - nm_pint_equals, - (GDestroyNotify) _config_data_free, - NULL); + priv->configs_dict = g_hash_table_new_full(nm_pint_hash, + nm_pint_equals, + (GDestroyNotify) _dns_config_data_free, + NULL); /* Set the initial hash */ compute_hash(self, NULL, NM_DNS_MANAGER_GET_PRIVATE(self)->hash); @@ -2521,7 +2571,7 @@ dispose(GObject *object) { NMDnsManager * self = NM_DNS_MANAGER(object); NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self); - NMDnsIPConfigData * ip_data, *ip_data_safe; + NMDnsConfigIPData * ip_data, *ip_data_safe; _LOGT("disposing"); @@ -2537,10 +2587,11 @@ dispose(GObject *object) priv->best_ip_config_4 = NULL; priv->best_ip_config_6 = NULL; - c_list_for_each_entry_safe (ip_data, ip_data_safe, &priv->ip_config_lst_head, ip_config_lst) - _ip_config_data_free(ip_data); + c_list_for_each_entry_safe (ip_data, ip_data_safe, &priv->ip_configs_lst_head, ip_config_lst) + _dns_config_ip_data_free(ip_data); - nm_clear_pointer(&priv->configs, g_hash_table_destroy); + nm_clear_pointer(&priv->configs_dict, g_hash_table_destroy); + nm_assert(c_list_is_empty(&priv->configs_lst_head)); nm_clear_g_source(&priv->plugin_ratelimit.timer); diff --git a/src/dns/nm-dns-manager.h b/src/dns/nm-dns-manager.h index fb2f36d222..7f104ebe03 100644 --- a/src/dns/nm-dns-manager.h +++ b/src/dns/nm-dns-manager.h @@ -25,6 +25,8 @@ enum { NM_DNS_PRIORITY_DEFAULT_VPN = 50, }; +/*****************************************************************************/ + struct _NMDnsConfigData; struct _NMDnsManager; @@ -60,14 +62,17 @@ typedef struct { * With systemd-resolved, this is the value for SetLinkDefaultRoute(). */ bool has_default_route : 1; } domains; -} NMDnsIPConfigData; +} NMDnsConfigIPData; typedef struct _NMDnsConfigData { int ifindex; struct _NMDnsManager *self; CList data_lst_head; + CList configs_lst; } NMDnsConfigData; +/*****************************************************************************/ + #define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type()) #define NM_DNS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), NM_TYPE_DNS_MANAGER, NMDnsManager)) #define NM_DNS_MANAGER_CLASS(k) \ diff --git a/src/dns/nm-dns-plugin.h b/src/dns/nm-dns-plugin.h index 5e87f59b2d..b5cffccb4d 100644 --- a/src/dns/nm-dns-plugin.h +++ b/src/dns/nm-dns-plugin.h @@ -26,7 +26,7 @@ typedef struct { GObjectClass parent; /* Called when DNS information is changed. 'configs' is an array - * of pointers to NMDnsIPConfigData sorted by priority. + * of pointers to NMDnsConfigIPData sorted by priority. * 'global_config' is the optional global DNS * configuration. */ diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c index fe2e78af75..6d37f4022a 100644 --- a/src/dns/nm-dns-systemd-resolved.c +++ b/src/dns/nm-dns-systemd-resolved.c @@ -179,7 +179,7 @@ static gboolean update_add_ip_config(NMDnsSystemdResolved *self, GVariantBuilder * dns, GVariantBuilder * domains, - NMDnsIPConfigData * data) + NMDnsConfigIPData * data) { int addr_family; gsize addr_size; @@ -256,7 +256,7 @@ prepare_one_interface(NMDnsSystemdResolved *self, InterfaceConfig *ic) g_variant_builder_open(&domains, G_VARIANT_TYPE("a(sb)")); c_list_for_each_entry (elem, &ic->configs_lst_head, lst) { - NMDnsIPConfigData *data = elem->data; + NMDnsConfigIPData *data = elem->data; NMIPConfig * ip_config = data->ip_config; has_config |= update_add_ip_config(self, &dns, &domains, data); @@ -423,7 +423,7 @@ update(NMDnsPlugin * plugin, guint interfaces_len; int ifindex; gpointer pointer; - NMDnsIPConfigData *ip_data; + NMDnsConfigIPData *ip_data; GHashTableIter iter; guint i; diff --git a/src/dnsmasq/nm-dnsmasq-manager.c b/src/dnsmasq/nm-dnsmasq-manager.c index 2dd4afcbe0..cdc3cd8589 100644 --- a/src/dnsmasq/nm-dnsmasq-manager.c +++ b/src/dnsmasq/nm-dnsmasq-manager.c @@ -313,7 +313,7 @@ nm_dnsmasq_manager_new(const char *iface) NMDnsMasqManager * manager; NMDnsMasqManagerPrivate *priv; - manager = (NMDnsMasqManager *) g_object_new(NM_TYPE_DNSMASQ_MANAGER, NULL); + manager = g_object_new(NM_TYPE_DNSMASQ_MANAGER, NULL); priv = NM_DNSMASQ_MANAGER_GET_PRIVATE(manager); priv->iface = g_strdup(iface); diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c index 1c1b43ebb6..eedcf17878 100644 --- a/src/initrd/nmi-cmdline-reader.c +++ b/src/initrd/nmi-cmdline-reader.c @@ -701,8 +701,6 @@ reader_parse_master(Reader *reader, char *argument, const char *type_name, const char * slaves; const char * slave; char * opts; - char * opt; - const char * opt_name; const char * mtu = NULL; master = get_word(&argument, ':'); @@ -724,8 +722,21 @@ reader_parse_master(Reader *reader, char *argument, const char *type_name, const opts = get_word(&argument, ':'); while (opts && *opts) { + gs_free_error GError *error = NULL; + char * opt; + const char * opt_name; + opt = get_word(&opts, ','); opt_name = get_word(&opt, '='); + + if (!_nm_setting_bond_validate_option(opt_name, opt, &error)) { + _LOGW(LOGD_CORE, + "Ignoring invalid bond option: %s%s%s = %s%s%s: %s", + NM_PRINT_FMT_QUOTE_STRING(opt_name), + NM_PRINT_FMT_QUOTE_STRING(opt), + error->message); + continue; + } nm_setting_bond_add_option(s_bond, opt_name, opt); } diff --git a/src/meson.build b/src/meson.build index 667a6a2ce2..b3eddadcdd 100644 --- a/src/meson.build +++ b/src/meson.build @@ -45,6 +45,7 @@ sources = files( 'nm-dbus-utils.c', 'nm-netns.c', 'nm-l3-config-data.c', + 'nm-l3-ipv4ll.c', 'nm-l3cfg.c', 'nm-ip-config.c', 'nm-ip4-config.c', diff --git a/src/nm-act-request.c b/src/nm-act-request.c index 67936ca08e..aa70ac7750 100644 --- a/src/nm-act-request.c +++ b/src/nm-act-request.c @@ -22,14 +22,8 @@ #include "nm-libnm-core-intern/nm-auth-subject.h" typedef struct { - char *table; - char *rule; -} ShareRule; - -typedef struct { - CList call_ids_lst_head; - gboolean shared; - GSList * share_rules; + CList call_ids_lst_head; + NMUtilsShareRules *share_rules; } NMActRequestPrivate; struct _NMActRequest { @@ -254,109 +248,32 @@ nm_act_request_clear_secrets(NMActRequest *self) /*****************************************************************************/ -static void -clear_share_rules(NMActRequest *req) -{ - NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE(req); - GSList * iter; - - for (iter = priv->share_rules; iter; iter = g_slist_next(iter)) { - ShareRule *rule = (ShareRule *) iter->data; - - g_free(rule->table); - g_free(rule->rule); - g_free(rule); - } - - g_slist_free(priv->share_rules); - priv->share_rules = NULL; -} - -void -nm_act_request_set_shared(NMActRequest *req, gboolean shared) -{ - NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE(req); - GSList * list, *iter; - - g_return_if_fail(NM_IS_ACT_REQUEST(req)); - - NM_ACT_REQUEST_GET_PRIVATE(req)->shared = shared; - - /* Tear the rules down in reverse order when sharing is stopped */ - list = g_slist_copy(priv->share_rules); - if (!shared) - list = g_slist_reverse(list); - - /* Send the rules to iptables */ - for (iter = list; iter; iter = g_slist_next(iter)) { - ShareRule * rule = (ShareRule *) iter->data; - char * envp[1] = {NULL}; - gs_strfreev char **argv = NULL; - gs_free char * cmd = NULL; - - cmd = g_strdup_printf("%s --table %s %s %s", - IPTABLES_PATH, - rule->table, - shared ? "--insert" : "--delete", - rule->rule); - if (!cmd) - continue; - - argv = g_strsplit(cmd, " ", 0); - if (argv && argv[0]) { - int status; - GError *error = NULL; - - nm_log_info(LOGD_SHARING, "Executing: %s", cmd); - if (!g_spawn_sync("/", - argv, - envp, - G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, - NULL, - NULL, - NULL, - NULL, - &status, - &error)) { - nm_log_warn(LOGD_SHARING, "Error executing command: %s", error->message); - g_clear_error(&error); - } else if (WEXITSTATUS(status)) { - nm_log_warn(LOGD_SHARING, - "** Command returned exit status %d.", - WEXITSTATUS(status)); - } - } - } - - g_slist_free(list); - - /* Clear the share rule list when sharing is stopped */ - if (!shared) - clear_share_rules(req); -} - -gboolean +NMUtilsShareRules * nm_act_request_get_shared(NMActRequest *req) { g_return_val_if_fail(NM_IS_ACT_REQUEST(req), FALSE); - return NM_ACT_REQUEST_GET_PRIVATE(req)->shared; + return NM_ACT_REQUEST_GET_PRIVATE(req)->share_rules; } void -nm_act_request_add_share_rule(NMActRequest *req, const char *table, const char *table_rule) +nm_act_request_set_shared(NMActRequest *req, NMUtilsShareRules *rules) { NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE(req); - ShareRule * rule; g_return_if_fail(NM_IS_ACT_REQUEST(req)); - g_return_if_fail(table != NULL); - g_return_if_fail(table_rule != NULL); - rule = g_malloc0(sizeof(ShareRule)); - rule->table = g_strdup(table); - rule->rule = g_strdup(table_rule); - priv->share_rules = g_slist_prepend(priv->share_rules, rule); + if (priv->share_rules == rules) + return; + + if (priv->share_rules) { + nm_utils_share_rules_apply(priv->share_rules, FALSE); + priv->share_rules = NULL; + } + if (rules) { + priv->share_rules = rules; + nm_utils_share_rules_apply(priv->share_rules, TRUE); + } } /*****************************************************************************/ @@ -558,24 +475,24 @@ nm_act_request_new(NMSettingsConnection * settings_connection, g_return_val_if_fail(NM_IS_DEVICE(device), NULL); g_return_val_if_fail(NM_IS_AUTH_SUBJECT(subject), NULL); - return (NMActRequest *) g_object_new(NM_TYPE_ACT_REQUEST, - NM_ACTIVE_CONNECTION_INT_APPLIED_CONNECTION, - applied_connection, - NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, - settings_connection, - NM_ACTIVE_CONNECTION_INT_DEVICE, - device, - NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, - specific_object, - NM_ACTIVE_CONNECTION_INT_SUBJECT, - subject, - NM_ACTIVE_CONNECTION_INT_ACTIVATION_TYPE, - (int) activation_type, - NM_ACTIVE_CONNECTION_INT_ACTIVATION_REASON, - (int) activation_reason, - NM_ACTIVE_CONNECTION_STATE_FLAGS, - (guint) initial_state_flags, - NULL); + return g_object_new(NM_TYPE_ACT_REQUEST, + NM_ACTIVE_CONNECTION_INT_APPLIED_CONNECTION, + applied_connection, + NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, + settings_connection, + NM_ACTIVE_CONNECTION_INT_DEVICE, + device, + NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, + specific_object, + NM_ACTIVE_CONNECTION_INT_SUBJECT, + subject, + NM_ACTIVE_CONNECTION_INT_ACTIVATION_TYPE, + (int) activation_type, + NM_ACTIVE_CONNECTION_INT_ACTIVATION_REASON, + (int) activation_reason, + NM_ACTIVE_CONNECTION_STATE_FLAGS, + (guint) initial_state_flags, + NULL); } static void @@ -589,10 +506,9 @@ dispose(GObject *object) c_list_for_each_entry_safe (call_id, call_id_safe, &priv->call_ids_lst_head, call_ids_lst) _do_cancel_secrets(self, call_id, TRUE); - /* Clear any share rules */ if (priv->share_rules) { - nm_act_request_set_shared(NM_ACT_REQUEST(object), FALSE); - clear_share_rules(NM_ACT_REQUEST(object)); + nm_utils_share_rules_apply(priv->share_rules, FALSE); + nm_clear_pointer(&priv->share_rules, nm_utils_share_rules_free); } G_OBJECT_CLASS(nm_act_request_parent_class)->dispose(object); diff --git a/src/nm-act-request.h b/src/nm-act-request.h index 65c8abf51b..e962ee7225 100644 --- a/src/nm-act-request.h +++ b/src/nm-act-request.h @@ -36,11 +36,15 @@ NMSettingsConnection *nm_act_request_get_settings_connection(NMActRequest *req); NMConnection *nm_act_request_get_applied_connection(NMActRequest *req); -gboolean nm_act_request_get_shared(NMActRequest *req); +/*****************************************************************************/ -void nm_act_request_set_shared(NMActRequest *req, gboolean shared); +struct _NMUtilsShareRules; -void nm_act_request_add_share_rule(NMActRequest *req, const char *table, const char *rule); +struct _NMUtilsShareRules *nm_act_request_get_shared(NMActRequest *req); + +void nm_act_request_set_shared(NMActRequest *req, struct _NMUtilsShareRules *rules); + +/*****************************************************************************/ /* Secrets handling */ diff --git a/src/nm-config-data.c b/src/nm-config-data.c index 4320e26bcf..eb891c512d 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -1345,8 +1345,8 @@ global_dns_equal(NMGlobalDnsConfig *old, NMGlobalDnsConfig *new) if (!old || !new) return FALSE; - if (!_nm_utils_strv_equal(old->options, new->options) - || !_nm_utils_strv_equal(old->searches, new->searches)) + if (!nm_utils_strv_equal(old->options, new->options) + || !nm_utils_strv_equal(old->searches, new->searches)) return FALSE; if ((!old->domains || !new->domains) && old->domains != new->domains) @@ -1364,8 +1364,8 @@ global_dns_equal(NMGlobalDnsConfig *old, NMGlobalDnsConfig *new) domain_old = value_old; domain_new = value_new; - if (!_nm_utils_strv_equal(domain_old->options, domain_new->options) - || !_nm_utils_strv_equal(domain_old->servers, domain_new->servers)) + if (!nm_utils_strv_equal(domain_old->options, domain_new->options) + || !nm_utils_strv_equal(domain_old->servers, domain_new->servers)) return FALSE; } diff --git a/src/nm-config.c b/src/nm-config.c index 8f46661dd1..da37945c1e 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -885,6 +885,7 @@ static const ConfigGroup config_groups[] = { NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_BACKEND, NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_SCAN_RAND_MAC_ADDRESS, NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_SCAN_GENERATE_MAC_ADDRESS_MASK, + NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_IWD_AUTOCONNECT, NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE, NM_CONFIG_KEYFILE_KEY_STOP_MATCH, ), }, diff --git a/src/nm-config.h b/src/nm-config.h index 9f866f2918..f4f1bf5d9a 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -88,6 +88,7 @@ #define NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_SCAN_GENERATE_MAC_ADDRESS_MASK \ "wifi.scan-generate-mac-address-mask" #define NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT "carrier-wait-timeout" +#define NM_CONFIG_KEYFILE_KEY_DEVICE_WIFI_IWD_AUTOCONNECT "wifi.iwd.autoconnect" #define NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE "match-device" #define NM_CONFIG_KEYFILE_KEY_STOP_MATCH "stop-match" diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c index 7adc011e30..81879be876 100644 --- a/src/nm-core-utils.c +++ b/src/nm-core-utils.c @@ -187,51 +187,46 @@ nm_utils_exp10(gint16 ex) /*****************************************************************************/ -/* - * nm_ethernet_address_is_valid: - * @addr: pointer to a binary or ASCII Ethernet address - * @len: length of @addr, or -1 if @addr is ASCII - * - * Compares an Ethernet address against known invalid addresses. - - * Returns: %TRUE if @addr is a valid Ethernet address, %FALSE if it is not. - */ gboolean -nm_ethernet_address_is_valid(gconstpointer addr, gssize len) +nm_ether_addr_is_valid(const NMEtherAddr *addr) { - guint8 invalid_addr[4][ETH_ALEN] = { + static const guint8 invalid_addr[][ETH_ALEN] = { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x44, 0x44, 0x44, 0x44, 0x44, 0x44}, {0x00, 0x30, 0xb4, 0x00, 0x00, 0x00}, /* prism54 dummy MAC */ }; - guint8 addr_bin[ETH_ALEN]; - guint i; + int i; - if (!addr) { - g_return_val_if_fail(len == -1 || len == ETH_ALEN, FALSE); + if (!addr) return FALSE; - } - - if (len == -1) { - if (!nm_utils_hwaddr_aton(addr, addr_bin, ETH_ALEN)) - return FALSE; - addr = addr_bin; - } else if (len != ETH_ALEN) - g_return_val_if_reached(FALSE); /* Check for multicast address */ - if ((((guint8 *) addr)[0]) & 0x01) + if (addr->ether_addr_octet[0] & 0x01u) return FALSE; - for (i = 0; i < G_N_ELEMENTS(invalid_addr); i++) { - if (nm_utils_hwaddr_matches(addr, ETH_ALEN, invalid_addr[i], ETH_ALEN)) + for (i = 0; i < (int) G_N_ELEMENTS(invalid_addr); i++) { + if (memcmp(addr, invalid_addr[i], ETH_ALEN) == 0) return FALSE; } return TRUE; } +gboolean +nm_ether_addr_is_valid_str(const char *str) +{ + NMEtherAddr addr_bin; + + if (!str) + return FALSE; + + if (!nm_utils_hwaddr_aton(str, &addr_bin, ETH_ALEN)) + return FALSE; + + return nm_ether_addr_is_valid(&addr_bin); +} + /*****************************************************************************/ void @@ -4386,7 +4381,7 @@ nm_utils_dnsmasq_status_to_string(int status, char *dest, gsize size) } /** - * nm_utils_get_reverse_dns_domains_ip4: + * nm_utils_get_reverse_dns_domains_ip_4: * @addr: IP address in network order * @plen: prefix length * @domains: array for results @@ -4395,7 +4390,7 @@ nm_utils_dnsmasq_status_to_string(int status, char *dest, gsize size) * append them to @domains. */ void -nm_utils_get_reverse_dns_domains_ip4(guint32 addr, guint8 plen, GPtrArray *domains) +nm_utils_get_reverse_dns_domains_ip_4(guint32 addr, guint8 plen, GPtrArray *domains) { guint32 ip, ip2, mask; guchar *p; @@ -4434,7 +4429,7 @@ nm_utils_get_reverse_dns_domains_ip4(guint32 addr, guint8 plen, GPtrArray *domai } /** - * nm_utils_get_reverse_dns_domains_ip6: + * nm_utils_get_reverse_dns_domains_ip_6: * @addr: IPv6 address * @plen: prefix length * @domains: array for results @@ -4443,7 +4438,7 @@ nm_utils_get_reverse_dns_domains_ip4(guint32 addr, guint8 plen, GPtrArray *domai * append them to @domains. */ void -nm_utils_get_reverse_dns_domains_ip6(const struct in6_addr *ip, guint8 plen, GPtrArray *domains) +nm_utils_get_reverse_dns_domains_ip_6(const struct in6_addr *ip, guint8 plen, GPtrArray *domains) { struct in6_addr addr; guint nibbles, bits, entries; diff --git a/src/nm-core-utils.h b/src/nm-core-utils.h index 237574c550..5c8bac9c80 100644 --- a/src/nm-core-utils.h +++ b/src/nm-core-utils.h @@ -95,7 +95,8 @@ void _nm_singleton_instance_register_destruction(GObject *instance); /*****************************************************************************/ -gboolean nm_ethernet_address_is_valid(gconstpointer addr, gssize len); +gboolean nm_ether_addr_is_valid(const NMEtherAddr *addr); +gboolean nm_ether_addr_is_valid_str(const char *str); gconstpointer nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen); @@ -209,7 +210,7 @@ nm_utils_ip6_route_metric_normalize(guint32 metric) static inline guint32 nm_utils_ip_route_metric_normalize(int addr_family, guint32 metric) { - return addr_family == AF_INET6 ? nm_utils_ip6_route_metric_normalize(metric) : metric; + return NM_IS_IPv4(addr_family) ? metric : nm_utils_ip6_route_metric_normalize(metric); } static inline guint32 @@ -531,9 +532,21 @@ nm_utils_ip4_address_is_zeronet(in_addr_t network) const char *nm_utils_dnsmasq_status_to_string(int status, char *dest, gsize size); -void nm_utils_get_reverse_dns_domains_ip4(guint32 ip, guint8 plen, GPtrArray *domains); +void nm_utils_get_reverse_dns_domains_ip_4(guint32 ip, guint8 plen, GPtrArray *domains); void -nm_utils_get_reverse_dns_domains_ip6(const struct in6_addr *ip, guint8 plen, GPtrArray *domains); +nm_utils_get_reverse_dns_domains_ip_6(const struct in6_addr *ip, guint8 plen, GPtrArray *domains); + +static inline void +nm_utils_get_reverse_dns_domains_ip(int addr_family, + gconstpointer addr, + guint8 plen, + GPtrArray * domains) +{ + if (NM_IS_IPv4(addr_family)) + nm_utils_get_reverse_dns_domains_ip_4(*((const in_addr_t *) addr), plen, domains); + else + nm_utils_get_reverse_dns_domains_ip_6(addr, plen, domains); +} struct stat; diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c index feab265dbb..3b0763d11e 100644 --- a/src/nm-dispatcher.c +++ b/src/nm-dispatcher.c @@ -167,140 +167,131 @@ dump_proxy_to_props(NMProxyConfig *proxy, GVariantBuilder *builder) } static void -dump_ip4_to_props(NMIP4Config *ip4, GVariantBuilder *builder) +dump_ip_to_props(NMIPConfig *ip, GVariantBuilder *builder) { - GVariantBuilder int_builder; - NMDedupMultiIter ipconf_iter; - gboolean first; - guint n, i; - const NMPlatformIP4Address *addr; - const NMPlatformIP4Route * route; - guint32 array[4]; - - /* Addresses */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aau")); - first = TRUE; - nm_ip_config_iter_ip4_address_for_each (&ipconf_iter, ip4, &addr) { - const NMPObject *default_route; - - array[0] = addr->address; - array[1] = addr->plen; - array[2] = (first && (default_route = nm_ip4_config_best_default_route_get(ip4))) - ? NMP_OBJECT_CAST_IP4_ROUTE(default_route)->gateway - : (guint32) 0; - g_variant_builder_add( - &int_builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 3, sizeof(guint32))); - first = FALSE; + const int addr_family = nm_ip_config_get_addr_family(ip); + const int IS_IPv4 = NM_IS_IPv4(addr_family); + const NMPObject *obj; + GVariantBuilder int_builder; + NMDedupMultiIter ipconf_iter; + GVariant * var1; + GVariant * var2; + guint n; + guint i; + const NMPObject *default_route; + + if (IS_IPv4) + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aau")); + else + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("a(ayuay)")); + default_route = nm_ip_config_best_default_route_get(ip); + if (IS_IPv4) + nm_ip_config_iter_ip4_address_init(&ipconf_iter, NM_IP4_CONFIG(ip)); + else + nm_ip_config_iter_ip6_address_init(&ipconf_iter, NM_IP6_CONFIG(ip)); + while (nm_platform_dedup_multi_iter_next_obj(&ipconf_iter, + &obj, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4))) { + const NMPlatformIPXAddress *addr = NMP_OBJECT_CAST_IPX_ADDRESS(obj); + + if (IS_IPv4) { + guint32 array[3]; + in_addr_t gw; + + gw = 0u; + if (default_route) { + gw = NMP_OBJECT_CAST_IP4_ROUTE(default_route)->gateway; + default_route = NULL; + } + array[0] = addr->a4.address; + array[1] = addr->a4.plen; + array[2] = gw; + g_variant_builder_add( + &int_builder, + "@au", + g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 3, sizeof(guint32))); + } else { + const struct in6_addr *gw = &in6addr_any; + + if (default_route) { + gw = &NMP_OBJECT_CAST_IP6_ROUTE(default_route)->gateway; + default_route = NULL; + } + var1 = nm_g_variant_new_ay_in6addr(&addr->a6.address); + var2 = nm_g_variant_new_ay_in6addr(gw); + g_variant_builder_add(&int_builder, "(@ayu@ay)", var1, addr->a6.plen, var2); + } } g_variant_builder_add(builder, "{sv}", "addresses", g_variant_builder_end(&int_builder)); - /* DNS servers */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("au")); - n = nm_ip4_config_get_num_nameservers(ip4); - for (i = 0; i < n; i++) - g_variant_builder_add(&int_builder, "u", nm_ip4_config_get_nameserver(ip4, i)); + if (IS_IPv4) + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("au")); + else + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aay")); + n = nm_ip_config_get_num_nameservers(ip); + for (i = 0; i < n; i++) { + if (IS_IPv4) { + g_variant_builder_add(&int_builder, + "u", + nm_ip4_config_get_nameserver(NM_IP4_CONFIG(ip), i)); + } else { + var1 = nm_g_variant_new_ay_in6addr(nm_ip6_config_get_nameserver(NM_IP6_CONFIG(ip), i)); + g_variant_builder_add(&int_builder, "@ay", var1); + } + } g_variant_builder_add(builder, "{sv}", "nameservers", g_variant_builder_end(&int_builder)); - /* Search domains */ g_variant_builder_init(&int_builder, G_VARIANT_TYPE("as")); - n = nm_ip4_config_get_num_domains(ip4); + n = nm_ip_config_get_num_domains(ip); for (i = 0; i < n; i++) - g_variant_builder_add(&int_builder, "s", nm_ip4_config_get_domain(ip4, i)); + g_variant_builder_add(&int_builder, "s", nm_ip_config_get_domain(ip, i)); g_variant_builder_add(builder, "{sv}", "domains", g_variant_builder_end(&int_builder)); - /* WINS servers */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("au")); - n = nm_ip4_config_get_num_wins(ip4); - for (i = 0; i < n; i++) - g_variant_builder_add(&int_builder, "u", nm_ip4_config_get_wins(ip4, i)); - g_variant_builder_add(builder, "{sv}", "wins-servers", g_variant_builder_end(&int_builder)); - - /* Static routes */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aau")); - nm_ip_config_iter_ip4_route_for_each (&ipconf_iter, ip4, &route) { - if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route)) - continue; - array[0] = route->network; - array[1] = route->plen; - array[2] = route->gateway; - array[3] = route->metric; - g_variant_builder_add( - &int_builder, - "@au", - g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 4, sizeof(guint32))); + if (IS_IPv4) { + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("au")); + n = nm_ip4_config_get_num_wins(NM_IP4_CONFIG(ip)); + for (i = 0; i < n; i++) + g_variant_builder_add(&int_builder, "u", nm_ip4_config_get_wins(NM_IP4_CONFIG(ip), i)); + g_variant_builder_add(builder, "{sv}", "wins-servers", g_variant_builder_end(&int_builder)); } - g_variant_builder_add(builder, "{sv}", "routes", g_variant_builder_end(&int_builder)); -} -static void -dump_ip6_to_props(NMIP6Config *ip6, GVariantBuilder *builder) -{ - GVariantBuilder int_builder; - NMDedupMultiIter ipconf_iter; - guint n, i; - gboolean first; - const NMPlatformIP6Address *addr; - const NMPlatformIP6Route * route; - GVariant * ip, *gw; - - /* Addresses */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("a(ayuay)")); - - first = TRUE; - nm_ip_config_iter_ip6_address_for_each (&ipconf_iter, ip6, &addr) { - const NMPObject *default_route; - - ip = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - &addr->address, - sizeof(struct in6_addr), - 1); - gw = g_variant_new_fixed_array( - G_VARIANT_TYPE_BYTE, - (first && (default_route = nm_ip6_config_best_default_route_get(ip6))) - ? &NMP_OBJECT_CAST_IP6_ROUTE(default_route)->gateway - : &in6addr_any, - sizeof(struct in6_addr), - 1); - g_variant_builder_add(&int_builder, "(@ayu@ay)", ip, addr->plen, gw); - first = FALSE; - } - g_variant_builder_add(builder, "{sv}", "addresses", g_variant_builder_end(&int_builder)); - - /* DNS servers */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aay")); - n = nm_ip6_config_get_num_nameservers(ip6); - for (i = 0; i < n; i++) { - ip = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - nm_ip6_config_get_nameserver(ip6, i), - sizeof(struct in6_addr), - 1); - g_variant_builder_add(&int_builder, "@ay", ip); - } - g_variant_builder_add(builder, "{sv}", "nameservers", g_variant_builder_end(&int_builder)); - - /* Search domains */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("as")); - n = nm_ip6_config_get_num_domains(ip6); - for (i = 0; i < n; i++) - g_variant_builder_add(&int_builder, "s", nm_ip6_config_get_domain(ip6, i)); - g_variant_builder_add(builder, "{sv}", "domains", g_variant_builder_end(&int_builder)); + if (IS_IPv4) + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("aau")); + else + g_variant_builder_init(&int_builder, G_VARIANT_TYPE("a(ayuayu)")); + if (IS_IPv4) + nm_ip_config_iter_ip4_route_init(&ipconf_iter, NM_IP4_CONFIG(ip)); + else + nm_ip_config_iter_ip6_route_init(&ipconf_iter, NM_IP6_CONFIG(ip)); + while (nm_platform_dedup_multi_iter_next_obj(&ipconf_iter, + &obj, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4))) { + const NMPlatformIPXRoute *route = NMP_OBJECT_CAST_IPX_ROUTE(obj); - /* Static routes */ - g_variant_builder_init(&int_builder, G_VARIANT_TYPE("a(ayuayu)")); - nm_ip_config_iter_ip6_route_for_each (&ipconf_iter, ip6, &route) { if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route)) continue; - ip = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - &route->network, - sizeof(struct in6_addr), - 1); - gw = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - &route->gateway, - sizeof(struct in6_addr), - 1); - g_variant_builder_add(&int_builder, "(@ayu@ayu)", ip, route->plen, gw, route->metric); + + if (IS_IPv4) { + guint32 array[4]; + + array[0] = route->r4.network; + array[1] = route->r4.plen; + array[2] = route->r4.gateway; + array[3] = route->r4.metric; + g_variant_builder_add( + &int_builder, + "@au", + g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, array, 4, sizeof(guint32))); + } else { + var1 = nm_g_variant_new_ay_in6addr(&route->r6.network); + var2 = nm_g_variant_new_ay_in6addr(&route->r6.gateway); + g_variant_builder_add(&int_builder, + "(@ayu@ayu)", + var1, + route->r6.plen, + var2, + route->r6.metric); + } } g_variant_builder_add(builder, "{sv}", "routes", g_variant_builder_end(&int_builder)); } @@ -350,11 +341,11 @@ fill_device_props(NMDevice * device, ip4_config = nm_device_get_ip4_config(device); if (ip4_config) - dump_ip4_to_props(ip4_config, ip4_builder); + dump_ip_to_props(NM_IP_CONFIG(ip4_config), ip4_builder); ip6_config = nm_device_get_ip6_config(device); if (ip6_config) - dump_ip6_to_props(ip6_config, ip6_builder); + dump_ip_to_props(NM_IP_CONFIG(ip6_config), ip6_builder); dhcp_config = nm_device_get_dhcp_config(device, AF_INET); if (dhcp_config) @@ -376,9 +367,9 @@ fill_vpn_props(NMProxyConfig * proxy_config, if (proxy_config) dump_proxy_to_props(proxy_config, proxy_builder); if (ip4_config) - dump_ip4_to_props(ip4_config, ip4_builder); + dump_ip_to_props(NM_IP_CONFIG(ip4_config), ip4_builder); if (ip6_config) - dump_ip6_to_props(ip6_config, ip6_builder); + dump_ip_to_props(NM_IP_CONFIG(ip6_config), ip6_builder); } static const char * diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index 9d2b459d32..27847af77f 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -3120,12 +3120,12 @@ NMIP4Config * nm_ip4_config_new(NMDedupMultiIndex *multi_idx, int ifindex) { g_return_val_if_fail(ifindex >= -1, NULL); - return (NMIP4Config *) g_object_new(NM_TYPE_IP4_CONFIG, - NM_IP4_CONFIG_MULTI_IDX, - multi_idx, - NM_IP4_CONFIG_IFINDEX, - ifindex, - NULL); + return g_object_new(NM_TYPE_IP4_CONFIG, + NM_IP4_CONFIG_MULTI_IDX, + multi_idx, + NM_IP4_CONFIG_IFINDEX, + ifindex, + NULL); } static void diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h index ccfca74c1e..c8bad3a8d2 100644 --- a/src/nm-ip4-config.h +++ b/src/nm-ip4-config.h @@ -319,14 +319,21 @@ NM_IS_IP_CONFIG_ADDR_FAMILY(gconstpointer config, int addr_family) NM_CONSTCAST_FULL(NMIPConfig, (config), _configx, NMIP4Config, NMIP6Config); \ }) +static inline gboolean +nm_ip_config_is_ipv4(const NMIPConfig *config) +{ + if (NM_IP_CONFIG_GET_CLASS(config)->is_ipv4) { + nm_assert(NM_IS_IP4_CONFIG(config)); + return TRUE; + } + nm_assert(NM_IS_IP6_CONFIG(config)); + return FALSE; +} + static inline int nm_ip_config_get_addr_family(const NMIPConfig *config) { - if (NM_IS_IP4_CONFIG(config)) - return AF_INET; - if (NM_IS_IP6_CONFIG(config)) - return AF_INET6; - g_return_val_if_reached(AF_UNSPEC); + return nm_ip_config_is_ipv4(config) ? AF_INET : AF_INET6; } #define _NM_IP_CONFIG_DISPATCH(config, v4_func, v6_func, ...) \ @@ -334,10 +341,9 @@ nm_ip_config_get_addr_family(const NMIPConfig *config) { \ gconstpointer _config = (config); \ \ - if (NM_IS_IP4_CONFIG(_config)) { \ + if (nm_ip_config_is_ipv4(_config)) { \ return v4_func((NMIP4Config *) _config, ##__VA_ARGS__); \ } else { \ - nm_assert(NM_IS_IP6_CONFIG(_config)); \ return v6_func((NMIP6Config *) _config, ##__VA_ARGS__); \ } \ } \ @@ -348,10 +354,9 @@ nm_ip_config_get_addr_family(const NMIPConfig *config) { \ gconstpointer _config = (config); \ \ - if (NM_IS_IP4_CONFIG(_config)) { \ + if (nm_ip_config_is_ipv4(_config)) { \ v4_func((NMIP4Config *) _config, ##__VA_ARGS__); \ } else { \ - nm_assert(NM_IS_IP6_CONFIG(_config)); \ v6_func((NMIP6Config *) _config, ##__VA_ARGS__); \ } \ } \ @@ -369,6 +374,38 @@ nm_ip_config_hash(const NMIPConfig *self, GChecksum *sum, gboolean dns_only) _NM_IP_CONFIG_DISPATCH_VOID(self, nm_ip4_config_hash, nm_ip6_config_hash, sum, dns_only); } +static inline gconstpointer +nm_ip_config_get_first_address(NMIPConfig *self) +{ + _NM_IP_CONFIG_DISPATCH(self, nm_ip4_config_get_first_address, nm_ip6_config_get_first_address); +} + +static inline void +nm_ip_config_iter_ip_address_init(NMDedupMultiIter *iter, const NMIPConfig *self) +{ + if (nm_ip_config_is_ipv4(self)) + nm_ip_config_iter_ip4_address_init(iter, (const NMIP4Config *) self); + else + nm_ip_config_iter_ip6_address_init(iter, (const NMIP6Config *) self); +} + +#define nm_ip_config_iter_ip_address_for_each(iter, self, address) \ + for (nm_ip_config_iter_ip_address_init((iter), (self)); \ + nm_platform_dedup_multi_iter_next_ip_address((iter), (address));) + +static inline void +nm_ip_config_iter_ip_route_init(NMDedupMultiIter *iter, const NMIPConfig *self) +{ + if (nm_ip_config_is_ipv4(self)) + nm_ip_config_iter_ip4_route_init(iter, (const NMIP4Config *) self); + else + nm_ip_config_iter_ip6_route_init(iter, (const NMIP6Config *) self); +} + +#define nm_ip_config_iter_ip_route_for_each(iter, self, route) \ + for (nm_ip_config_iter_ip_route_init((iter), (self)); \ + nm_platform_dedup_multi_iter_next_ip_route((iter), (route));) + static inline void nm_ip_config_add_address(NMIPConfig *self, const NMPlatformIPAddress *address) { @@ -543,11 +580,9 @@ nm_ip_config_set_never_default(NMIPConfig *self, gboolean never_default) gpointer _dst = (dst); \ gconstpointer _src = (src); \ \ - if (NM_IS_IP4_CONFIG(_dst)) { \ - nm_assert(NM_IS_IP4_CONFIG(_src)); \ + if (nm_ip_config_is_ipv4(_dst)) { \ _return v4_func((NMIP4Config *) _dst, (const NMIP4Config *) _src, ##__VA_ARGS__); \ } else { \ - nm_assert(NM_IS_IP6_CONFIG(_src)); \ _return v6_func((NMIP6Config *) _dst, (const NMIP6Config *) _src, ##__VA_ARGS__); \ } \ } \ @@ -610,7 +645,8 @@ nm_ip_config_intersect_alloc(const NMIPConfig *a, gboolean intersect_routes, guint32 default_route_metric_penalty) { - if (NM_IS_IP4_CONFIG(a)) { + if (nm_ip_config_is_ipv4(a)) { + nm_assert(NM_IS_IP4_CONFIG(a)); nm_assert(NM_IS_IP4_CONFIG(b)); return (NMIPConfig *) nm_ip4_config_intersect_alloc((const NMIP4Config *) a, (const NMIP4Config *) b, diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 407aa1d60f..54488e37d9 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -2554,12 +2554,12 @@ NMIP6Config * nm_ip6_config_new(NMDedupMultiIndex *multi_idx, int ifindex) { g_return_val_if_fail(ifindex >= -1, NULL); - return (NMIP6Config *) g_object_new(NM_TYPE_IP6_CONFIG, - NM_IP6_CONFIG_MULTI_IDX, - multi_idx, - NM_IP6_CONFIG_IFINDEX, - ifindex, - NULL); + return g_object_new(NM_TYPE_IP6_CONFIG, + NM_IP6_CONFIG_MULTI_IDX, + multi_idx, + NM_IP6_CONFIG_IFINDEX, + ifindex, + NULL); } NMIP6Config * diff --git a/src/nm-l3-config-data.c b/src/nm-l3-config-data.c index 3cc5d67041..a5c8d52337 100644 --- a/src/nm-l3-config-data.c +++ b/src/nm-l3-config-data.c @@ -385,8 +385,10 @@ nm_l3_config_data_log(const NML3ConfigData *self, const NMPObject *obj; i = 0; - nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + self, + &obj, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { _L("address%c[%u]: %s", nm_utils_addr_family_to_char(addr_family), i, @@ -407,8 +409,7 @@ nm_l3_config_data_log(const NML3ConfigData *self, } i = 0; - nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { _L("route%c[%u]: %s%s", nm_utils_addr_family_to_char(addr_family), i, @@ -586,9 +587,7 @@ _route_valid_6(const NMPlatformIP6Route *r) static gboolean _route_valid(int addr_family, gconstpointer r) { - nm_assert_addr_family(addr_family); - - return addr_family == AF_INET ? _route_valid_4(r) : _route_valid_6(r); + return NM_IS_IPv4(addr_family) ? _route_valid_4(r) : _route_valid_6(r); } static gboolean @@ -914,8 +913,7 @@ nm_l3_config_data_has_routes_with_type_local(const NML3ConfigData *self, int add } val = FALSE; - nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { if (NMP_OBJECT_CAST_IP_ROUTE(obj)->type_coerced == nm_platform_route_type_coerce(RTN_LOCAL)) { val = TRUE; @@ -989,8 +987,7 @@ nm_l3_config_data_get_first_obj(const NML3ConfigData *self, nm_assert(_NM_IS_L3_CONFIG_DATA(self, TRUE)); - nm_l3_config_data_iter_obj_for_each(&iter, self, &obj, obj_type) - { + nm_l3_config_data_iter_obj_for_each (&iter, self, &obj, obj_type) { if (!predicate || predicate(obj)) return obj; } @@ -1205,8 +1202,7 @@ nm_l3_config_data_add_address_full(NML3ConfigData * self, nm_assert(!obj_new || NMP_OBJECT_GET_ADDR_FAMILY(obj_new) == addr_family); changed = _l3_config_data_add_obj(self->multi_idx, - addr_family == AF_INET ? &self->idx_addresses_4 - : &self->idx_addresses_6, + &self->idx_addresses_x[NM_IS_IPv4(addr_family)], self->ifindex, obj_new, (const NMPlatformObject *) pl_new, @@ -1253,7 +1249,7 @@ nm_l3_config_data_add_route_full(NML3ConfigData * self, else self->has_routes_with_type_local_6_set = FALSE; if (_l3_config_data_add_obj(self->multi_idx, - addr_family == AF_INET ? &self->idx_routes_4 : &self->idx_routes_6, + &self->idx_routes_x[NM_IS_IPv4(addr_family)], self->ifindex, obj_new, (const NMPlatformObject *) pl_new, @@ -1880,11 +1876,10 @@ _data_get_direct_route_for_host(const NML3ConfigData *self, if (nm_ip_addr_is_null(addr_family, host)) return NULL; - nm_l3_config_data_iter_obj_for_each(&ipconf_iter, - self, - &item_obj, - NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&ipconf_iter, + self, + &item_obj, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { const NMPlatformIPXRoute *item = NMP_OBJECT_CAST_IPX_ROUTE(item_obj); if (nm_ip_addr_is_null(addr_family, @@ -1941,8 +1936,7 @@ nm_l3_config_data_get_blacklisted_ip4_routes(const NML3ConfigData *self, gboolea * As we don't do that for IPv4 and manual IPv6 addresses. Add them here * as dependent routes. */ - nm_l3_config_data_iter_obj_for_each(&iter, self, &my_addr_obj, NMP_OBJECT_TYPE_IP4_ADDRESS) - { + nm_l3_config_data_iter_obj_for_each (&iter, self, &my_addr_obj, NMP_OBJECT_TYPE_IP4_ADDRESS) { const NMPlatformIP4Address *const my_addr = NMP_OBJECT_CAST_IP4_ADDRESS(my_addr_obj); in_addr_t network_4; NMPlatformIPXRoute rx; @@ -2033,11 +2027,10 @@ nm_l3_config_data_add_dependent_routes(NML3ConfigData *self, nm_l3_config_data_add_route(self, addr_family, NULL, &rx.rx); } - nm_l3_config_data_iter_obj_for_each(&iter, - self, - &my_addr_obj, - NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + self, + &my_addr_obj, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { const NMPlatformIPXAddress *const my_addr = NMP_OBJECT_CAST_IPX_ADDRESS(my_addr_obj); if (my_addr->ax.external) @@ -2152,11 +2145,10 @@ nm_l3_config_data_add_dependent_routes(NML3ConfigData *self, } } - nm_l3_config_data_iter_obj_for_each(&iter, - self, - &my_route_obj, - NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + self, + &my_route_obj, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { const NMPlatformIPXRoute *my_route = NMP_OBJECT_CAST_IPX_ROUTE(my_route_obj); NMPObject * new_route; NMPlatformIPXRoute * new_r; @@ -2547,22 +2539,38 @@ nm_l3_config_data_merge(NML3ConfigData * self, const NML3ConfigDatFlags has_dns_priority_flag = NM_L3_CONFIG_DAT_FLAGS_HAS_DNS_PRIORITY(IS_IPv4); - nm_l3_config_data_iter_obj_for_each(&iter, src, &obj, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) - { - if (hook_add_addr && !hook_add_addr(src, obj, hook_user_data)) + nm_l3_config_data_iter_obj_for_each (&iter, + src, + &obj, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { + NMPlatformIPXAddress addr_stack; + const NMPlatformIPAddress *addr = NULL; + NMTernary ip4acd_not_ready = NM_TERNARY_DEFAULT; + + if (hook_add_addr && !hook_add_addr(src, obj, &ip4acd_not_ready, hook_user_data)) continue; + if (IS_IPv4 && ip4acd_not_ready != NM_TERNARY_DEFAULT + && (!!ip4acd_not_ready) != NMP_OBJECT_CAST_IP4_ADDRESS(obj)->ip4acd_not_ready) { + addr_stack.a4 = *NMP_OBJECT_CAST_IP4_ADDRESS(obj); + addr_stack.a4.ip4acd_not_ready = (!!ip4acd_not_ready); + addr = &addr_stack.ax; + } else + nm_assert(IS_IPv4 || ip4acd_not_ready == NM_TERNARY_DEFAULT); + nm_l3_config_data_add_address_full(self, addr_family, - obj, - NULL, + addr ? NULL : obj, + addr, NM_L3_CONFIG_ADD_FLAGS_EXCLUSIVE, NULL); } if (!NM_FLAGS_HAS(merge_flags, NM_L3_CONFIG_MERGE_FLAGS_NO_ROUTES)) { - nm_l3_config_data_iter_obj_for_each(&iter, src, &obj, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + src, + &obj, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { const NMPlatformIPRoute *r_src = NMP_OBJECT_CAST_IP_ROUTE(obj); NMPlatformIPXRoute r; @@ -2589,7 +2597,7 @@ nm_l3_config_data_merge(NML3ConfigData * self, if (r_src->metric_any) { _ensure_r(); r.rx.metric_any = FALSE; - r.rx.metric_any = default_route_metric_x[IS_IPv4]; + r.rx.metric = nm_add_clamped_u32(r.rx.metric, default_route_metric_x[IS_IPv4]); } if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(r_src)) { @@ -2655,8 +2663,7 @@ nm_l3_config_data_merge(NML3ConfigData * self, if (self->llmnr == NM_SETTING_CONNECTION_LLMNR_DEFAULT) self->llmnr = src->llmnr; - if (self->metered == NM_TERNARY_DEFAULT) - self->metered = src->metered; + self->metered = NM_MAX((NMTernary) self->metered, (NMTernary) src->metered); if (self->ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN) self->ip6_privacy = src->ip6_privacy; diff --git a/src/nm-l3-config-data.h b/src/nm-l3-config-data.h index 81dae7dea4..da9fd93a96 100644 --- a/src/nm-l3-config-data.h +++ b/src/nm-l3-config-data.h @@ -141,6 +141,7 @@ NML3ConfigData *nm_l3_config_data_new_from_platform(NMDedupMultiIndex * mu typedef gboolean (*NML3ConfigMergeHookAddObj)(const NML3ConfigData *l3cd, const NMPObject * obj, + NMTernary * out_ip4acd_not_ready, gpointer user_data); void nm_l3_config_data_merge(NML3ConfigData * self, @@ -222,21 +223,13 @@ const NMDedupMultiHeadEntry *nm_l3_config_data_lookup_objs(const NML3ConfigData static inline const NMDedupMultiHeadEntry * nm_l3_config_data_lookup_addresses(const NML3ConfigData *self, int addr_family) { - nm_assert_addr_family(addr_family); - - return nm_l3_config_data_lookup_objs(self, - addr_family == AF_INET ? NMP_OBJECT_TYPE_IP4_ADDRESS - : NMP_OBJECT_TYPE_IP6_ADDRESS); + return nm_l3_config_data_lookup_objs(self, NMP_OBJECT_TYPE_IP_ADDRESS(NM_IS_IPv4(addr_family))); } static inline const NMDedupMultiHeadEntry * nm_l3_config_data_lookup_routes(const NML3ConfigData *self, int addr_family) { - nm_assert_addr_family(addr_family); - - return nm_l3_config_data_lookup_objs(self, - addr_family == AF_INET ? NMP_OBJECT_TYPE_IP4_ROUTE - : NMP_OBJECT_TYPE_IP6_ROUTE); + return nm_l3_config_data_lookup_objs(self, NMP_OBJECT_TYPE_IP_ROUTE(NM_IS_IPv4(addr_family))); } #define nm_l3_config_data_iter_obj_for_each(iter, self, obj, type) \ diff --git a/src/nm-l3-ipv4ll.c b/src/nm-l3-ipv4ll.c new file mode 100644 index 0000000000..fe76b96955 --- /dev/null +++ b/src/nm-l3-ipv4ll.c @@ -0,0 +1,1058 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ + +#include "nm-default.h" + +#include "nm-l3-ipv4ll.h" + +#include <net/if.h> + +#include "n-acd/src/n-acd.h" +#include "nm-core-utils.h" + +#define ADDR_IPV4LL_PREFIX_LEN 16 + +#define TIMED_OUT_TIME_FACTOR 5u + +/*****************************************************************************/ + +typedef enum { + TIMED_OUT_STATE_IS_NOT_TIMED_OUT, + TIMED_OUT_STATE_IS_TIMED_OUT, + TIMED_OUT_STATE_HAVE_TIMER_RUNNING, +} TimedOutState; + +struct _NML3IPv4LLRegistration { + NML3IPv4LL *self; + CList reg_lst; + guint timeout_msec; +}; + +G_STATIC_ASSERT(G_STRUCT_OFFSET(NML3IPv4LLRegistration, self) == 0); + +struct _NML3IPv4LL { + NML3Cfg * l3cfg; + int ref_count; + in_addr_t addr; + guint reg_timeout_msec; + CList reg_lst_head; + NML3CfgCommitTypeHandle *l3cfg_commit_handle; + GSource * state_change_on_idle_source; + GSource * timed_out_source; + const NML3ConfigData * l3cd; + const NMPObject * plobj; + struct { + nm_le64_t value; + nm_le64_t generation; + } seed; + gint64 timed_out_expiry_msec; + gulong l3cfg_signal_notify_id; + NML3IPv4LLState state; + NMEtherAddr seed_mac; + NMEtherAddr mac; + bool seed_set : 1; + bool mac_set : 1; + bool notify_on_idle : 1; + bool reg_changed : 1; + bool l3cd_timeout_msec_changed : 1; + + /* not yet used. */ + bool seed_reset_generation : 1; +}; + +G_STATIC_ASSERT(G_STRUCT_OFFSET(NML3IPv4LL, ref_count) == sizeof(gpointer)); + +#define L3CD_TAG(self) (&(((const char *) self)[1])) + +/*****************************************************************************/ + +#define _NMLOG_DOMAIN LOGD_IP4 +#define _NMLOG_PREFIX_NAME "ipv4ll" +#define _NMLOG(level, ...) \ + G_STMT_START \ + { \ + nm_log((level), \ + (_NMLOG_DOMAIN), \ + NULL, \ + NULL, \ + _NMLOG_PREFIX_NAME "[" NM_HASH_OBFUSCATE_PTR_FMT \ + ",ifindex=%d]: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ + NM_HASH_OBFUSCATE_PTR(self), \ + nm_l3cfg_get_ifindex((self)->l3cfg) _NM_UTILS_MACRO_REST(__VA_ARGS__)); \ + } \ + G_STMT_END + +/*****************************************************************************/ + +static void _ipv4ll_state_change_on_idle(NML3IPv4LL *self); + +static void _ipv4ll_state_change(NML3IPv4LL *self, gboolean is_on_idle_handler); + +static void _ipv4ll_set_timed_out_update(NML3IPv4LL *self, TimedOutState new_state); + +/*****************************************************************************/ + +NM_UTILS_ENUM2STR_DEFINE(nm_l3_ipv4ll_state_to_string, + NML3IPv4LLState, + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_UNKNOWN, "unknown"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_DISABLED, "disabled"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_WAIT_FOR_LINK, "wait-for-link"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_EXTERNAL, "external"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_PROBING, "probing"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_DEFENDING, "defending"), + NM_UTILS_ENUM2STR(NM_L3_IPV4LL_STATE_READY, "ready"), ); + +/*****************************************************************************/ + +#define _ASSERT(self) \ + G_STMT_START \ + { \ + NML3IPv4LL *const _self = (self); \ + \ + nm_assert(NM_IS_L3_IPV4LL(_self)); \ + if (NM_MORE_ASSERTS > 5) { \ + nm_assert(_self->addr == 0u || nm_utils_ip4_address_is_link_local(_self->addr)); \ + nm_assert(!_self->l3cd || NM_IS_L3_CONFIG_DATA(_self->l3cd)); \ + } \ + } \ + G_STMT_END + +/*****************************************************************************/ + +NML3Cfg * +nm_l3_ipv4ll_get_l3cfg(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return self->l3cfg; +} + +int +nm_l3_ipv4ll_get_ifindex(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return nm_l3cfg_get_ifindex(self->l3cfg); +} + +NMPlatform * +nm_l3_ipv4ll_get_platform(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return nm_l3cfg_get_platform(self->l3cfg); +} + +/*****************************************************************************/ + +NML3IPv4LLState +nm_l3_ipv4ll_get_state(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return self->state; +} + +static gboolean +_ipv4ll_is_timed_out(NML3IPv4LL *self) +{ + _ASSERT(self); + + return self->timed_out_expiry_msec != 0 && !self->timed_out_source; +} + +gboolean +nm_l3_ipv4ll_is_timed_out(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return _ipv4ll_is_timed_out(self); +} + +in_addr_t +nm_l3_ipv4ll_get_addr(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return self->addr; +} + +const NML3ConfigData * +nm_l3_ipv4ll_get_l3cd(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + return self->l3cd; +} + +static void +_ipv4ll_emit_signal_notify(NML3IPv4LL *self) +{ + NML3ConfigNotifyData notify_data; + + self->notify_on_idle = FALSE; + + notify_data.notify_type = NM_L3_CONFIG_NOTIFY_TYPE_IPV4LL_EVENT; + notify_data.ipv4ll_event = (typeof(notify_data.ipv4ll_event)){ + .ipv4ll = self, + }; + _nm_l3cfg_emit_signal_notify(self->l3cfg, ¬ify_data); +} + +/*****************************************************************************/ + +static NML3IPv4LLRegistration * +_registration_update(NML3IPv4LL * self, + NML3IPv4LLRegistration *reg, + gboolean add, + guint timeout_msec) +{ + nm_auto_unref_l3ipv4ll NML3IPv4LL *self_unref_on_exit = NULL; + gboolean changed = FALSE; + + if (reg) { + nm_assert(!self); + _ASSERT(reg->self); + self = reg->self; + nm_assert(c_list_contains(&self->reg_lst_head, ®->reg_lst)); + nm_assert(self == nm_l3_ipv4ll_register_get_instance(reg)); + } else { + nm_assert(add); + _ASSERT(self); + } + + if (!add) { + _LOGT("registration[" NM_HASH_OBFUSCATE_PTR_FMT "]: remove", NM_HASH_OBFUSCATE_PTR(reg)); + c_list_unlink_stale(®->reg_lst); + if (c_list_is_empty(&self->reg_lst_head)) + self_unref_on_exit = self; + nm_g_slice_free(reg); + reg = NULL; + goto out; + } + + if (!reg) { + reg = g_slice_new(NML3IPv4LLRegistration); + *reg = (NML3IPv4LLRegistration){ + .self = self, + .timeout_msec = timeout_msec, + }; + + if (c_list_is_empty(&self->reg_lst_head)) + nm_l3_ipv4ll_ref(self); + c_list_link_tail(&self->reg_lst_head, ®->reg_lst); + changed = TRUE; + _LOGT("registration[" NM_HASH_OBFUSCATE_PTR_FMT "]: add (timeout_msec=%u)", + NM_HASH_OBFUSCATE_PTR(reg), + timeout_msec); + } else { + if (reg->timeout_msec != timeout_msec) { + reg->timeout_msec = timeout_msec; + changed = TRUE; + } + if (changed) { + _LOGT("registration[" NM_HASH_OBFUSCATE_PTR_FMT "]: update (timeout_msec=%u)", + NM_HASH_OBFUSCATE_PTR(reg), + timeout_msec); + } + } + +out: + if (changed) { + self->reg_changed = TRUE; + _ipv4ll_state_change(self, FALSE); + } + return reg; +} + +NML3IPv4LLRegistration * +nm_l3_ipv4ll_register_new(NML3IPv4LL *self, guint timeout_msec) +{ + return _registration_update(self, NULL, TRUE, timeout_msec); +} + +NML3IPv4LLRegistration * +nm_l3_ipv4ll_register_update(NML3IPv4LLRegistration *reg, guint timeout_msec) +{ + return _registration_update(NULL, reg, TRUE, timeout_msec); +} + +NML3IPv4LLRegistration * +nm_l3_ipv4ll_register_remove(NML3IPv4LLRegistration *reg) +{ + return _registration_update(NULL, reg, FALSE, 0); +} + +/*****************************************************************************/ + +static gboolean +_ip4_address_is_link_local(const NMPlatformIP4Address *a) +{ + nm_assert(a); + + return nm_utils_ip4_address_is_link_local(a->address) && a->plen == ADDR_IPV4LL_PREFIX_LEN + && a->address == a->peer_address; +} + +static gboolean +_acd_info_is_good(const NML3AcdAddrInfo *acd_info) +{ + if (!acd_info) + return TRUE; + + switch (acd_info->state) { + case NM_L3_ACD_ADDR_STATE_INIT: + case NM_L3_ACD_ADDR_STATE_PROBING: + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + return TRUE; + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + return FALSE; + } + nm_assert_not_reached(); + return FALSE; +} + +/*****************************************************************************/ + +static NMPlatformIP4Address * +_l3cd_config_plat_init_addr(NMPlatformIP4Address *a, int ifindex, in_addr_t addr) +{ + nm_assert(nm_utils_ip4_address_is_link_local(addr)); + + *a = (NMPlatformIP4Address){ + .ifindex = ifindex, + .address = addr, + .peer_address = addr, + .plen = ADDR_IPV4LL_PREFIX_LEN, + .addr_source = NM_IP_CONFIG_SOURCE_IP4LL, + }; + return a; +} + +static NMPlatformIP4Route * +_l3cd_config_plat_init_route(NMPlatformIP4Route *r, int ifindex) +{ + *r = (NMPlatformIP4Route){ + .ifindex = ifindex, + .network = htonl(0xE0000000u), + .plen = 4, + .rt_source = NM_IP_CONFIG_SOURCE_IP4LL, + .table_any = TRUE, + .metric_any = TRUE, + }; + return r; +} + +static const NML3ConfigData * +_l3cd_config_create(int ifindex, in_addr_t addr, NMDedupMultiIndex *multi_idx) +{ + nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL; + NMPlatformIP4Address a; + NMPlatformIP4Route r; + + nm_assert(nm_utils_ip4_address_is_link_local(addr)); + nm_assert(ifindex > 0); + nm_assert(multi_idx); + + l3cd = nm_l3_config_data_new(multi_idx, ifindex); + nm_l3_config_data_set_source(l3cd, NM_IP_CONFIG_SOURCE_IP4LL); + + nm_l3_config_data_add_address_4(l3cd, _l3cd_config_plat_init_addr(&a, ifindex, addr)); + nm_l3_config_data_add_route_4(l3cd, _l3cd_config_plat_init_route(&r, ifindex)); + + return nm_l3_config_data_seal(g_steal_pointer(&l3cd)); +} + +static in_addr_t +_l3cd_config_get_addr(const NML3ConfigData *l3cd) +{ + NMDedupMultiIter iter; + const NMPlatformIP4Address *pladdr; + + if (!l3cd) + return 0u; + + nm_l3_config_data_iter_ip4_address_for_each (&iter, l3cd, &pladdr) { + const in_addr_t addr = pladdr->address; + + nm_assert(_ip4_address_is_link_local(pladdr)); +#if NM_MORE_ASSERTS > 10 + { + nm_auto_unref_l3cd const NML3ConfigData *l3cd2 = NULL; + + l3cd2 = _l3cd_config_create(nm_l3_config_data_get_ifindex(l3cd), + addr, + nm_l3_config_data_get_multi_idx(l3cd)); + nm_assert(nm_l3_config_data_equal(l3cd2, l3cd)); + } +#endif + return addr; + } + + return nm_assert_unreachable_val(0u); +} + +/*****************************************************************************/ + +static void +_ipv4ll_addrgen(NML3IPv4LL *self, gboolean generate_new_addr) +{ + CSipHash state; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + gboolean seed_changed = FALSE; + in_addr_t addr_new; + guint64 h; + + _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}) + + 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). + * This is also what previous versions of NetworkManager did (whenn using sd_ipv4ll). + * + * On the other hand, systemd-networkd uses net_get_name_persistent() of the device + * mixed with /etc/machine-id. + * + * See also: https://tools.ietf.org/html/rfc3927#section-2.1 + * + * FIXME(l3cfg): At this point, maybe we should also mix it with nm_utils_host_id_get(). + * This would get the behavior closer to what systemd-networkd does. + * Don't do that for now, because it would be a change in behavior compared + * to earlier versions of NetworkManager. */ + + c_siphash_init(&state, MAC_HASH_KEY); + c_siphash_append(&state, self->mac.ether_addr_octet, ETH_ALEN); + h = c_siphash_finalize(&state); + + _LOGT("addr-gen: %sset seed (for " NM_ETHER_ADDR_FORMAT_STR ")", + self->seed_set ? "re" : "", + NM_ETHER_ADDR_FORMAT_VAL(&self->mac)); + + self->seed_set = TRUE; + self->seed_mac = self->mac; + self->seed.generation = htole64(0); + self->seed.value = htole64(h); + self->seed_reset_generation = FALSE; + self->addr = 0u; + + seed_changed = TRUE; + } + + if (!self->seed_set) { + /* we have no seed set (and consequently no MAC address set either). + * We cannot generate an address. */ + nm_assert(self->addr == 0u); + return; + } + + nm_assert(seed_changed || self->seed.generation != htole64(0u)); + + if (self->seed_reset_generation) { + _LOGT("addr-gen: reset seed (generation only)"); + self->seed.generation = htole64(0); + self->addr = 0u; + seed_changed = TRUE; + } + + if (!seed_changed && !generate_new_addr) { + /* neither did the caller request a new address, nor was the seed changed. The current + * address is still to be used. */ + nm_assert(nm_utils_ip4_address_is_link_local(self->addr)); + return; + } + +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}) + + h = c_siphash_hash(PICK_HASH_KEY, (const guint8 *) &self->seed, sizeof(self->seed)); + + self->seed.generation = htole64(le64toh(self->seed.generation) + 1u); + + addr_new = htonl(h & UINT32_C(0x0000FFFF)) | NM_IPV4LL_NETWORK; + + if (self->addr == addr_new || NM_IN_SET(ntohl(addr_new) & 0x0000FF00u, 0x0000u, 0xFF00u)) + goto gen_addr; + + nm_assert(nm_utils_ip4_address_is_link_local(addr_new)); + + _LOGT("addr-gen: set address %s", _nm_utils_inet4_ntop(addr_new, sbuf_addr)); + self->addr = addr_new; +} + +/*****************************************************************************/ + +static void +_ipv4ll_update_link(NML3IPv4LL *self, const NMPObject *plobj) +{ + char sbuf[ETH_ALEN * 3]; + nm_auto_nmpobj const NMPObject *pllink_old = NULL; + const NMEtherAddr * mac_new; + gboolean changed; + + if (self->plobj == plobj) + return; + + pllink_old = g_steal_pointer(&self->plobj); + self->plobj = nmp_object_ref(plobj); + + mac_new = NULL; + if (plobj) { + const NMPlatformLink *pllink = NMP_OBJECT_CAST_LINK(plobj); + + if (pllink->l_address.len == ETH_ALEN) + mac_new = &pllink->l_address.ether_addr; + } + + changed = FALSE; + if (!mac_new) { + if (self->mac_set) { + changed = TRUE; + self->mac_set = FALSE; + } + } else { + if (!self->mac_set || !nm_ether_addr_equal(mac_new, &self->mac)) { + changed = TRUE; + self->mac_set = TRUE; + self->mac = *mac_new; + } + } + + if (changed) { + _LOGT("mac changed: %s", + self->mac_set ? _nm_utils_hwaddr_ntoa(&self->mac, ETH_ALEN, TRUE, sbuf, sizeof(sbuf)) + : "unset"); + } +} + +/*****************************************************************************/ + +static void +_l3cd_config_add(NML3IPv4LL *self) +{ + nm_auto_unref_l3cd const NML3ConfigData *l3cd = NULL; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + gboolean changed; + + _ASSERT(self); + nm_assert(self->addr != 0u); + nm_assert(self->reg_timeout_msec > 0u); + + if (_l3cd_config_get_addr(self->l3cd) != self->addr) { + l3cd = _l3cd_config_create(nm_l3_ipv4ll_get_ifindex(self), + self->addr, + nm_l3cfg_get_multi_idx(self->l3cfg)); + nm_assert(!nm_l3_config_data_equal(l3cd, self->l3cd)); + changed = TRUE; + } else + changed = FALSE; + + if (!changed && !self->l3cd_timeout_msec_changed) + return; + + self->l3cd_timeout_msec_changed = FALSE; + + _LOGT("add l3cd config with %s (acd-timeout %u msec%s)", + _nm_utils_inet4_ntop(self->addr, sbuf_addr), + self->reg_timeout_msec, + changed ? "" : " changed"); + + if (changed) { + NM_SWAP(&l3cd, &self->l3cd); + self->notify_on_idle = TRUE; + } + + if (!nm_l3cfg_add_config(self->l3cfg, + L3CD_TAG(self), + TRUE, + self->l3cd, + NM_L3CFG_CONFIG_PRIORITY_IPV4LL, + 0, + 0, + NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4, + NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6, + 0, + 0, + NM_L3_ACD_DEFEND_TYPE_ONCE, + self->reg_timeout_msec, + NM_L3_CONFIG_MERGE_FLAGS_ONLY_FOR_ACD)) + nm_assert_not_reached(); + + self->l3cfg_commit_handle = nm_l3cfg_commit_type_register(self->l3cfg, + NM_L3_CFG_COMMIT_TYPE_ASSUME, + self->l3cfg_commit_handle); + nm_l3cfg_commit_on_idle_schedule(self->l3cfg); +} + +static gboolean +_l3cd_config_remove(NML3IPv4LL *self) +{ + nm_auto_unref_l3cd const NML3ConfigData *l3cd = NULL; + + nm_assert(NM_IS_L3_IPV4LL(self)); + + if (!self->l3cd) + return FALSE; + + _LOGT("remove l3cd config"); + + self->notify_on_idle = TRUE; + + l3cd = g_steal_pointer(&self->l3cd); + if (!nm_l3cfg_remove_config(self->l3cfg, L3CD_TAG(self), l3cd)) + nm_assert_not_reached(); + + nm_l3cfg_commit_type_unregister(self->l3cfg, g_steal_pointer(&self->l3cfg_commit_handle)); + nm_l3cfg_commit_on_idle_schedule(self->l3cfg); + return TRUE; +} + +/*****************************************************************************/ + +static const NMPlatformIP4Address * +_ipv4ll_platform_ip4_address_lookup(NML3IPv4LL *self, in_addr_t addr) +{ + const NMPlatformIP4Address *pladdr; + + if (addr == 0u) + return NULL; + + nm_assert(nm_utils_ip4_address_is_link_local(addr)); + + pladdr = nm_platform_ip4_address_get(nm_l3_ipv4ll_get_platform(self), + nm_l3_ipv4ll_get_ifindex(self), + addr, + ADDR_IPV4LL_PREFIX_LEN, + addr); + + nm_assert(!pladdr || pladdr->address == addr); + nm_assert(!pladdr || _ip4_address_is_link_local(pladdr)); + return pladdr; +} + +static const NML3AcdAddrInfo * +_ipv4ll_l3cfg_get_acd_addr_info(NML3IPv4LL *self, in_addr_t addr) +{ + if (addr == 0u) + return NULL; + + nm_assert(nm_utils_ip4_address_is_link_local(addr)); + return nm_l3cfg_get_acd_addr_info(self->l3cfg, addr); +} + +static const NMPlatformIP4Address * +_ipv4ll_platform_find_addr(NML3IPv4LL *self, const NML3AcdAddrInfo **out_acd_info) +{ + const NMPlatformIP4Address *addr_without_acd_info = NULL; + NMDedupMultiIter iter; + NMPLookup lookup; + const NMPObject * obj; + const NML3AcdAddrInfo * acd_info; + const NMPlatformIP4Address *addr; + + nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP4_ADDRESS, nm_l3_ipv4ll_get_ifindex(self)); + nm_platform_iter_obj_for_each (&iter, nm_l3_ipv4ll_get_platform(self), &lookup, &obj) { + addr = NMP_OBJECT_CAST_IP4_ADDRESS(obj); + if (!_ip4_address_is_link_local(addr)) + continue; + + acd_info = _ipv4ll_l3cfg_get_acd_addr_info(self, addr->address); + if (!_acd_info_is_good(acd_info)) + continue; + + if (acd_info) { + /* We have a good acd_info. We won't find a better one. Return it. */ + NM_SET_OUT(out_acd_info, acd_info); + return addr; + } + + if (!addr_without_acd_info) { + /* remember a potential candidate address that has no acd_info. */ + addr_without_acd_info = addr; + } + } + + if (addr_without_acd_info) { + NM_SET_OUT(out_acd_info, NULL); + return addr_without_acd_info; + } + + return NULL; +} + +/*****************************************************************************/ + +static gboolean +_ipv4ll_set_timed_out_timeout_cb(gpointer user_data) +{ + NML3IPv4LL *self = user_data; + + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_IS_TIMED_OUT); + if (self->notify_on_idle) + _ipv4ll_emit_signal_notify(self); + return G_SOURCE_REMOVE; +} + +static void +_ipv4ll_set_timed_out_update(NML3IPv4LL *self, TimedOutState new_state) +{ + gboolean before; + + before = _ipv4ll_is_timed_out(self); + + switch (new_state) { + case TIMED_OUT_STATE_IS_TIMED_OUT: + if (self->timed_out_expiry_msec == 0) { + nm_assert(!self->timed_out_source); + self->timed_out_expiry_msec = 1; + } + nm_clear_g_source_inst(&self->timed_out_source); + break; + case TIMED_OUT_STATE_IS_NOT_TIMED_OUT: + self->timed_out_expiry_msec = 0; + nm_clear_g_source_inst(&self->timed_out_source); + break; + case TIMED_OUT_STATE_HAVE_TIMER_RUNNING: + { + gint64 now_msec = nm_utils_get_monotonic_timestamp_msec(); + guint timeout_msec; + gint64 expiry_msec; + + nm_assert(self->reg_timeout_msec > 0u); + + timeout_msec = nm_mult_clamped_u(TIMED_OUT_TIME_FACTOR, self->reg_timeout_msec); + expiry_msec = now_msec + timeout_msec; + + if (self->timed_out_expiry_msec == 0 || self->timed_out_expiry_msec < expiry_msec) { + self->timed_out_expiry_msec = expiry_msec; + nm_clear_g_source_inst(&self->timed_out_source); + self->timed_out_source = nm_g_timeout_source_new(timeout_msec, + G_PRIORITY_DEFAULT, + _ipv4ll_set_timed_out_timeout_cb, + self, + NULL); + g_source_attach(self->timed_out_source, NULL); + } + break; + } + } + + if (before != _ipv4ll_is_timed_out(self)) { + self->notify_on_idle = TRUE; + _LOGT("state: set timed-out-is-bad=%d", (!before)); + } +} + +static gboolean +_ipv4ll_set_state(NML3IPv4LL *self, NML3IPv4LLState state) +{ + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + char sbuf100[100]; + + if (self->state == state) + return FALSE; + self->state = state; + self->notify_on_idle = TRUE; + _LOGT("state: set state %s (addr=%s)", + nm_l3_ipv4ll_state_to_string(state, sbuf100, sizeof(sbuf100)), + _nm_utils_inet4_ntop(self->addr, sbuf_addr)); + return TRUE; +} + +static void +_ipv4ll_state_change(NML3IPv4LL *self, gboolean is_on_idle_handler) +{ + nm_auto_unref_l3ipv4ll NML3IPv4LL *self_keep_alive = NULL; + const NMPlatformIP4Address * pladdr; + const NML3AcdAddrInfo * acd_info; + gboolean generate_new_addr; + NML3IPv4LLState new_state; + in_addr_t addr0; + NML3IPv4LLRegistration * reg; + + _ASSERT(self); + + self_keep_alive = nm_l3_ipv4ll_ref(self); + + nm_clear_g_source_inst(&self->state_change_on_idle_source); + + addr0 = self->addr; + + if (self->reg_changed) { + guint timeout_msec = self->reg_timeout_msec; + + self->reg_changed = FALSE; + + if (c_list_is_empty(&self->reg_lst_head)) + timeout_msec = 0; + else { + timeout_msec = G_MAXUINT; + c_list_for_each_entry (reg, &self->reg_lst_head, reg_lst) { + if (reg->timeout_msec < timeout_msec) + timeout_msec = reg->timeout_msec; + if (reg->timeout_msec == 0) + break; + } + } + if (self->reg_timeout_msec != timeout_msec) { + self->reg_timeout_msec = timeout_msec; + self->l3cd_timeout_msec_changed = TRUE; + } + } + + if (self->reg_timeout_msec == 0) { + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_IS_NOT_TIMED_OUT); + if (_ipv4ll_set_state(self, NM_L3_IPV4LL_STATE_DISABLED)) + _l3cd_config_remove(self); + goto out_notify; + } + + if (!self->mac_set) { + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_HAVE_TIMER_RUNNING); + if (_ipv4ll_set_state(self, NM_L3_IPV4LL_STATE_WAIT_FOR_LINK)) + _l3cd_config_remove(self); + else + nm_assert(!self->l3cd); + goto out_notify; + } + + if (self->state <= NM_L3_IPV4LL_STATE_EXTERNAL) { + pladdr = _ipv4ll_platform_ip4_address_lookup(self, self->addr); + if (pladdr) { + if (!_acd_info_is_good(_ipv4ll_l3cfg_get_acd_addr_info(self, self->addr))) + pladdr = NULL; + } + if (!pladdr) + pladdr = _ipv4ll_platform_find_addr(self, NULL); + + if (pladdr) { + /* we have an externally configured address. Check whether we can use it. */ + self->addr = pladdr->address; + self->notify_on_idle = TRUE; + _ipv4ll_set_state(self, NM_L3_IPV4LL_STATE_EXTERNAL); + _l3cd_config_add(self); + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_IS_NOT_TIMED_OUT); + goto out_notify; + } + } + + generate_new_addr = FALSE; + while (TRUE) { + _ipv4ll_addrgen(self, generate_new_addr); + acd_info = _ipv4ll_l3cfg_get_acd_addr_info(self, self->addr); + if (_acd_info_is_good(acd_info)) + break; + generate_new_addr = TRUE; + } + + nm_assert(_acd_info_is_good(acd_info)); + switch (acd_info ? acd_info->state : NM_L3_ACD_ADDR_STATE_INIT) { + case NM_L3_ACD_ADDR_STATE_INIT: + case NM_L3_ACD_ADDR_STATE_PROBING: + new_state = NM_L3_IPV4LL_STATE_PROBING; + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_HAVE_TIMER_RUNNING); + goto out_is_good_1; + case NM_L3_ACD_ADDR_STATE_READY: + new_state = NM_L3_IPV4LL_STATE_READY; + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_HAVE_TIMER_RUNNING); + goto out_is_good_1; + case NM_L3_ACD_ADDR_STATE_DEFENDING: + new_state = NM_L3_IPV4LL_STATE_DEFENDING; + _ipv4ll_set_timed_out_update(self, TIMED_OUT_STATE_IS_NOT_TIMED_OUT); + goto out_is_good_1; + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + nm_assert_not_reached(); + goto out_notify; + } + nm_assert_not_reached(); + goto out_notify; +out_is_good_1: + _ipv4ll_set_state(self, new_state); + _l3cd_config_add(self); + if (self->addr != addr0) + self->notify_on_idle = TRUE; + goto out_notify; + +out_notify: + if (self->notify_on_idle) { + if (is_on_idle_handler) + _ipv4ll_emit_signal_notify(self); + else + _ipv4ll_state_change_on_idle(self); + } +} + +static gboolean +_ipv4ll_state_change_on_idle_cb(gpointer user_data) +{ + NML3IPv4LL *self = user_data; + + _ipv4ll_state_change(self, TRUE); + return G_SOURCE_REMOVE; +} + +static void +_ipv4ll_state_change_on_idle(NML3IPv4LL *self) +{ + nm_assert(NM_IS_L3_IPV4LL(self)); + + if (!self->state_change_on_idle_source) { + self->state_change_on_idle_source = + nm_g_idle_source_new(G_PRIORITY_DEFAULT, _ipv4ll_state_change_on_idle_cb, self, NULL); + g_source_attach(self->state_change_on_idle_source, NULL); + } +} + +/*****************************************************************************/ + +static void +_l3cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NML3IPv4LL *self) +{ + if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE) { + /* NMl3Cfg only reloads the platform link during the idle handler. Pick it up now. */ + _ipv4ll_update_link(self, nm_l3cfg_get_plobj(l3cfg, FALSE)); + + /* theoretically, this even is already on an idle handler. However, we share + * the call with other signal handlers, so at this point we don't want to + * emit additional signals. Thus pass %FALSE to _ipv4ll_state_change(). */ + _ipv4ll_state_change(self, FALSE); + return; + } + + if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT) { + if (self->l3cd + && nm_l3_acd_addr_info_find_track_info(¬ify_data->acd_event.info, + L3CD_TAG(self), + self->l3cd, + NULL)) { + _ipv4ll_state_change(self, FALSE); + } + return; + } +} + +/*****************************************************************************/ + +NML3IPv4LL * +nm_l3_ipv4ll_new(NML3Cfg *l3cfg) +{ + NML3IPv4LL *self; + + g_return_val_if_fail(NM_IS_L3CFG(l3cfg), NULL); + + self = g_slice_new(NML3IPv4LL); + *self = (NML3IPv4LL){ + .l3cfg = g_object_ref(l3cfg), + .ref_count = 1, + .reg_lst_head = C_LIST_INIT(self->reg_lst_head), + .l3cfg_commit_handle = NULL, + .state_change_on_idle_source = NULL, + .l3cd = NULL, + .plobj = NULL, + .addr = 0u, + .state = NM_L3_IPV4LL_STATE_DISABLED, + .reg_timeout_msec = 0, + .notify_on_idle = TRUE, + .l3cfg_signal_notify_id = + g_signal_connect(l3cfg, NM_L3CFG_SIGNAL_NOTIFY, G_CALLBACK(_l3cfg_notify_cb), self), + .seed_set = FALSE, + .seed_reset_generation = FALSE, + }; + + _LOGT("created: l3cfg=" NM_HASH_OBFUSCATE_PTR_FMT, NM_HASH_OBFUSCATE_PTR(l3cfg)); + + _ipv4ll_update_link(self, nm_l3cfg_get_plobj(l3cfg, FALSE)); + _ipv4ll_state_change(self, FALSE); + return self; +} + +NML3IPv4LL * +nm_l3_ipv4ll_ref(NML3IPv4LL *self) +{ + if (!self) + return NULL; + + _ASSERT(self); + + nm_assert(self->ref_count < G_MAXINT); + self->ref_count++; + return self; +} + +void +nm_l3_ipv4ll_unref(NML3IPv4LL *self) +{ + if (!self) + return; + + _ASSERT(self); + + if (--self->ref_count > 0) + return; + + if (nm_l3cfg_get_ipv4ll(self->l3cfg) == self) + _nm_l3cfg_unregister_ipv4ll(self->l3cfg); + + _LOGT("finalize"); + + nm_assert(c_list_is_empty(&self->reg_lst_head)); + + if (self->l3cd) { + nm_auto_unref_l3cd const NML3ConfigData *l3cd = NULL; + + l3cd = g_steal_pointer(&self->l3cd); + if (!nm_l3cfg_remove_config(self->l3cfg, L3CD_TAG(self), l3cd)) + nm_assert_not_reached(); + + nm_l3cfg_commit_type_unregister(self->l3cfg, g_steal_pointer(&self->l3cfg_commit_handle)); + nm_l3cfg_commit_on_idle_schedule(self->l3cfg); + } else + nm_assert(!self->l3cfg_commit_handle); + + nm_clear_g_source_inst(&self->state_change_on_idle_source); + nm_clear_g_source_inst(&self->timed_out_source); + + nm_clear_g_signal_handler(self->l3cfg, &self->l3cfg_signal_notify_id); + + g_clear_object(&self->l3cfg); + nmp_object_unref(self->plobj); + nm_g_slice_free(self); +} diff --git a/src/nm-l3-ipv4ll.h b/src/nm-l3-ipv4ll.h new file mode 100644 index 0000000000..4509f95c4f --- /dev/null +++ b/src/nm-l3-ipv4ll.h @@ -0,0 +1,118 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ + +#ifndef __NM_L3_IPV4LL_H__ +#define __NM_L3_IPV4LL_H__ + +#include "nm-l3cfg.h" + +/*****************************************************************************/ + +typedef enum _nm_packed { + NM_L3_IPV4LL_STATE_UNKNOWN, + NM_L3_IPV4LL_STATE_DISABLED, + NM_L3_IPV4LL_STATE_WAIT_FOR_LINK, + NM_L3_IPV4LL_STATE_EXTERNAL, + NM_L3_IPV4LL_STATE_PROBING, + NM_L3_IPV4LL_STATE_READY, + NM_L3_IPV4LL_STATE_DEFENDING, +} NML3IPv4LLState; + +const char *nm_l3_ipv4ll_state_to_string(NML3IPv4LLState val, char *buf, gsize len); + +static inline gboolean +nm_l3_ipv4ll_state_is_good(NML3IPv4LLState state) +{ + switch (state) { + case NM_L3_IPV4LL_STATE_UNKNOWN: + case NM_L3_IPV4LL_STATE_DISABLED: + case NM_L3_IPV4LL_STATE_WAIT_FOR_LINK: + case NM_L3_IPV4LL_STATE_PROBING: + return FALSE; + case NM_L3_IPV4LL_STATE_EXTERNAL: + case NM_L3_IPV4LL_STATE_READY: + case NM_L3_IPV4LL_STATE_DEFENDING: + return TRUE; + } + return nm_assert_unreachable_val(FALSE); +} + +/*****************************************************************************/ + +typedef struct _NML3IPv4LL NML3IPv4LL; + +static inline gboolean +NM_IS_L3_IPV4LL(const NML3IPv4LL *self) +{ + nm_assert(!self + || (NM_IS_L3CFG(*((NML3Cfg **) self)) + && (*((int *) (((char *) self) + sizeof(gpointer)))) > 0)); + return !!self; +} + +NML3IPv4LL *nm_l3_ipv4ll_new(NML3Cfg *self); + +NML3IPv4LL *nm_l3_ipv4ll_ref(NML3IPv4LL *self); +void nm_l3_ipv4ll_unref(NML3IPv4LL *self); + +NM_AUTO_DEFINE_FCN0(NML3IPv4LL *, _nm_auto_unref_l3ipv4ll, nm_l3_ipv4ll_unref); +#define nm_auto_unref_l3ipv4ll nm_auto(_nm_auto_unref_l3ipv4ll) + +/*****************************************************************************/ + +NML3Cfg *nm_l3_ipv4ll_get_l3cfg(NML3IPv4LL *self); + +int nm_l3_ipv4ll_get_ifindex(NML3IPv4LL *self); + +NMPlatform *nm_l3_ipv4ll_get_platform(NML3IPv4LL *self); + +/*****************************************************************************/ + +/* By default, NML3IPv4LL is disabled. You also need to register (enable) it. + * The intent of this API is that multiple users can enable/register their own + * settings, and NML3IPv4LL will mediate the different requests. + * + * Also, by setting timeout_msec to zero, NML3IPv4LL is disabled again (zero + * wins over all timeouts). This is useful if you do DHCP and IPv4LL on the + * same interface. You possibly want to disable IPv4LL if you have a valid + * DHCP lease. By registering a timeout_msec to zero, you can disable IPv4LL. + * + * Also, a registration keeps the NML3IPv4LL instance alive (it also takes + * a reference). */ + +typedef struct _NML3IPv4LLRegistration NML3IPv4LLRegistration; + +NML3IPv4LLRegistration *nm_l3_ipv4ll_register_new(NML3IPv4LL *self, guint timeout_msec); + +NML3IPv4LLRegistration *nm_l3_ipv4ll_register_update(NML3IPv4LLRegistration *reg, + guint timeout_msec); + +NML3IPv4LLRegistration *nm_l3_ipv4ll_register_remove(NML3IPv4LLRegistration *reg); + +NM_AUTO_DEFINE_FCN0(NML3IPv4LLRegistration *, + _nm_auto_remove_l3ipv4ll_registration, + nm_l3_ipv4ll_register_remove); +#define nm_auto_remove_l3ipv4ll_registration nm_auto(_nm_auto_remove_l3ipv4ll_registration) + +static inline NML3IPv4LL * +nm_l3_ipv4ll_register_get_instance(NML3IPv4LLRegistration *reg) +{ + NML3IPv4LL *ipv4ll; + + if (!reg) + return NULL; + ipv4ll = *((NML3IPv4LL **) reg); + nm_assert(NM_IS_L3_IPV4LL(ipv4ll)); + return ipv4ll; +} + +/*****************************************************************************/ + +NML3IPv4LLState nm_l3_ipv4ll_get_state(NML3IPv4LL *self); + +gboolean nm_l3_ipv4ll_is_timed_out(NML3IPv4LL *self); + +in_addr_t nm_l3_ipv4ll_get_addr(NML3IPv4LL *self); + +const NML3ConfigData *nm_l3_ipv4ll_get_l3cd(NML3IPv4LL *self); + +#endif /* __NM_L3_IPV4LL_H__ */ diff --git a/src/nm-l3cfg.c b/src/nm-l3cfg.c index 7b1e6f22d5..de5f80e5a2 100644 --- a/src/nm-l3cfg.c +++ b/src/nm-l3cfg.c @@ -12,17 +12,21 @@ #include "platform/nmp-object.h" #include "nm-netns.h" #include "n-acd/src/n-acd.h" +#include "nm-l3-ipv4ll.h" /*****************************************************************************/ +G_STATIC_ASSERT(NM_ACD_TIMEOUT_RFC5227_MSEC == N_ACD_TIMEOUT_RFC5227); + #define ACD_SUPPORTED_ETH_ALEN ETH_ALEN #define ACD_ENSURE_RATELIMIT_MSEC ((guint32) 4000u) #define ACD_WAIT_PROBING_EXTRA_TIME_MSEC ((guint32)(1000u + ACD_ENSURE_RATELIMIT_MSEC)) #define ACD_WAIT_PROBING_EXTRA_TIME2_MSEC ((guint32) 1000u) -#define ACD_WAIT_PROBING_RESTART_TIME_MSEC ((guint32) 8000u) #define ACD_MAX_TIMEOUT_MSEC ((guint32) 30000u) #define ACD_WAIT_TIME_PROBING_FULL_RESTART_MSEC ((guint32) 30000u) -#define ACD_WAIT_TIME_ANNOUNCE_RESTART_MSEC ((guint32) 20000u) +#define ACD_WAIT_TIME_CONFLICT_RESTART_MSEC ((guint32) 120000u) +#define ACD_WAIT_TIME_ANNOUNCE_RESTART_MSEC ((guint32) 30000u) +#define ACD_DEFENDCONFLICT_INFO_RATELIMIT_MSEC ((guint32) 30000u) static gboolean ACD_ADDR_SKIP(in_addr_t addr) @@ -39,13 +43,16 @@ ACD_ADDR_SKIP(in_addr_t addr) ACD_TRACK_PTR2((acd_track)->l3cd, (acd_track)->obj, (acd_track)->tag) typedef enum { - ACD_STATE_CHANGE_MODE_INIT, + ACD_STATE_CHANGE_MODE_NACD_CONFLICT = N_ACD_EVENT_CONFLICT, + ACD_STATE_CHANGE_MODE_NACD_DEFENDED = N_ACD_EVENT_DEFENDED, + ACD_STATE_CHANGE_MODE_NACD_DOWN = N_ACD_EVENT_DOWN, + ACD_STATE_CHANGE_MODE_NACD_READY = N_ACD_EVENT_READY, + ACD_STATE_CHANGE_MODE_NACD_USED = N_ACD_EVENT_USED, + + ACD_STATE_CHANGE_MODE_INIT = _N_ACD_EVENT_N, + ACD_STATE_CHANGE_MODE_INIT_REAPPLY, ACD_STATE_CHANGE_MODE_POST_COMMIT, - ACD_STATE_CHANGE_MODE_NACD_READY, - ACD_STATE_CHANGE_MODE_NACD_USED, - ACD_STATE_CHANGE_MODE_NACD_DOWN, - ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED, ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED, ACD_STATE_CHANGE_MODE_LINK_NOW_UP, @@ -53,57 +60,41 @@ typedef enum { ACD_STATE_CHANGE_MODE_TIMEOUT, } AcdStateChangeMode; -typedef struct { - CList acd_track_lst; - const NMPObject * obj; - const NML3ConfigData *l3cd; - gconstpointer tag; - guint32 acd_timeout_msec; - bool acd_dirty : 1; - bool acd_failed_notified : 1; -} AcdTrackData; - -typedef enum _nm_packed { - ACD_STATE_INIT, - ACD_STATE_PROBING, - ACD_STATE_PROBE_DONE, - ACD_STATE_ANNOUNCING, -} AcdState; +G_STATIC_ASSERT(G_STRUCT_OFFSET(NML3AcdAddrInfo, addr) == 0); typedef struct { - in_addr_t addr; - - /* This is only relevant while in state ACD_STATE_PROBING. It's the - * duration for how long we probe, and @probing_timestamp_msec is the - * timestamp when we start probing. */ - guint32 probing_timeout_msec; + NML3AcdAddrInfo info; CList acd_lst; - CList acd_notify_complete_lst; - CList acd_track_lst_head; - - NML3Cfg *self; + CList acd_event_notify_lst; NAcdProbe *nacd_probe; - GSource *acd_timeout_source; - gint64 acd_timeout_expiry_msec; + GSource *acd_data_timeout_source; /* see probing_timeout_msec. */ gint64 probing_timestamp_msec; - /* the ACD state for this address. */ - AcdState acd_state; + gint64 last_defendconflict_timestamp_msec; + + guint n_track_infos_alloc; + + /* This is only relevant while in state NM_L3_ACD_ADDR_STATE_PROBING. It's the + * duration for how long we probe, and @probing_timestamp_msec is the + * timestamp when we start probing. */ + guint32 probing_timeout_msec; - /* The probe result. This is only relevant if @acd_state is ACD_STATE_PROBE_DONE. - * In state ACD_STATE_ANNOUNCING the @probe_result must be TRUE. */ - bool probe_result : 1; + NMEtherAddr last_conflict_addr; - bool announcing_failed_is_retrying : 1; + NML3AcdDefendType acd_defend_type_desired : 3; + NML3AcdDefendType acd_defend_type_current : 3; + bool acd_defend_type_is_active : 1; - bool initializing : 1; + bool track_infos_changed : 1; } AcdData; +G_STATIC_ASSERT(G_STRUCT_OFFSET(AcdData, info.addr) == 0); + struct _NML3CfgCommitTypeHandle { CList commit_type_lst; NML3CfgCommitType commit_type; @@ -133,11 +124,12 @@ typedef struct { }; guint32 default_route_penalty_x[2]; }; - gconstpointer tag; - guint64 pseudo_timestamp; - int priority; - guint32 acd_timeout_msec; - bool dirty : 1; + gconstpointer tag_confdata; + guint64 pseudo_timestamp_confdata; + int priority_confdata; + guint32 acd_timeout_msec_confdata; + NML3AcdDefendType acd_defend_type_confdata : 3; + bool dirty_confdata : 1; } L3ConfigData; /*****************************************************************************/ @@ -155,6 +147,8 @@ typedef struct _NML3CfgPrivate { GArray *property_emit_list; GArray *l3_config_datas; + NML3IPv4LL *ipv4ll; + const NML3ConfigData *combined_l3cd_merged; const NML3ConfigData *combined_l3cd_commited; @@ -170,11 +164,14 @@ typedef struct _NML3CfgPrivate { GHashTable *acd_lst_hash; CList acd_lst_head; - CList acd_notify_complete_lst_head; + CList acd_event_notify_lst_head; NAcd * nacd; GSource *nacd_source; + GSource *nacd_event_down_source; + gint64 nacd_event_down_ratelimited_until_msec; + /* This is for rate-limiting the creation of nacd instance. */ GSource *nacd_instance_ensure_retry; @@ -198,16 +195,35 @@ typedef struct _NML3CfgPrivate { guint externally_removed_objs_cnt_routes_x[2]; }; + union { + struct { + GPtrArray *last_addresses_6; + GPtrArray *last_addresses_4; + }; + GPtrArray *last_addresses_x[2]; + }; + + union { + struct { + GPtrArray *last_routes_6; + GPtrArray *last_routes_4; + }; + GPtrArray *last_routes_x[2]; + }; + guint routes_temporary_not_available_id; + gint8 commit_reentrant_count; + bool commit_type_update_sticky : 1; bool acd_is_pending : 1; - bool acd_is_announcing : 1; bool nacd_acd_not_supported : 1; bool acd_ipv4_addresses_on_link_has : 1; + bool changed_configs_configs : 1; + bool changed_configs_acd_state : 1; } NML3CfgPrivate; struct _NML3CfgClass { @@ -234,15 +250,16 @@ G_DEFINE_TYPE(NML3Cfg, nm_l3cfg, G_TYPE_OBJECT) } \ G_STMT_END -#define _LOGT_acd(acd_data, ...) \ - G_STMT_START \ - { \ - char _sbuf_acd[NM_UTILS_INET_ADDRSTRLEN]; \ - \ - _LOGT("acd[%s]: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ - _nm_utils_inet4_ntop((acd_data)->addr, _sbuf_acd) \ - _NM_UTILS_MACRO_REST(__VA_ARGS__)); \ - } \ +#define _LOGT_acd(acd_data, ...) \ + G_STMT_START \ + { \ + char _sbuf_acd[NM_UTILS_INET_ADDRSTRLEN]; \ + \ + _LOGT("acd[%s, %s]: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \ + _nm_utils_inet4_ntop((acd_data)->info.addr, _sbuf_acd), \ + _l3_acd_addr_state_to_string((acd_data)->info.state) \ + _NM_UTILS_MACRO_REST(__VA_ARGS__)); \ + } \ G_STMT_END /*****************************************************************************/ @@ -251,7 +268,7 @@ static void _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is static void _property_emit_notify(NML3Cfg *self, NML3CfgPropertyEmitType emit_type); -static void _l3_acd_data_notify_acd_completed_all(NML3Cfg *self); +static void _nm_l3cfg_emit_signal_notify_acd_event_all(NML3Cfg *self); static gboolean _acd_has_valid_link(const NMPObject *obj, const guint8 ** out_addr_bin, @@ -260,12 +277,11 @@ static gboolean _acd_has_valid_link(const NMPObject *obj, static void _l3_acd_nacd_instance_reset(NML3Cfg *self, NMTernary start_timer, gboolean acd_data_notify); -static void _l3_acd_data_prune(NML3Cfg *self, gboolean all); - static void _l3_acd_data_state_change(NML3Cfg * self, AcdData * acd_data, AcdStateChangeMode mode, - NAcdEvent * event); + const NMEtherAddr *sender, + gint64 * p_now_msec); static AcdData *_l3_acd_data_find(NML3Cfg *self, in_addr_t addr); @@ -282,7 +298,8 @@ static NM_UTILS_ENUM2STR_DEFINE(_l3_cfg_commit_type_to_string, static NM_UTILS_ENUM2STR_DEFINE( _l3_config_notify_type_to_string, NML3ConfigNotifyType, - NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED, "acd-complete"), + NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT, "acd-event"), + NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_IPV4LL_EVENT, "ipv4ll-event"), NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE, "platform-change"), NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE, "platform-change-on-idle"), NM_UTILS_ENUM2STR(NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT, "post-commit"), @@ -290,6 +307,36 @@ static NM_UTILS_ENUM2STR_DEFINE( "routes-temporary-not-available-expired"), NM_UTILS_ENUM2STR_IGNORE(_NM_L3_CONFIG_NOTIFY_TYPE_NUM), ); +static NM_UTILS_ENUM2STR_DEFINE(_l3_acd_defend_type_to_string, + NML3AcdDefendType, + NM_UTILS_ENUM2STR(NM_L3_ACD_DEFEND_TYPE_ALWAYS, "always"), + NM_UTILS_ENUM2STR(NM_L3_ACD_DEFEND_TYPE_NEVER, "never"), + NM_UTILS_ENUM2STR(NM_L3_ACD_DEFEND_TYPE_NONE, "none"), + NM_UTILS_ENUM2STR(NM_L3_ACD_DEFEND_TYPE_ONCE, "once"), ); + +static NM_UTILS_LOOKUP_DEFINE(_l3_acd_defend_type_to_nacd, + NML3AcdDefendType, + int, + NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT(0), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_DEFEND_TYPE_ALWAYS, + N_ACD_DEFEND_ALWAYS), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_DEFEND_TYPE_ONCE, N_ACD_DEFEND_ONCE), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_DEFEND_TYPE_NEVER, N_ACD_DEFEND_NEVER), + NM_UTILS_LOOKUP_ITEM_IGNORE_OTHER(), ); + +static NM_UTILS_LOOKUP_DEFINE(_l3_acd_addr_state_to_string, + NML3AcdAddrState, + const char *, + NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT(NULL), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_CONFLICT, "conflict"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_READY, "ready"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_DEFENDING, "defending"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_INIT, "init"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_PROBING, "probing"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED, + "external-removed"), + NM_UTILS_LOOKUP_ITEM(NM_L3_ACD_ADDR_STATE_USED, "used"), ); + /*****************************************************************************/ static const char * @@ -297,9 +344,11 @@ _l3_config_notify_data_to_string(const NML3ConfigNotifyData *notify_data, char * sbuf, gsize sbuf_size) { - char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; - char *s = sbuf; - gsize l = sbuf_size; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + char sbuf100[100]; + char * s = sbuf; + gsize l = sbuf_size; + in_addr_t addr4; nm_assert(sbuf); nm_assert(sbuf_size > 0); @@ -308,12 +357,12 @@ _l3_config_notify_data_to_string(const NML3ConfigNotifyData *notify_data, nm_utils_strbuf_seek_end(&s, &l); switch (notify_data->notify_type) { - case NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED: + case NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT: nm_utils_strbuf_append(&s, &l, - ", addr=%s, probe-result=%d", - _nm_utils_inet4_ntop(notify_data->acd_completed.addr, sbuf_addr), - (int) notify_data->acd_completed.probe_result); + ", addr=%s, state=%s", + _nm_utils_inet4_ntop(notify_data->acd_event.info.addr, sbuf_addr), + _l3_acd_addr_state_to_string(notify_data->acd_event.info.state)); break; case NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE: nm_utils_strbuf_append( @@ -330,6 +379,19 @@ _l3_config_notify_data_to_string(const NML3ConfigNotifyData *notify_data, ", obj-type-flags=0x%x", notify_data->platform_change_on_idle.obj_type_flags); break; + case NM_L3_CONFIG_NOTIFY_TYPE_IPV4LL_EVENT: + nm_assert(NM_IS_L3_IPV4LL(notify_data->ipv4ll_event.ipv4ll)); + addr4 = nm_l3_ipv4ll_get_addr(notify_data->ipv4ll_event.ipv4ll); + nm_utils_strbuf_append( + &s, + &l, + ", ipv4ll=" NM_HASH_OBFUSCATE_PTR_FMT "%s%s, state=%s", + NM_HASH_OBFUSCATE_PTR(notify_data->ipv4ll_event.ipv4ll), + NM_PRINT_FMT_QUOTED2(addr4 != 0, ", addr=", _nm_utils_inet4_ntop(addr4, sbuf_addr), ""), + nm_l3_ipv4ll_state_to_string(nm_l3_ipv4ll_get_state(notify_data->ipv4ll_event.ipv4ll), + sbuf100, + sizeof(sbuf100))); + break; default: break; } @@ -365,8 +427,9 @@ _nm_l3cfg_emit_signal_notify_simple(NML3Cfg *self, NML3ConfigNotifyType notify_t static void _l3_changed_configs_set_dirty(NML3Cfg *self) { - _LOGT("configuration changed"); - self->priv.changed_configs = TRUE; + _LOGT("IP configuration changed (mark dirty)"); + self->priv.p->changed_configs_configs = TRUE; + self->priv.p->changed_configs_acd_state = TRUE; } /*****************************************************************************/ @@ -386,7 +449,11 @@ _l3_acd_ipv4_addresses_on_link_update(NML3Cfg * self, else self->priv.p->acd_ipv4_addresses_on_link_has = FALSE; if (acd_data) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED, NULL); + _l3_acd_data_state_change(self, + acd_data, + ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED, + NULL, + NULL); return; } @@ -396,8 +463,13 @@ _l3_acd_ipv4_addresses_on_link_update(NML3Cfg * self, * cached addresses, and fetch them new the next time we need the information. */ nm_clear_pointer(&self->priv.p->acd_ipv4_addresses_on_link, g_hash_table_unref); self->priv.p->acd_ipv4_addresses_on_link_has = FALSE; - if (acd_data) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED, NULL); + if (acd_data) { + _l3_acd_data_state_change(self, + acd_data, + ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED, + NULL, + NULL); + } } static gboolean @@ -499,15 +571,15 @@ _l3cfg_externally_removed_objs_drop_unused(NML3Cfg *self) g_hash_table_iter_init(&h_iter, self->priv.p->externally_removed_objs_hash); while (g_hash_table_iter_next(&h_iter, (gpointer *) &obj, NULL)) { - if (!nm_l3_config_data_lookup_route_obj(self->priv.p->combined_l3cd_commited, obj)) { + if (!nm_l3_config_data_lookup_obj(self->priv.p->combined_l3cd_commited, obj)) { /* The object is no longer tracked in the configuration. * The externally_removed_objs_hash is to prevent adding entires that were * removed externally, so if we don't plan to add the entry, we no longer need to track * it. */ - (*(_l3cfg_externally_removed_objs_counter(self, NMP_OBJECT_GET_TYPE(obj))))--; - g_hash_table_iter_remove(&h_iter); _LOGD("externally-removed: untrack %s", nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + (*(_l3cfg_externally_removed_objs_counter(self, NMP_OBJECT_GET_TYPE(obj))))--; + g_hash_table_iter_remove(&h_iter); } } } @@ -525,10 +597,17 @@ _l3cfg_externally_removed_objs_track(NML3Cfg *self, const NMPObject *obj, gboole if (!is_removed) { /* the object is still (or again) present. It no longer gets hidden. */ if (self->priv.p->externally_removed_objs_hash) { - if (g_hash_table_remove(self->priv.p->externally_removed_objs_hash, obj)) { - (*(_l3cfg_externally_removed_objs_counter(self, NMP_OBJECT_GET_TYPE(obj))))--; + const NMPObject *obj2; + gpointer x_val; + + if (g_hash_table_steal_extended(self->priv.p->externally_removed_objs_hash, + obj, + (gpointer *) &obj2, + &x_val)) { + (*(_l3cfg_externally_removed_objs_counter(self, NMP_OBJECT_GET_TYPE(obj2))))--; _LOGD("externally-removed: untrack %s", - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + nmp_object_to_string(obj2, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + nmp_object_unref(obj2); } } return; @@ -558,26 +637,24 @@ _l3cfg_externally_removed_objs_track(NML3Cfg *self, const NMPObject *obj, gboole static void _l3cfg_externally_removed_objs_pickup(NML3Cfg *self, int addr_family) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); NMDedupMultiIter iter; const NMPObject *obj; if (!self->priv.p->combined_l3cd_commited) return; - nm_l3_config_data_iter_obj_for_each(&iter, - self->priv.p->combined_l3cd_commited, - &obj, - NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + self->priv.p->combined_l3cd_commited, + &obj, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)) { if (!nm_platform_lookup_entry(self->priv.platform, NMP_CACHE_ID_TYPE_OBJECT_TYPE, obj)) _l3cfg_externally_removed_objs_track(self, obj, TRUE); } - nm_l3_config_data_iter_obj_for_each(&iter, - self->priv.p->combined_l3cd_commited, - &obj, - NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) - { + nm_l3_config_data_iter_obj_for_each (&iter, + self->priv.p->combined_l3cd_commited, + &obj, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)) { if (!nm_platform_lookup_entry(self->priv.platform, NMP_CACHE_ID_TYPE_OBJECT_TYPE, obj)) _l3cfg_externally_removed_objs_track(self, obj, TRUE); } @@ -590,7 +667,11 @@ _l3cfg_externally_removed_objs_filter(/* const NMDedupMultiObj * */ gconstpointe const NMPObject *obj = o; GHashTable * externally_removed_objs_hash = user_data; - return !g_hash_table_contains(externally_removed_objs_hash, obj); + if (NMP_OBJECT_GET_TYPE(obj) == NMP_OBJECT_TYPE_IP4_ADDRESS + && NMP_OBJECT_CAST_IP4_ADDRESS(obj)->ip4acd_not_ready) + return FALSE; + + return !nm_g_hash_table_contains(externally_removed_objs_hash, obj); } /*****************************************************************************/ @@ -664,9 +745,16 @@ _load_link(NML3Cfg *self, gboolean initial) _l3_acd_nacd_instance_reset(self, NM_TERNARY_FALSE, TRUE); } else if (nacd_link_now_up) { if (!c_list_is_empty(&self->priv.p->acd_lst_head)) { + gint64 now_msec = 0; + _LOGT("acd: link up requires are re-initialize of ACD probes"); - c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_LINK_NOW_UP, NULL); + c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { + _l3_acd_data_state_change(self, + acd_data, + ACD_STATE_CHANGE_MODE_LINK_NOW_UP, + NULL, + &now_msec); + } } } } @@ -687,7 +775,7 @@ _nm_l3cfg_notify_platform_change_on_idle(NML3Cfg *self, guint32 obj_type_flags) }; _nm_l3cfg_emit_signal_notify(self, ¬ify_data); - _l3_acd_data_notify_acd_completed_all(self); + _nm_l3cfg_emit_signal_notify_acd_event_all(self); if (NM_FLAGS_ANY(obj_type_flags, nmp_object_type_to_flags(NMP_OBJECT_TYPE_IP4_ROUTE))) _property_emit_notify(self, NM_L3CFG_PROPERTY_EMIT_TYPE_IP4_ROUTE); @@ -891,84 +979,77 @@ nm_l3cfg_get_acd_is_pending(NML3Cfg *self) } static gboolean -_acd_track_data_is_not_dirty(const AcdTrackData *acd_track) +_acd_track_data_is_not_dirty(const NML3AcdAddrTrackInfo *acd_track) { - return acd_track && !acd_track->acd_dirty; + return acd_track && !acd_track->_priv.acd_dirty_track; } static void -_acd_track_data_free(AcdTrackData *acd_track) +_acd_track_data_clear(NML3AcdAddrTrackInfo *acd_track) { - c_list_unlink_stale(&acd_track->acd_track_lst); nm_l3_config_data_unref(acd_track->l3cd); nmp_object_unref(acd_track->obj); - nm_g_slice_free(acd_track); } static void _acd_data_free(AcdData *acd_data) { - nm_assert(c_list_is_empty(&acd_data->acd_track_lst_head)); + nm_assert(acd_data->info.n_track_infos == 0u); n_acd_probe_free(acd_data->nacd_probe); - nm_clear_g_source_inst(&acd_data->acd_timeout_source); + nm_clear_g_source_inst(&acd_data->acd_data_timeout_source); c_list_unlink_stale(&acd_data->acd_lst); + c_list_unlink_stale(&acd_data->acd_event_notify_lst); + g_free((NML3AcdAddrTrackInfo *) acd_data->info.track_infos); nm_g_slice_free(acd_data); } -static gboolean -_acd_data_probe_result_is_good(const AcdData *acd_data) -{ - nm_assert(acd_data); - - if (acd_data->acd_state < ACD_STATE_PROBE_DONE) { - /* we are currently probing. Wait. */ - return FALSE; - } - - /* Probing is already completed. Use the probe result. */ - return acd_data->probe_result; -} - static guint -_acd_data_collect_tracks_data(const AcdData *acd_data, - NMTernary dirty_selector, - NMTernary acd_failed_notified_selector, - guint32 * out_best_acd_timeout_msec) -{ - guint32 best_acd_timeout_msec = G_MAXUINT32; - AcdTrackData *acd_track; - guint n = 0; +_acd_data_collect_tracks_data(const AcdData * acd_data, + NMTernary dirty_selector, + guint32 * out_best_acd_timeout_msec, + NML3AcdDefendType *out_best_acd_defend_type) +{ + NML3AcdDefendType best_acd_defend_type = NM_L3_ACD_DEFEND_TYPE_NONE; + guint32 best_acd_timeout_msec = G_MAXUINT32; + guint n = 0; + guint i; + + for (i = 0; i < acd_data->info.n_track_infos; i++) { + const NML3AcdAddrTrackInfo *acd_track = &acd_data->info.track_infos[i]; - c_list_for_each_entry (acd_track, &acd_data->acd_track_lst_head, acd_track_lst) { if (dirty_selector != NM_TERNARY_DEFAULT) { - if ((!!dirty_selector) != (!!acd_track->acd_dirty)) - continue; - } - if (acd_failed_notified_selector != NM_TERNARY_DEFAULT) { - if ((!!acd_failed_notified_selector) != (!!acd_track->acd_failed_notified)) + if ((!!dirty_selector) != (!!acd_track->_priv.acd_dirty_track)) continue; } n++; - if (best_acd_timeout_msec > acd_track->acd_timeout_msec) - best_acd_timeout_msec = acd_track->acd_timeout_msec; + if (best_acd_timeout_msec > acd_track->_priv.acd_timeout_msec_track) + best_acd_timeout_msec = acd_track->_priv.acd_timeout_msec_track; + if (best_acd_defend_type < acd_track->_priv.acd_defend_type_track) + best_acd_defend_type = acd_track->_priv.acd_defend_type_track; } + nm_assert(n == 0 || best_acd_defend_type > NM_L3_ACD_DEFEND_TYPE_NONE); + nm_assert(best_acd_defend_type <= NM_L3_ACD_DEFEND_TYPE_ALWAYS); + NM_SET_OUT(out_best_acd_timeout_msec, n > 0 ? best_acd_timeout_msec : 0u); + NM_SET_OUT(out_best_acd_defend_type, best_acd_defend_type); return n; } -static AcdTrackData * +static NML3AcdAddrTrackInfo * _acd_data_find_track(const AcdData * acd_data, const NML3ConfigData *l3cd, const NMPObject * obj, gconstpointer tag) { - AcdTrackData *acd_track; + guint i; + + for (i = 0; i < acd_data->info.n_track_infos; i++) { + const NML3AcdAddrTrackInfo *acd_track = &acd_data->info.track_infos[i]; - c_list_for_each_entry (acd_track, &acd_data->acd_track_lst_head, acd_track_lst) { if (acd_track->obj == obj && acd_track->l3cd == l3cd && acd_track->tag == tag) - return acd_track; + return (NML3AcdAddrTrackInfo *) acd_track; } return NULL; @@ -993,7 +1074,7 @@ _acd_has_valid_link(const NMPObject *obj, link = NMP_OBJECT_CAST_LINK(obj); addr_bin = nmp_link_address_get(&link->l_address, &addr_len); - if (!addr_bin || addr_len != ACD_SUPPORTED_ETH_ALEN) { + if (addr_len != ACD_SUPPORTED_ETH_ALEN) { NM_SET_OUT(out_acd_not_supported, TRUE); return FALSE; } @@ -1004,6 +1085,21 @@ _acd_has_valid_link(const NMPObject *obj, } static gboolean +_l3_acd_nacd_event_down_timeout_cb(gpointer user_data) +{ + NML3Cfg *self = user_data; + AcdData *acd_data; + gint64 now_msec = 0; + + _LOGT("acd: message possibly dropped due to device down (handle events)"); + nm_clear_g_source_inst(&self->priv.p->nacd_event_down_source); + c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) + _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_NACD_DOWN, NULL, &now_msec); + _nm_l3cfg_emit_signal_notify_acd_event_all(self); + return G_SOURCE_REMOVE; +} + +static gboolean _l3_acd_nacd_event(int fd, GIOCondition condition, gpointer user_data) { NML3Cfg *self = user_data; @@ -1020,8 +1116,10 @@ _l3_acd_nacd_event(int fd, GIOCondition condition, gpointer user_data) } while (TRUE) { - AcdData * acd_data; - NAcdEvent *event; + NMEtherAddr sender_addr_data; + const NMEtherAddr *sender_addr; + AcdData * acd_data; + NAcdEvent * event; r = n_acd_pop_event(self->priv.p->nacd, &event); if (r) { @@ -1033,77 +1131,83 @@ _l3_acd_nacd_event(int fd, GIOCondition condition, gpointer user_data) goto out; } -#define _acd_event_payload used - G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NAcdEvent, _acd_event_payload) - == G_STRUCT_OFFSET(NAcdEvent, defended)); - G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NAcdEvent, _acd_event_payload) - == G_STRUCT_OFFSET(NAcdEvent, conflict)); - G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(NAcdEvent, _acd_event_payload) - == G_STRUCT_OFFSET(NAcdEvent, used)); - nm_assert(&event->_acd_event_payload == &event->defended); - nm_assert(&event->_acd_event_payload == &event->conflict); - nm_assert(&event->_acd_event_payload == &event->used); - switch (event->event) { case N_ACD_EVENT_READY: - n_acd_probe_get_userdata(event->_acd_event_payload.probe, (void **) &acd_data); - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_NACD_READY, event); + n_acd_probe_get_userdata(event->ready.probe, (void **) &acd_data); + _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_NACD_READY, NULL, NULL); break; case N_ACD_EVENT_USED: - n_acd_probe_get_userdata(event->_acd_event_payload.probe, (void **) &acd_data); - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_NACD_USED, event); - break; case N_ACD_EVENT_DEFENDED: case N_ACD_EVENT_CONFLICT: { - gs_free char *sender_str = NULL; - const char * addr_str = NULL; - char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; - - /* since we announce with N_ACD_DEFEND_ALWAYS, we don't actually expect any - * conflict reported and don't handle it. It would be complicated to de-configure - * the address. */ - nm_assert(event->event == N_ACD_EVENT_DEFENDED); - - n_acd_probe_get_userdata(event->_acd_event_payload.probe, (void **) &acd_data); - _LOGT_acd(acd_data, - "address %s %s from %s", - (addr_str = _nm_utils_inet4_ntop(acd_data->addr, sbuf_addr)), - event->event == N_ACD_EVENT_DEFENDED ? "defended" : "conflict detected", - (sender_str = nm_utils_bin2hexstr_full(event->_acd_event_payload.sender, - event->_acd_event_payload.n_sender, - ':', - FALSE, - NULL))); - if (event->event == N_ACD_EVENT_CONFLICT) { - _LOGW("IPv4 address collision detection sees conflict on interface %i%s%s%s for " - "address %s from host %s", - self->priv.ifindex, - NM_PRINT_FMT_QUOTED(self->priv.plobj, - " (", - NMP_OBJECT_CAST_LINK(self->priv.plobj)->name, - ")", - ""), - addr_str ?: _nm_utils_inet4_ntop(acd_data->addr, sbuf_addr), - sender_str - ?: (sender_str = - nm_utils_bin2hexstr_full(event->_acd_event_payload.sender, - event->_acd_event_payload.n_sender, - ':', - FALSE, - NULL))); +#define _acd_event_payload_with_sender(event) \ + ({ \ + NAcdEvent *_event = (event); \ + \ + nm_assert(event); \ + nm_assert(NM_IN_SET(event->event, \ + N_ACD_EVENT_USED, \ + N_ACD_EVENT_DEFENDED, \ + N_ACD_EVENT_CONFLICT)); \ + nm_assert(&_event->used == &_event->defended); \ + nm_assert(&_event->used == &_event->conflict); \ + &_event->used; \ + }) + + n_acd_probe_get_userdata(_acd_event_payload_with_sender(event)->probe, + (void **) &acd_data); + + if (_acd_event_payload_with_sender(event)->n_sender == ETH_ALEN) { + G_STATIC_ASSERT_EXPR(_nm_alignof(NMEtherAddr) == 1); + nm_assert(_acd_event_payload_with_sender(event)->sender); + memcpy(&sender_addr_data, _acd_event_payload_with_sender(event)->sender, ETH_ALEN); + sender_addr = &sender_addr_data; + } else { + nm_assert_not_reached(); + sender_addr = &nm_ether_addr_zero; } + + _l3_acd_data_state_change(self, + acd_data, + (AcdStateChangeMode) event->event, + sender_addr, + NULL); break; } case N_ACD_EVENT_DOWN: - _LOGT("acd: message possibly dropped due to device down."); - c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_NACD_DOWN, NULL); + if (!self->priv.p->nacd_event_down_source) { + gint64 now_msec; + guint32 timeout_msec; + + now_msec = nm_utils_get_monotonic_timestamp_msec(); + if (self->priv.p->nacd_event_down_ratelimited_until_msec > 0 + && now_msec < self->priv.p->nacd_event_down_ratelimited_until_msec) + timeout_msec = self->priv.p->nacd_event_down_ratelimited_until_msec - now_msec; + else { + timeout_msec = 0; + self->priv.p->nacd_event_down_ratelimited_until_msec = now_msec + 2000; + } + _LOGT("acd: message possibly dropped due to device down (schedule handling event " + "in %u msec)", + timeout_msec); + self->priv.p->nacd_event_down_source = + nm_g_timeout_source_new(timeout_msec, + G_PRIORITY_DEFAULT, + _l3_acd_nacd_event_down_timeout_cb, + self, + NULL); + g_source_attach(self->priv.p->nacd_event_down_source, NULL); + } break; default: - _LOGT("acd: unexpected event %u. Ignore", event->event); + _LOGE("acd: unexpected event %u. Ignore", event->event); + nm_assert_not_reached(); break; } + + /* We are on an idle handler, and the n-acd events are expected to be independent. So, after + * each event emit all queued AcdEvent signals. */ + _nm_l3cfg_emit_signal_notify_acd_event_all(self); } nm_assert_not_reached(); @@ -1115,8 +1219,6 @@ out: _l3_acd_nacd_instance_reset(self, NM_TERNARY_TRUE, TRUE); } - _l3_acd_data_notify_acd_completed_all(self); - return G_SOURCE_CONTINUE; } @@ -1167,9 +1269,15 @@ _l3_acd_nacd_instance_reset(NML3Cfg *self, NMTernary start_timer, gboolean acd_d if (acd_data_notify) { AcdData *acd_data; - - c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_INSTANCE_RESET, NULL); + gint64 now_msec = 0; + + c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { + _l3_acd_data_state_change(self, + acd_data, + ACD_STATE_CHANGE_MODE_INSTANCE_RESET, + NULL, + &now_msec); + } } } @@ -1275,30 +1383,37 @@ _l3_acd_nacd_instance_create_probe(NML3Cfg * self, } static void -_l3_acd_data_free_trackers(NML3Cfg *self, AcdData *acd_data, gboolean all /* or only dirty */) +_l3_acd_data_prune_one(NML3Cfg *self, AcdData *acd_data, gboolean all /* or only dirty */) { - AcdTrackData *acd_track; - AcdTrackData *acd_track_safe; + NML3AcdAddrTrackInfo *acd_tracks; + guint i; + guint j; + + acd_tracks = (NML3AcdAddrTrackInfo *) acd_data->info.track_infos; + j = 0; + for (i = 0; i < acd_data->info.n_track_infos; i++) { + NML3AcdAddrTrackInfo *acd_track = &acd_tracks[i]; - c_list_for_each_entry_safe (acd_track, - acd_track_safe, - &acd_data->acd_track_lst_head, - acd_track_lst) { /* If not "all" is requested, we only delete the dirty ones * (and mark the survivors as dirty right away). */ - if (!all && !acd_track->acd_dirty) { - acd_track->acd_dirty = TRUE; + if (!all && !acd_track->_priv.acd_dirty_track) { + acd_track->_priv.acd_dirty_track = TRUE; + if (j != i) + acd_tracks[j] = *acd_track; + j++; continue; } _LOGT_acd(acd_data, "untrack " ACD_TRACK_FMT "", ACD_TRACK_PTR(acd_track)); - _acd_track_data_free(acd_track); + _acd_track_data_clear(acd_track); } - if (!c_list_is_empty(&acd_data->acd_track_lst_head)) + acd_data->info.n_track_infos = j; + if (j > 0) return; + _LOGT_acd(acd_data, "removed"); if (!g_hash_table_remove(self->priv.p->acd_lst_hash, acd_data)) nm_assert_not_reached(); _acd_data_free(acd_data); @@ -1311,7 +1426,7 @@ _l3_acd_data_prune(NML3Cfg *self, gboolean all /* or only dirty */) AcdData *acd_data; c_list_for_each_entry_safe (acd_data, acd_data_safe, &self->priv.p->acd_lst_head, acd_lst) - _l3_acd_data_free_trackers(self, acd_data, all); + _l3_acd_data_prune_one(self, acd_data, all); } static AcdData * @@ -1320,17 +1435,33 @@ _l3_acd_data_find(NML3Cfg *self, in_addr_t addr) return nm_g_hash_table_lookup(self->priv.p->acd_lst_hash, &addr); } +static gboolean +_l3_acd_data_defendconflict_warning_ratelimited(AcdData *acd_data, gint64 *p_now_msec) +{ + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); + + if (acd_data->last_defendconflict_timestamp_msec == 0 + || acd_data->last_defendconflict_timestamp_msec + > *p_now_msec - ACD_DEFENDCONFLICT_INFO_RATELIMIT_MSEC) { + acd_data->last_defendconflict_timestamp_msec = *p_now_msec; + return FALSE; + } + return TRUE; +} + static void _l3_acd_data_add(NML3Cfg * self, const NML3ConfigData *l3cd, const NMPObject * obj, gconstpointer tag, + NML3AcdDefendType acd_defend_type, guint32 acd_timeout_msec) { - in_addr_t addr = NMP_OBJECT_CAST_IP4_ADDRESS(obj)->address; - AcdTrackData *acd_track; - AcdData * acd_data; - const char * track_mode; + in_addr_t addr = NMP_OBJECT_CAST_IP4_ADDRESS(obj)->address; + NML3AcdAddrTrackInfo *acd_track; + AcdData * acd_data; + const char * track_mode; + char sbuf100[100]; if (ACD_ADDR_SKIP(addr)) return; @@ -1345,64 +1476,93 @@ _l3_acd_data_add(NML3Cfg * self, if (!acd_data) { if (G_UNLIKELY(!self->priv.p->acd_lst_hash)) { - G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(AcdData, addr) == 0); + G_STATIC_ASSERT_EXPR(G_STRUCT_OFFSET(AcdData, info.addr) == 0); self->priv.p->acd_lst_hash = g_hash_table_new(nm_puint32_hash, nm_puint32_equals); } acd_data = g_slice_new(AcdData); *acd_data = (AcdData){ - .self = self, - .addr = addr, - .acd_track_lst_head = C_LIST_INIT(acd_data->acd_track_lst_head), - .acd_notify_complete_lst = C_LIST_INIT(acd_data->acd_notify_complete_lst), - .acd_state = ACD_STATE_INIT, - .probing_timestamp_msec = 0, - .probe_result = FALSE, - .initializing = TRUE, + .info = + { + .l3cfg = self, + .addr = addr, + .state = NM_L3_ACD_ADDR_STATE_INIT, + .n_track_infos = 0, + .track_infos = NULL, + }, + .n_track_infos_alloc = 0, + .acd_event_notify_lst = C_LIST_INIT(acd_data->acd_event_notify_lst), + .probing_timestamp_msec = 0, + .acd_defend_type_desired = NM_L3_ACD_DEFEND_TYPE_NONE, + .acd_defend_type_current = NM_L3_ACD_DEFEND_TYPE_NONE, + .acd_defend_type_is_active = FALSE, }; c_list_link_tail(&self->priv.p->acd_lst_head, &acd_data->acd_lst); if (!g_hash_table_add(self->priv.p->acd_lst_hash, acd_data)) nm_assert_not_reached(); acd_track = NULL; - } else { + } else acd_track = _acd_data_find_track(acd_data, l3cd, obj, tag); - } if (!acd_track) { - acd_track = g_slice_new(AcdTrackData); - *acd_track = (AcdTrackData){ - .l3cd = nm_l3_config_data_ref(l3cd), - .obj = nmp_object_ref(obj), - .tag = tag, - .acd_dirty = FALSE, - .acd_timeout_msec = acd_timeout_msec, + if (acd_data->info.n_track_infos >= acd_data->n_track_infos_alloc) { + acd_data->n_track_infos_alloc = NM_MAX(2u, acd_data->n_track_infos_alloc * 2u); + acd_data->info.track_infos = + g_realloc((gpointer) acd_data->info.track_infos, + acd_data->n_track_infos_alloc * sizeof(acd_data->info.track_infos[0])); + } + acd_track = + (NML3AcdAddrTrackInfo *) &acd_data->info.track_infos[acd_data->info.n_track_infos++]; + *acd_track = (NML3AcdAddrTrackInfo){ + .l3cd = nm_l3_config_data_ref(l3cd), + .obj = nmp_object_ref(obj), + .tag = tag, + ._priv.acd_dirty_track = FALSE, + ._priv.acd_defend_type_track = acd_defend_type, + ._priv.acd_timeout_msec_track = acd_timeout_msec, }; - c_list_link_tail(&acd_data->acd_track_lst_head, &acd_track->acd_track_lst); track_mode = "new"; } else { - nm_assert(acd_track->acd_dirty); - acd_track->acd_dirty = FALSE; - if (acd_track->acd_timeout_msec != acd_timeout_msec) { - acd_track->acd_timeout_msec = acd_timeout_msec; - track_mode = "update"; + nm_assert(acd_track->_priv.acd_dirty_track); + acd_track->_priv.acd_dirty_track = FALSE; + if (acd_track->_priv.acd_timeout_msec_track != acd_timeout_msec + || acd_track->_priv.acd_defend_type_track != acd_defend_type) { + acd_track->_priv.acd_defend_type_track = acd_defend_type; + acd_track->_priv.acd_timeout_msec_track = acd_timeout_msec; + track_mode = "update"; } else - track_mode = NULL; + return; } - if (track_mode) { - _LOGT_acd(acd_data, - "track " ACD_TRACK_FMT " with timeout %u msec (%s)", - ACD_TRACK_PTR(acd_track), - acd_timeout_msec, - track_mode); - } + acd_data->track_infos_changed = TRUE; + _LOGT_acd(acd_data, + "track " ACD_TRACK_FMT " with timeout %u msec, defend=%s (%s)", + ACD_TRACK_PTR(acd_track), + acd_timeout_msec, + _l3_acd_defend_type_to_string(acd_track->_priv.acd_defend_type_track, + sbuf100, + sizeof(sbuf100)), + track_mode); } static void -_l3_acd_data_add_all(NML3Cfg *self, const L3ConfigData *const *infos, guint infos_len) +_l3_acd_data_add_all(NML3Cfg * self, + const L3ConfigData *const *infos, + guint infos_len, + gboolean reapply) { AcdData *acd_data; guint i_info; + gint64 now_msec = 0; + guint i; + + if (NM_MORE_ASSERTS > 5) { + c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { + nm_assert(acd_data->info.n_track_infos > 0u); + for (i = 0; i < acd_data->info.n_track_infos; i++) + nm_assert(acd_data->info.track_infos[i]._priv.acd_dirty_track); + } + } /* First we add/track all the relevant addresses for ACD. */ for (i_info = 0; i_info < infos_len; i_info++) { @@ -1410,63 +1570,54 @@ _l3_acd_data_add_all(NML3Cfg *self, const L3ConfigData *const *infos, guint info NMDedupMultiIter iter; const NMPObject * obj; - nm_l3_config_data_iter_obj_for_each(&iter, info->l3cd, &obj, NMP_OBJECT_TYPE_IP4_ADDRESS) - _l3_acd_data_add(self, info->l3cd, obj, info->tag, info->acd_timeout_msec); + nm_l3_config_data_iter_obj_for_each (&iter, info->l3cd, &obj, NMP_OBJECT_TYPE_IP4_ADDRESS) { + _l3_acd_data_add(self, + info->l3cd, + obj, + info->tag_confdata, + info->acd_defend_type_confdata, + info->acd_timeout_msec_confdata); + } } /* Then we do a pre-flight check, whether some of the acd_data entries can already * move forward to automatically pass ACD. That is the case if acd_timeout_msec * is zero (to disable ACD) or if the address is already configured on the * interface. */ - c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_INIT, NULL); + c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { + _l3_acd_data_state_change(self, + acd_data, + reapply ? ACD_STATE_CHANGE_MODE_INIT_REAPPLY + : ACD_STATE_CHANGE_MODE_INIT, + NULL, + &now_msec); + } } static gboolean _l3_acd_data_timeout_cb(gpointer user_data) { AcdData *acd_data = user_data; - NML3Cfg *self = acd_data->self; + NML3Cfg *self = acd_data->info.l3cfg; nm_assert(NM_IS_L3CFG(self)); - nm_clear_g_source_inst(&acd_data->acd_timeout_source); - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_TIMEOUT, NULL); + nm_clear_g_source_inst(&acd_data->acd_data_timeout_source); + _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_TIMEOUT, NULL, NULL); return G_SOURCE_REMOVE; } static void -_l3_acd_data_timeout_schedule(AcdData *acd_data, - gint64 now_msec, - gint64 expiry_msec, - gboolean msec_granularity) +_l3_acd_data_timeout_schedule(AcdData *acd_data, gint64 timeout_msec) { - nm_assert(expiry_msec > 0); - nm_assert(now_msec > 0); - - if (acd_data->acd_timeout_source && acd_data->acd_timeout_expiry_msec == expiry_msec) - return; - - nm_clear_g_source_inst(&acd_data->acd_timeout_source); - - acd_data->acd_timeout_expiry_msec = expiry_msec; - - if (msec_granularity) { - acd_data->acd_timeout_source = nm_g_timeout_source_new(NM_MAX(0, expiry_msec - now_msec), - G_PRIORITY_DEFAULT, - _l3_acd_data_timeout_cb, - acd_data, - NULL); - } else { - acd_data->acd_timeout_source = - nm_g_timeout_source_new_seconds((NM_MAX(0, expiry_msec - now_msec) + 999) / 1000, - G_PRIORITY_DEFAULT, - _l3_acd_data_timeout_cb, - acd_data, - NULL); - } - - g_source_attach(acd_data->acd_timeout_source, NULL); + nm_clear_g_source_inst(&acd_data->acd_data_timeout_source); + acd_data->acd_data_timeout_source = + nm_g_timeout_source_new(NM_CLAMP((gint64) 0, timeout_msec, (gint64) G_MAXUINT), + G_PRIORITY_DEFAULT, + _l3_acd_data_timeout_cb, + acd_data, + NULL); + g_source_attach(acd_data->acd_data_timeout_source, NULL); } static void @@ -1477,7 +1628,7 @@ _l3_acd_data_timeout_schedule_probing_restart(AcdData *acd_data, gint64 now_msec nm_assert(acd_data); nm_assert(now_msec > 0); - nm_assert(acd_data->acd_state == ACD_STATE_PROBING); + nm_assert(acd_data->info.state == NM_L3_ACD_ADDR_STATE_PROBING); nm_assert(!acd_data->nacd_probe); nm_assert(acd_data->probing_timeout_msec > 0); nm_assert(acd_data->probing_timestamp_msec > 0); @@ -1486,152 +1637,168 @@ _l3_acd_data_timeout_schedule_probing_restart(AcdData *acd_data, gint64 now_msec timeout_msec = NM_MAX(0, expiry_msec - now_msec); - if (timeout_msec > 1000) { - /* we poll at least once per second to re-check the state. */ - timeout_msec = 1000; + if (timeout_msec > 1500) { + /* we poll at least every 1.5 seconds to re-check the state. */ + timeout_msec = 1500; } - _l3_acd_data_timeout_schedule(acd_data, now_msec, now_msec + timeout_msec, TRUE); + _l3_acd_data_timeout_schedule(acd_data, timeout_msec); } static void -_l3_acd_data_timeout_schedule_probing_full_restart(AcdData *acd_data, gint64 now_msec) +_nm_l3cfg_emit_signal_notify_acd_event(NML3Cfg *self, AcdData *acd_data) { - nm_assert(acd_data); - nm_assert(now_msec > 0); - nm_assert(acd_data->acd_state == ACD_STATE_PROBE_DONE); - nm_assert(!acd_data->probe_result); - - _l3_acd_data_timeout_schedule(acd_data, - now_msec, - now_msec + ACD_WAIT_TIME_PROBING_FULL_RESTART_MSEC, - FALSE); -} + gs_free NML3AcdAddrTrackInfo *track_infos_clone = NULL; + NML3ConfigNotifyData notify_data; + NML3AcdAddrInfo * info; + guint i; -static void -_l3_acd_data_timeout_schedule_announce_restart(AcdData *acd_data, gint64 now_msec) -{ nm_assert(acd_data); - nm_assert(now_msec > 0); - nm_assert(acd_data->acd_state == ACD_STATE_PROBE_DONE); - nm_assert(acd_data->probe_result); - - _l3_acd_data_timeout_schedule(acd_data, - now_msec, - now_msec + ACD_WAIT_TIME_ANNOUNCE_RESTART_MSEC, - FALSE); -} + nm_assert(acd_data->info.state > NM_L3_ACD_ADDR_STATE_INIT); + nm_assert(acd_data->info.n_track_infos > 0); -static void -_l3_acd_data_notify_acd_completed(NML3Cfg *self, AcdData *acd_data, gboolean force_all) -{ - gs_free NML3ConfigNotifyPayloadAcdFailedSource *sources_free = NULL; - NML3ConfigNotifyPayloadAcdFailedSource * sources = NULL; - NML3ConfigNotifyData notify_data; - AcdTrackData * acd_track; - guint i, n; - NMTernary acd_failed_notified_selector; - - nm_assert(NM_IS_L3CFG(self)); - nm_assert(acd_data); - nm_assert(_acd_data_collect_tracks_data(acd_data, FALSE, NM_TERNARY_DEFAULT, NULL) == 0); - - acd_failed_notified_selector = force_all ? NM_TERNARY_DEFAULT : FALSE; + notify_data.notify_type = NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT; + notify_data.acd_event = (typeof(notify_data.acd_event)){ + .info = acd_data->info, + }; - n = _acd_data_collect_tracks_data(acd_data, - NM_TERNARY_DEFAULT, - acd_failed_notified_selector, - NULL); + /* we need to clone the track-data, because the callee is allowed to add/remove + * configs. This means, the event data is stale. If you need the current + * value, look it up with nm_l3cfg_get_acd_addr_info(). */ + info = ¬ify_data.acd_event.info; + info->track_infos = nm_memdup_maybe_a(300, + info->track_infos, + info->n_track_infos * sizeof(info->track_infos[0]), + &track_infos_clone); - if (n == 0) - return; + for (i = 0; i < info->n_track_infos; i++) { + NML3AcdAddrTrackInfo *ti = (NML3AcdAddrTrackInfo *) &info->track_infos[i]; - if (!force_all) { - _LOGT_acd(acd_data, "state: acd probe failed earlier. Emit notification for new trackers"); + nmp_object_ref(ti->obj); + nm_l3_config_data_ref(ti->l3cd); } - if (n * sizeof(sources[0]) > 300) { - sources_free = g_new(NML3ConfigNotifyPayloadAcdFailedSource, n); - sources = sources_free; - } else - sources = g_newa(NML3ConfigNotifyPayloadAcdFailedSource, n); - - i = 0; - c_list_for_each_entry (acd_track, &acd_data->acd_track_lst_head, acd_track_lst) { - if (!force_all && acd_track->acd_failed_notified) { - /* already notified before. Skip. */ - continue; - } - nm_assert(i < n); - acd_track->acd_failed_notified = TRUE; - sources[i++] = (NML3ConfigNotifyPayloadAcdFailedSource){ - .obj = nmp_object_ref(acd_track->obj), - .l3cd = nm_l3_config_data_ref(acd_track->l3cd), - .tag = acd_track->tag, - }; - } - nm_assert(i == n); - - notify_data.notify_type = NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED; - notify_data.acd_completed = (typeof(notify_data.acd_completed)){ - .addr = acd_data->addr, - .probe_result = acd_data->probe_result, - .sources_len = n, - .sources = sources, - }; _nm_l3cfg_emit_signal_notify(self, ¬ify_data); - for (i = 0; i < n; i++) { - nmp_object_unref(sources[i].obj); - nm_l3_config_data_unref(sources[i].l3cd); + for (i = 0; i < info->n_track_infos; i++) { + NML3AcdAddrTrackInfo *ti = (NML3AcdAddrTrackInfo *) &info->track_infos[i]; + + nmp_object_unref(ti->obj); + nm_l3_config_data_unref(ti->l3cd); } } static void -_l3_acd_data_notify_acd_completed_queue(NML3Cfg *self, AcdData *acd_data) +_nm_l3cfg_emit_signal_notify_acd_event_queue(NML3Cfg *self, AcdData *acd_data) { - if (!c_list_is_empty(&acd_data->acd_notify_complete_lst)) { - nm_assert(c_list_contains(&self->priv.p->acd_notify_complete_lst_head, - &acd_data->acd_notify_complete_lst)); + if (!c_list_is_empty(&acd_data->acd_event_notify_lst)) { + nm_assert(c_list_contains(&self->priv.p->acd_event_notify_lst_head, + &acd_data->acd_event_notify_lst)); return; } - c_list_link_tail(&self->priv.p->acd_notify_complete_lst_head, - &acd_data->acd_notify_complete_lst); + c_list_link_tail(&self->priv.p->acd_event_notify_lst_head, &acd_data->acd_event_notify_lst); } static void -_l3_acd_data_notify_acd_completed_all(NML3Cfg *self) +_nm_l3cfg_emit_signal_notify_acd_event_all(NML3Cfg *self) { gs_unref_object NML3Cfg *self_keep_alive = NULL; AcdData * acd_data; - while ((acd_data = c_list_first_entry(&self->priv.p->acd_notify_complete_lst_head, + while ((acd_data = c_list_first_entry(&self->priv.p->acd_event_notify_lst_head, AcdData, - acd_notify_complete_lst))) { + acd_event_notify_lst))) { if (!self_keep_alive) self_keep_alive = g_object_ref(self); - c_list_unlink(&acd_data->acd_notify_complete_lst); - _l3_acd_data_notify_acd_completed(self, acd_data, TRUE); + c_list_unlink(&acd_data->acd_event_notify_lst); + _nm_l3cfg_emit_signal_notify_acd_event(self, acd_data); } } +_nm_printf(5, 6) static void _l3_acd_data_state_set_full(NML3Cfg * self, + AcdData * acd_data, + NML3AcdAddrState state, + gboolean allow_commit, + const char * format, + ...) +{ + NML3AcdAddrState old_state; + gboolean changed; + + if (acd_data->info.state == state) + return; + + /* in every state we only have one timer possibly running. Resetting + * the states makes the previous timeout obsolete. */ + nm_clear_g_source_inst(&acd_data->acd_data_timeout_source); + + old_state = acd_data->info.state; + acd_data->info.state = state; + _nm_l3cfg_emit_signal_notify_acd_event_queue(self, acd_data); + + if (state == NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED) + changed = FALSE; + else if (NM_IN_SET(old_state, NM_L3_ACD_ADDR_STATE_READY, NM_L3_ACD_ADDR_STATE_DEFENDING) + != NM_IN_SET(state, NM_L3_ACD_ADDR_STATE_READY, NM_L3_ACD_ADDR_STATE_DEFENDING)) + changed = TRUE; + else + changed = FALSE; + + if (format) { + gs_free char *msg = NULL; + va_list args; + + va_start(args, format); + msg = g_strdup_vprintf(format, args); + va_end(args); + + _LOGT_acd(acd_data, "set state to %s (%s)", _l3_acd_addr_state_to_string(state), msg); + } else + _LOGT_acd(acd_data, "set state to %s", _l3_acd_addr_state_to_string(state)); + + 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); + nm_l3cfg_commit_on_idle_schedule(self); + } +} + +static void +_l3_acd_data_state_set(NML3Cfg * self, + AcdData * acd_data, + NML3AcdAddrState state, + gboolean allow_commit) +{ + _l3_acd_data_state_set_full(self, acd_data, state, allow_commit, NULL); +} + static void _l3_acd_data_state_change(NML3Cfg * self, AcdData * acd_data, AcdStateChangeMode state_change_mode, - NAcdEvent * event) + const NMEtherAddr *sender_addr, + gint64 * p_now_msec) + { - guint32 acd_timeout_msec; - gint64 now_msec = 0; - const char *log_reason; - gboolean was_probing; + guint32 acd_timeout_msec; + NML3AcdDefendType acd_defend_type; + gint64 now_msec; + const char * log_reason; + char sbuf256[256]; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + + if (!p_now_msec) { + now_msec = 0; + p_now_msec = &now_msec; + } /* Keeping track of ACD inevitably requires keeping (and mutating) state. Then a multitude of * things can happen, and depending on the state, we need to do something. * * Here, all the state for one address that we probe/announce is tracked in AcdData/acd_data. * - * The acd_data has a list of AcdTrackData/acd_track_lst_head, which are configuration items + * The acd_data has a list of NML3AcdAddrTrackInfo/acd_track_lst_head, which are configuration items * that are interested in configuring this address. The "owners" of the ACD check for a certain * address. * @@ -1644,415 +1811,533 @@ _l3_acd_data_state_change(NML3Cfg * self, nm_assert(NM_IS_L3CFG(self)); nm_assert(acd_data); - nm_assert(!c_list_is_empty(&acd_data->acd_track_lst_head)); - - was_probing = acd_data->acd_state < ACD_STATE_PROBE_DONE; + nm_assert(acd_data->info.n_track_infos); + nm_assert(NM_IN_SET(acd_data->info.state, + NM_L3_ACD_ADDR_STATE_CONFLICT, + NM_L3_ACD_ADDR_STATE_READY, + NM_L3_ACD_ADDR_STATE_DEFENDING, + NM_L3_ACD_ADDR_STATE_INIT, + NM_L3_ACD_ADDR_STATE_PROBING, + NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED, + NM_L3_ACD_ADDR_STATE_USED)); + nm_assert(!acd_data->track_infos_changed + || 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_EXTERNAL_ADDED, + ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED)); + nm_assert((!!sender_addr) + == NM_IN_SET(state_change_mode, + ACD_STATE_CHANGE_MODE_NACD_USED, + ACD_STATE_CHANGE_MODE_NACD_CONFLICT, + ACD_STATE_CHANGE_MODE_NACD_DEFENDED)); + + if (acd_data->info.state == NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED) { + /* once remove, the state can only change by external added or during + * the POST-COMMIT check. */ + if (!NM_IN_SET(state_change_mode, + ACD_STATE_CHANGE_MODE_POST_COMMIT, + ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED)) + return; + } switch (state_change_mode) { case ACD_STATE_CHANGE_MODE_INIT: - { - AcdTrackData *acd_track; - gboolean any_no_timeout; - - /* we are called from _l3_acd_data_add_all(), and we do a fast check whether - * newly tracked entries already passed ACD so that we can use the address - * right away. */ - - if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->addr)) { - /* the address is already configured on the link. It is an automatic pass. */ - if (_acd_data_collect_tracks_data(acd_data, FALSE, NM_TERNARY_DEFAULT, NULL) <= 0) { - /* The entry has no non-dirty trackers, that means, it's no longer referenced - * and will be removed during the next _l3_acd_data_prune(). We can ignore - * this entry. */ + case ACD_STATE_CHANGE_MODE_INIT_REAPPLY: + + /* We are called right before commit. We check whether we have a acd_data + * in INIT or PROBING state. In that case, maybe the new configuration + * disables ACD, or we have the address already configured (which also let's + * us skip/cancel the probing). The point is that if the address would be ready + * already, we want to commit it right away. */ + + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_PROBING: + case NM_L3_ACD_ADDR_STATE_INIT: + case NM_L3_ACD_ADDR_STATE_USED: + goto handle_init; + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + if (state_change_mode != ACD_STATE_CHANGE_MODE_INIT_REAPPLY) return; + goto handle_init; + } + nm_assert_not_reached(); + return; + +handle_init: + if (_acd_data_collect_tracks_data(acd_data, + NM_TERNARY_FALSE, + &acd_timeout_msec, + &acd_defend_type) + <= 0u) { + /* the acd_data has no active trackers. It will soon be pruned. */ + return; + } + + if (acd_timeout_msec == 0u) + log_reason = "acd disabled by configuration"; + else if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->info.addr)) + log_reason = "address already configured"; + else { + if (state_change_mode == ACD_STATE_CHANGE_MODE_INIT_REAPPLY) { + /* during a reapply, we forget all the state and start from scratch. */ + _LOGT_acd(acd_data, "reset state for reapply"); + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + _l3_acd_data_state_set(self, acd_data, NM_L3_ACD_ADDR_STATE_INIT, FALSE); } - log_reason = "address initially already configured"; - goto handle_probing_acd_good; + return; } - /* we are called at the end of _l3_acd_data_add_all(). We updated the list of a - * all tracked IP addresses before we actually collect the addresses that are - * ready. We don't do regular handling of ACD states at this point, however, - * we check whether ACD for new elements is disabled entirely, so we can signal - * the address are ready right away (without going through another hop). */ + _LOGT_acd(acd_data, + "%s probing (%s, during pre-check)", + acd_data->info.state == NM_L3_ACD_ADDR_STATE_INIT ? "skip" : "cancel", + log_reason); + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + acd_data->acd_defend_type_desired = acd_defend_type; + _l3_acd_data_state_set(self, acd_data, NM_L3_ACD_ADDR_STATE_READY, FALSE); + return; - if (acd_data->acd_state != ACD_STATE_INIT) { - /* this element is not new and we don't perform the quick-check. */ + case ACD_STATE_CHANGE_MODE_POST_COMMIT: + + if (acd_data->track_infos_changed) { + acd_data->track_infos_changed = FALSE; + _nm_l3cfg_emit_signal_notify_acd_event_queue(self, acd_data); + } + + if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->info.addr)) { + log_reason = "address already configured"; + goto handle_probing_done; + } + + if (acd_data->info.state == NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED) return; + + /* we just did a commit of the IP configuration and now visit all ACD states + * and kick off the necessary actions... */ + if (_acd_data_collect_tracks_data(acd_data, + NM_TERNARY_TRUE, + &acd_timeout_msec, + &acd_defend_type) + <= 0) + nm_assert_not_reached(); + + acd_data->acd_defend_type_desired = acd_defend_type; + + if (acd_timeout_msec <= 0) { + log_reason = "acd disabled by configuration"; + goto handle_probing_done; } - any_no_timeout = FALSE; - c_list_for_each_entry (acd_track, &acd_data->acd_track_lst_head, acd_track_lst) { - /* There should be no dirty trackers, because the element is in init-state. */ - nm_assert(!acd_track->acd_dirty); - if (acd_track->acd_timeout_msec <= 0) { - /* ACD for this element is disabled. We can process is right away. */ - any_no_timeout = TRUE; - break; + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + nm_assert(!acd_data->nacd_probe); + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); + acd_data->probing_timestamp_msec = (*p_now_msec); + acd_data->probing_timeout_msec = acd_timeout_msec; + _nm_l3cfg_emit_signal_notify_acd_event_queue(self, acd_data); + log_reason = "initial post-commit"; + goto handle_start_probing; + + case NM_L3_ACD_ADDR_STATE_PROBING: + { + gint64 old_expiry_msec; + gint64 new_expiry_msec; + + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); + + new_expiry_msec = (*p_now_msec) + acd_timeout_msec; + old_expiry_msec = acd_data->probing_timestamp_msec + acd_data->probing_timeout_msec; + + if (!acd_data->nacd_probe) { + /* we are currently waiting for restarting a probe. At this point, at most we have + * to adjust the timeout/timestamp and let the regular timeouts handle this. */ + + if (new_expiry_msec >= old_expiry_msec) { + /* the running timeout expires before the new timeout. We don't update the timestamp/timeout, + * because we don't want to prolong the overall probing time. */ + return; + } + /* update the timers after out timeout got reduced. Also, reschedule the timeout + * so that it expires immediately. */ + acd_data->probing_timestamp_msec = (*p_now_msec); + acd_data->probing_timeout_msec = acd_timeout_msec; + _l3_acd_data_timeout_schedule(acd_data, 0); + return; + } + + if (new_expiry_msec >= old_expiry_msec) { + /* we already have ACD running with a timeout that expires before the requested one. There + * is nothing to do at this time. */ + return; } + + /* the timeout got reduced. We try to restart the probe. */ + acd_data->probing_timestamp_msec = (*p_now_msec); + acd_data->probing_timeout_msec = acd_timeout_msec; + log_reason = "post-commit timeout update"; + goto handle_start_probing; } - if (!any_no_timeout) { - /* there are elements that request the address, but they all specify - * an ACD timeout. We cannot progress the state. */ + + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + /* we are done for now. We however scheduled a timeout to restart. This + * will be handled with the ACD_STATE_CHANGE_MODE_TIMEOUT event. */ return; - } - /* ACD is disabled, we can artificially moving the state further to - * ACD_STATE_PROBE_DONE and configure the address right away. This avoids - * that we go through another hop. - */ - log_reason = "ACD disabled by configuration from the start"; - goto handle_probing_acd_good; - } + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + goto handle_start_defending; - case ACD_STATE_CHANGE_MODE_POST_COMMIT: - acd_data->initializing = FALSE; - goto handle_post_commit; + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + nm_assert_not_reached(); + return; + } + nm_assert_not_reached(); + return; case ACD_STATE_CHANGE_MODE_TIMEOUT: - { - if (acd_data->acd_state == ACD_STATE_PROBING && !acd_data->nacd_probe) { - const char *failure_reason; - gboolean acd_not_supported; - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + nm_assert_not_reached(); + return; + + case NM_L3_ACD_ADDR_STATE_PROBING: + if (acd_data->nacd_probe) { + /* we are already probing. There is nothing to do for this timeout. */ + return; + } + + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); if (acd_data->probing_timestamp_msec + ACD_WAIT_PROBING_EXTRA_TIME_MSEC + ACD_WAIT_PROBING_EXTRA_TIME2_MSEC - >= now_msec) { + >= (*p_now_msec)) { + /* hm. We failed to create a new probe too long. Something is really wrong + * internally, but let's ignore the issue and assume the address is good. What + * else would we do? Assume the address is USED? */ _LOGT_acd(acd_data, - "state: probe-good (waiting for creating probe timed out. Assume good)"); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; + "probe-good (waiting for creating probe timed out. Assume good)"); + goto handle_start_defending; } - /* try create a new probe. The timeout is always as originally requested. */ - acd_data->nacd_probe = - _l3_acd_nacd_instance_create_probe(self, - acd_data->addr, - acd_data->probing_timeout_msec, - acd_data, - &acd_not_supported, - &failure_reason); - if (acd_not_supported) { - nm_assert(!acd_data->nacd_probe); - _LOGT_acd( - acd_data, - "state: probe-good (interface does not support ACD anymore after timeout)"); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; + log_reason = "retry probing on timeout"; + goto handle_start_probing; + + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + + nm_assert(!acd_data->nacd_probe); + + /* after a timeout, re-probe the address. This only happens if the caller + * does not deconfigure the address after USED/CONFLICT. But in that case, + * we eventually want to retry. */ + if (_acd_data_collect_tracks_data(acd_data, + NM_TERNARY_TRUE, + &acd_timeout_msec, + &acd_defend_type) + <= 0) + nm_assert_not_reached(); + + acd_data->acd_defend_type_desired = acd_defend_type; + + if (acd_timeout_msec <= 0) { + log_reason = "acd disabled by configuration (restart after previous conflict)"; + goto handle_probing_done; } - if (!acd_data->nacd_probe) { - _LOGT_acd(acd_data, - "state: probing not possible at this time (%s). Wait longer", - failure_reason); - _l3_acd_data_timeout_schedule_probing_restart(acd_data, now_msec); - return; + if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->info.addr)) { + log_reason = "address already configured (restart after previous conflict)"; + goto handle_probing_done; } - /* probing started (with the original timeout. Note that acd_data->probing_time*_msec - * no longer corresponds to the actual timeout of the nacd_probe. This is not a problem - * because at this point we only trust the internal timer from nacd_probe to get - * it right. Instead, we keep acd_data->probing_time*_msec unchanged, to remember when - * we originally wanted to start. */ - _LOGT_acd(acd_data, - "state: probing started (after retry, timeout %u msec)", - acd_data->probing_timeout_msec); + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); + acd_data->probing_timestamp_msec = (*p_now_msec); + acd_data->probing_timeout_msec = acd_timeout_msec; + if (acd_data->info.state == NM_L3_ACD_ADDR_STATE_USED) + log_reason = "restart probing after previously used address"; + else + log_reason = "restart probing after previous conflict"; + goto handle_start_probing; + + case NM_L3_ACD_ADDR_STATE_READY: + nm_assert_not_reached(); return; - } - if (acd_data->acd_state == ACD_STATE_PROBE_DONE && !acd_data->probe_result) { - /* Probing is done, but previously we detected a conflict. After a restart, we retry to - * probe. */ + case NM_L3_ACD_ADDR_STATE_DEFENDING: + nm_assert(!acd_data->nacd_probe); - nm_assert(!acd_data->announcing_failed_is_retrying); + _LOGT_acd(acd_data, "retry announcing address"); + goto handle_start_defending; - _LOGT_acd(acd_data, "state: restart a new probe after previous conflict"); - acd_data->acd_state = ACD_STATE_INIT; - goto handle_post_commit; + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + nm_assert_not_reached(); + return; } - if (acd_data->acd_state == ACD_STATE_PROBE_DONE && acd_data->probe_result - && !acd_data->nacd_probe && acd_data->announcing_failed_is_retrying) { - /* Probing is done, but previously we failed to start announcing. Retry now. */ - nm_assert(!was_probing); - _LOGT_acd(acd_data, "state: retry announcing address"); - acd_data->announcing_failed_is_retrying = FALSE; - goto handle_probe_done; + nm_assert_not_reached(); + return; + + case ACD_STATE_CHANGE_MODE_NACD_USED: + nm_assert(acd_data->info.state == NM_L3_ACD_ADDR_STATE_PROBING); + nm_assert(acd_data->nacd_probe); + + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + acd_data->last_conflict_addr = *sender_addr; + _l3_acd_data_state_set_full(self, + acd_data, + NM_L3_ACD_ADDR_STATE_USED, + TRUE, + "acd completed with address already in use by %s", + nm_ether_addr_to_string_a(sender_addr)); + + if (!acd_data->acd_data_timeout_source) + _l3_acd_data_timeout_schedule(acd_data, ACD_WAIT_TIME_PROBING_FULL_RESTART_MSEC); + + if (!_l3_acd_data_defendconflict_warning_ratelimited(acd_data, p_now_msec)) { + _LOGI("IPv4 address %s is used on network connected to interface %d%s%s%s from " + "host %s", + _nm_utils_inet4_ntop(acd_data->info.addr, sbuf_addr), + self->priv.ifindex, + NM_PRINT_FMT_QUOTED(self->priv.plobj_next, + " (", + NMP_OBJECT_CAST_LINK(self->priv.plobj_next)->name, + ")", + ""), + nm_ether_addr_to_string_a(sender_addr)); } + return; + case ACD_STATE_CHANGE_MODE_NACD_DEFENDED: + nm_assert(acd_data->info.state == NM_L3_ACD_ADDR_STATE_DEFENDING); + _LOGT_acd(acd_data, + "address %s defended from %s", + _nm_utils_inet4_ntop(acd_data->info.addr, sbuf_addr), + nm_ether_addr_to_string_a(sender_addr)); + /* we just log an info message. Nothing else to do. */ return; - } - case ACD_STATE_CHANGE_MODE_NACD_READY: - if (acd_data->acd_state == ACD_STATE_PROBING) { - log_reason = "acd indicates ready"; - goto handle_probing_acd_good; + case ACD_STATE_CHANGE_MODE_NACD_CONFLICT: + nm_assert(acd_data->info.state == NM_L3_ACD_ADDR_STATE_DEFENDING); + + _LOGT_acd(acd_data, + "address conflict for %s detected with %s", + _nm_utils_inet4_ntop(acd_data->info.addr, sbuf_addr), + nm_ether_addr_to_string_a(sender_addr)); + + if (!_l3_acd_data_defendconflict_warning_ratelimited(acd_data, p_now_msec)) { + _LOGW("IPv4 address collision detection sees conflict on interface %d%s%s%s for " + "address %s from host %s", + self->priv.ifindex, + NM_PRINT_FMT_QUOTED(self->priv.plobj_next, + " (", + NMP_OBJECT_CAST_LINK(self->priv.plobj_next)->name, + ")", + ""), + _nm_utils_inet4_ntop(acd_data->info.addr, sbuf_addr), + nm_ether_addr_to_string_a(sender_addr)); } - if (acd_data->acd_state == ACD_STATE_ANNOUNCING) { - _LOGT_acd(acd_data, "state: ready to start announcing"); - if (n_acd_probe_announce(acd_data->nacd_probe, N_ACD_DEFEND_ALWAYS) != 0) + + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + acd_data->last_conflict_addr = *sender_addr; + _l3_acd_data_state_set(self, acd_data, NM_L3_ACD_ADDR_STATE_CONFLICT, TRUE); + if (!acd_data->acd_data_timeout_source) + _l3_acd_data_timeout_schedule(acd_data, ACD_WAIT_TIME_CONFLICT_RESTART_MSEC); + return; + + case ACD_STATE_CHANGE_MODE_NACD_READY: + + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_PROBING: + nm_assert(acd_data->nacd_probe); + /* we theoretically could re-use this probe for defending. But as we + * may not start defending right away, it makes it more complicated. */ + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + log_reason = "acd indicates ready"; + goto handle_probing_done; + case NM_L3_ACD_ADDR_STATE_DEFENDING: + nm_assert(!acd_data->acd_defend_type_is_active); + acd_data->acd_defend_type_is_active = TRUE; + _LOGT_acd(acd_data, + "start announcing (defend=%s) (after new probe ready)", + _l3_acd_defend_type_to_string(acd_data->acd_defend_type_current, + sbuf256, + sizeof(sbuf256))); + if (n_acd_probe_announce(acd_data->nacd_probe, + _l3_acd_defend_type_to_nacd(acd_data->acd_defend_type_current)) + != 0) nm_assert_not_reached(); return; + case NM_L3_ACD_ADDR_STATE_INIT: + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + nm_assert_not_reached(); + return; } - /* nacd really shouldn't call us in this state. There is a bug somewhere. */ nm_assert_not_reached(); return; - case ACD_STATE_CHANGE_MODE_NACD_USED: - { - gs_free char *str_to_free = NULL; + case ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED: - nm_assert(acd_data->acd_state == ACD_STATE_PROBING); - _LOGT_acd(acd_data, - "state: probe-done bad (address already in use by %s)", - nm_utils_bin2hexstr_a(event->_acd_event_payload.sender, - event->_acd_event_payload.n_sender, - ':', - FALSE, - &str_to_free)); - acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = FALSE; - goto handle_probe_done; - } + if (self->priv.p->commit_reentrant_count > 0) + return; - case ACD_STATE_CHANGE_MODE_EXTERNAL_ADDED: - /* the address is configured on the link. This means, ACD passed */ - log_reason = "address configured on link"; - goto handle_probing_acd_good; + _LOGT_acd(acd_data, "address was externally added"); - case ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED: - /* The address got removed. Either we ourself removed it or it was removed externally. - * In either case, it's not clear what we should do about that, regardless in which - * ACD state we are, so ignore it. */ - _LOGT_acd(acd_data, "state: address was externally removed. Ignore"); - return; + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + nm_assert_not_reached(); + return; + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + goto handle_start_defending; + case NM_L3_ACD_ADDR_STATE_PROBING: + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + log_reason = "address configured on link"; + goto handle_probing_done; + } - case ACD_STATE_CHANGE_MODE_NACD_DOWN: - if (acd_data->acd_state < ACD_STATE_PROBE_DONE) { - /* we are probing, but the probe has a problem that the link went down. Maybe - * we need to restart. */ + nm_assert_not_reached(); + return; - nm_assert(acd_data->acd_state == ACD_STATE_PROBING); + case ACD_STATE_CHANGE_MODE_EXTERNAL_REMOVED: - if (!acd_data->nacd_probe) { - /* we are in probing state, but currently not really probing. A timer is - * running, and we will handle this situation that way. */ - return; - } + if (self->priv.p->commit_reentrant_count > 0) + return; - /* We abort the probing, but we also schedule a timer to restart it. Let - * the regular re-start handling handle this. */ - _LOGT_acd(acd_data, - "state: interface-down. Probing aborted but we keep waiting to retry"); - acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); - _l3_acd_data_timeout_schedule_probing_restart(acd_data, now_msec); + if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->info.addr)) { + /* this can happen, because there might still be the same address with different + * plen or peer_address. */ return; } - /* We already completed a probe and acted accordingly (by either configuring the address - * already or by rejecting it). We cannot (easily) re-evaluate what to do now. Should - * we later restart probing? But what about the decisions we already made?? - * Ignore the situation. */ + _LOGT_acd(acd_data, "address was externally removed"); + + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + _l3_acd_data_state_set(self, acd_data, NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED, FALSE); return; + case ACD_STATE_CHANGE_MODE_NACD_DOWN: case ACD_STATE_CHANGE_MODE_LINK_NOW_UP: - /* The interface just came up. */ - - if (acd_data->acd_state <= ACD_STATE_PROBING) { - nm_auto(n_acd_probe_freep) NAcdProbe *probe = NULL; - const char * failure_reason; - gboolean acd_not_supported; - - /* the interface was probing. We will restart the probe. */ - nm_assert(acd_data->acd_state == ACD_STATE_PROBING); - - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + nm_assert_not_reached(); + return; + case NM_L3_ACD_ADDR_STATE_PROBING: if (!acd_data->nacd_probe) { - /* We currently are waiting to restart probing. We don't handle the link-up - * event here, we only trigger a timeout right away. */ + /* we failed starting to probe before and have a timer running to + * restart. We don't do anything now, but let the timer handle it. + * This also implements some rate limiting for us. */ _LOGT_acd(acd_data, - "state: ignore link up event while we are waiting to start probing"); - _l3_acd_data_timeout_schedule(acd_data, now_msec, now_msec, TRUE); + "ignore link %s event while we are waiting to start probing", + state_change_mode == ACD_STATE_CHANGE_MODE_NACD_DOWN ? "down" : "up"); return; } - if (acd_data->probing_timestamp_msec + ACD_WAIT_PROBING_RESTART_TIME_MSEC >= now_msec) { - /* This probe was already started quite a while ago. We ignore the link-up event - * and let it complete regularly. This is to avoid restarting to probing indefinitely. */ - _LOGT_acd(acd_data, "state: ignore link up event for a probe started long ago"); - return; - } + nm_utils_get_monotonic_timestamp_msec_cached(p_now_msec); - probe = _l3_acd_nacd_instance_create_probe(self, - acd_data->addr, - acd_data->probing_timeout_msec, - acd_data, - &acd_not_supported, - &failure_reason); - if (!probe) { - _LOGT_acd(acd_data, - "state: link up event would cause to retry probing, but creating a probe " - "failed (%s). Ignore and keep previous probe", - failure_reason); + if (acd_data->probing_timestamp_msec + acd_data->probing_timeout_msec + + ACD_WAIT_PROBING_EXTRA_TIME_MSEC + ACD_WAIT_PROBING_EXTRA_TIME2_MSEC + >= (*p_now_msec)) { + /* The probing already started quite a while ago. We ignore the link event + * and let the probe come to it's natural end. */ + _LOGT_acd(acd_data, "ignore link up event for a probe started long ago"); return; } - NM_SWAP(&probe, &acd_data->nacd_probe); - - /* We just restarted probing. Note that we don't touch the original acd_data->probing_time*_msec - * times, otherwise a repeated link up/down cycle could extend the probing indefinitely. - * - * This is despite the new probe just started counting now. So, at this point, the - * timestamp/timeout of acd_data no longer corresponds to the internal timestamp of - * acd_data->nacd_probe. But since we don't run our own timer against the internal timer of - * acd_data->nacd_probe, that is not a problem. - */ - _LOGT_acd(acd_data, - "state: probing restarted (after link up, new timeout %u msec)", - acd_data->probing_timeout_msec); + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + if (state_change_mode == ACD_STATE_CHANGE_MODE_NACD_DOWN) + log_reason = "restart probing after down event"; + else + log_reason = "restart probing after link up"; + goto handle_start_probing; + + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + /* if the link was down/came up, it's no clear what we should do about these + * cases. Ignore the event. */ return; } - - /* we are already done with the ACD state. Bringing up an interface has - * no further consequence w.r.t. the ACD state. */ + nm_assert_not_reached(); return; case ACD_STATE_CHANGE_MODE_INSTANCE_RESET: - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - if (acd_data->acd_state <= ACD_STATE_PROBING) { - nm_assert(acd_data->acd_state == ACD_STATE_PROBING); - - _LOGT_acd( - acd_data, - "state: n-acd instance reset. Trigger a restart of the probing (was %sprobing)", - acd_data->nacd_probe ? "" : "not"); - /* Just destroy the current probe (if any) and retrigger a restart right away. */ - acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); - _l3_acd_data_timeout_schedule(acd_data, now_msec, now_msec, TRUE); + + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + nm_assert_not_reached(); return; - } + case NM_L3_ACD_ADDR_STATE_PROBING: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + + if (!acd_data->nacd_probe) { + /* we failed starting to probe before and have a timer running to + * restart. We don't do anything now, but let the timer handle it. + * This also implements some rate limiting for us. */ + _LOGT_acd(acd_data, + "n-acd instance reset. Ignore event while restarting %s", + (acd_data->info.state == NM_L3_ACD_ADDR_STATE_PROBING) ? "probing" + : "defending"); + return; + } - if (acd_data->probe_result) { - _LOGT_acd(acd_data, "state: n-acd instance reset. Restart announcing"); - } else { _LOGT_acd(acd_data, - "state: n-acd instance reset. Reprobe the address that conflicted before"); + "n-acd instance reset. Trigger a restart of the %s", + (acd_data->info.state == NM_L3_ACD_ADDR_STATE_PROBING) ? "probing" + : "defending"); + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); + _l3_acd_data_timeout_schedule(acd_data, 0); + return; + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_USED: + case NM_L3_ACD_ADDR_STATE_CONFLICT: + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + nm_assert(!acd_data->nacd_probe); + return; } - acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - _l3_acd_data_timeout_schedule(acd_data, now_msec, now_msec, TRUE); + nm_assert_not_reached(); return; } nm_assert_not_reached(); return; -handle_post_commit: - /* we just did a commit of the IP configuration and now visit all ACD states - * and kick off the necessary actions... */ - if (_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->addr)) { - log_reason = "address already configured"; - goto handle_probing_acd_good; - } - if (_acd_data_collect_tracks_data(acd_data, TRUE, NM_TERNARY_DEFAULT, &acd_timeout_msec) <= 0) - nm_assert_not_reached(); - if (acd_timeout_msec <= 0) { - log_reason = "ACD disabled by configuration"; - goto handle_probing_acd_good; - } - - switch (acd_data->acd_state) { - case ACD_STATE_INIT: - { - const char *failure_reason; - gboolean acd_not_supported; - NAcdProbe * probe; - - nm_assert(!acd_data->nacd_probe); - - probe = _l3_acd_nacd_instance_create_probe(self, - acd_data->addr, - acd_timeout_msec, - acd_data, - &acd_not_supported, - &failure_reason); - if (acd_not_supported) { - nm_assert(!probe); - _LOGT_acd(acd_data, "state: probe-good (interface does not support ACD)"); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; - } - - if (!probe) { - _LOGT_acd(acd_data, - "state: probing currently not possible (timeout %u msec; %s)", - acd_timeout_msec, - failure_reason); - acd_data->acd_state = ACD_STATE_PROBING; - acd_data->probing_timeout_msec = acd_timeout_msec; - acd_data->probing_timestamp_msec = - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - _l3_acd_data_timeout_schedule_probing_restart(acd_data, now_msec); - return; - } - - _LOGT_acd(acd_data, "state: start probing (timeout %u msec)", acd_timeout_msec); - acd_data->acd_state = ACD_STATE_PROBING; - acd_data->nacd_probe = probe; - acd_data->probing_timeout_msec = acd_timeout_msec; - acd_data->probing_timestamp_msec = nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - return; - } - - case ACD_STATE_PROBING: - { - nm_auto(n_acd_probe_freep) NAcdProbe *probe = NULL; +handle_start_probing: + if (TRUE) { + const NML3AcdAddrState orig_state = acd_data->info.state; + nm_auto(n_acd_probe_freep) NAcdProbe *probe = NULL; const char * failure_reason; gboolean acd_not_supported; - gint64 old_expiry_msec; - gint64 new_expiry_msec; - - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - - new_expiry_msec = now_msec + acd_timeout_msec; - old_expiry_msec = acd_data->probing_timestamp_msec + acd_data->probing_timeout_msec; - if (!acd_data->nacd_probe) { - /* we are currently waiting for restarting a probe. At this point, at most we have - * to adjust the timeout/timestamp and let the regular timeouts handle this. */ - - if (new_expiry_msec >= old_expiry_msec) { - /* the running timeout expires before the new timeout. We don't update the timestamp/timerout, - * because we don't want to prolong the overall probing time. */ - return; - } - /* update the timers after out timeout got reduced. Also, reschedule the timeout - * so that it expires immediately. */ - acd_data->probing_timestamp_msec = now_msec; - acd_data->probing_timeout_msec = acd_timeout_msec; - _l3_acd_data_timeout_schedule(acd_data, now_msec, now_msec, TRUE); - return; - } + nm_assert(NM_IN_SET(acd_data->info.state, + NM_L3_ACD_ADDR_STATE_INIT, + NM_L3_ACD_ADDR_STATE_PROBING, + NM_L3_ACD_ADDR_STATE_USED, + NM_L3_ACD_ADDR_STATE_CONFLICT)); - if (new_expiry_msec >= old_expiry_msec) { - /* we already have ACD running with a timeout that expires before the requested one. There - * is nothing to do at this time. */ - return; - } + /* note that we reach this line also during a ACD_STATE_CHANGE_MODE_TIMEOUT, when + * or when we restart the probing (with a new timeout). In all cases, we still + * give the original timeout (acd_data->probing_timeout_msec), and not the remaining + * time. That means, the probing step might take longer then originally planned + * (e.g. if we initially cannot start probing right away). */ - /* the timeout got reduced. We try to restart the probe. */ probe = _l3_acd_nacd_instance_create_probe(self, - acd_data->addr, - acd_timeout_msec, + acd_data->info.addr, + acd_data->probing_timeout_msec, acd_data, &acd_not_supported, &failure_reason); @@ -2060,143 +2345,144 @@ handle_post_commit: if (acd_not_supported) { nm_assert(!acd_data->nacd_probe); - _LOGT_acd(acd_data, "state: probe-good (interface does not support ACD anymore)"); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; + _LOGT_acd(acd_data, + "probe-good (interface does not support acd%s, %s)", + orig_state == NM_L3_ACD_ADDR_STATE_INIT ? "" + : (state_change_mode != ACD_STATE_CHANGE_MODE_TIMEOUT) + ? " anymore" + : " anymore after timeout", + log_reason); + goto handle_start_defending; } + _l3_acd_data_state_set(self, + acd_data, + NM_L3_ACD_ADDR_STATE_PROBING, + !NM_IN_SET(state_change_mode, + ACD_STATE_CHANGE_MODE_INIT, + ACD_STATE_CHANGE_MODE_INIT_REAPPLY, + ACD_STATE_CHANGE_MODE_POST_COMMIT)); + if (!acd_data->nacd_probe) { _LOGT_acd(acd_data, - "state: probing currently still not possible (timeout %u msec; %s)", - acd_timeout_msec, - failure_reason); - acd_data->acd_state = ACD_STATE_PROBING; - acd_data->probing_timeout_msec = acd_timeout_msec; - acd_data->probing_timestamp_msec = now_msec; - _l3_acd_data_timeout_schedule_probing_restart(acd_data, now_msec); + "probing currently %snot possible (timeout %u msec; %s, %s)", + orig_state == NM_L3_ACD_ADDR_STATE_INIT ? "" : " still", + acd_data->probing_timeout_msec, + failure_reason, + log_reason); + _l3_acd_data_timeout_schedule_probing_restart(acd_data, (*p_now_msec)); return; } - /* We update the timestamps (after also restarting the probe). - * - * Note that we only reduced the overall expiry. */ - acd_data->probing_timestamp_msec = now_msec; - acd_data->probing_timeout_msec = acd_timeout_msec; - _LOGT_acd(acd_data, "state: restart probing (timeout %u msec)", acd_timeout_msec); + _LOGT_acd(acd_data, + "%sstart probing (timeout %u msec, %s)", + orig_state == NM_L3_ACD_ADDR_STATE_INIT ? "" : "re", + acd_data->probing_timeout_msec, + log_reason); return; } - case ACD_STATE_PROBE_DONE: - case ACD_STATE_ANNOUNCING: - goto handle_probe_done; - } - nm_assert_not_reached(); - return; - -handle_probing_acd_good: - switch (acd_data->acd_state) { - case ACD_STATE_INIT: - _LOGT_acd(acd_data, "state: probe-done good (%s, initializing)", log_reason); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; - case ACD_STATE_PROBING: - _LOGT_acd(acd_data, "state: probe-done good (%s, probing done)", log_reason); +handle_probing_done: + switch (acd_data->info.state) { + case NM_L3_ACD_ADDR_STATE_INIT: + _LOGT_acd(acd_data, "probe-done good (%s, initializing)", log_reason); + goto handle_start_defending; + case NM_L3_ACD_ADDR_STATE_PROBING: + _LOGT_acd(acd_data, "probe-done good (%s, probing done)", log_reason); if (state_change_mode != ACD_STATE_CHANGE_MODE_NACD_READY) acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); - acd_data->acd_state = ACD_STATE_PROBE_DONE; - acd_data->probe_result = TRUE; - goto handle_probe_done; - case ACD_STATE_PROBE_DONE: - if (!acd_data->probe_result) { - nm_assert(!acd_data->nacd_probe); - _LOGT_acd(acd_data, "state: probe-done good (%s, after probe failed)", log_reason); - acd_data->probe_result = TRUE; - } - goto handle_probe_done; - case ACD_STATE_ANNOUNCING: - nm_assert(acd_data->probe_result); - goto handle_probe_done; - } - nm_assert_not_reached(); - return; - -handle_probe_done: - nm_assert(NM_IN_SET(acd_data->acd_state, ACD_STATE_PROBE_DONE, ACD_STATE_ANNOUNCING)); - - if (acd_data->initializing) + goto handle_start_defending; + case NM_L3_ACD_ADDR_STATE_USED: + _LOGT_acd(acd_data, "probe-done good (%s, after probe failed)", log_reason); + goto handle_start_defending; + case NM_L3_ACD_ADDR_STATE_READY: + case NM_L3_ACD_ADDR_STATE_DEFENDING: + goto handle_start_defending; + case NM_L3_ACD_ADDR_STATE_CONFLICT: return; - - if (acd_data->acd_state >= ACD_STATE_ANNOUNCING) { - nm_assert(acd_data->nacd_probe); - nm_assert(acd_data->probe_result); + case NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED: + nm_assert_not_reached(); return; } + nm_assert_not_reached(); + return; - if (!acd_data->probe_result) { - nm_assert(acd_data->acd_state == ACD_STATE_PROBE_DONE); - nm_assert(!acd_data->nacd_probe); - /* we just completed probing with negative result. - * Emit a signal, but also reschedule a timer to restart. */ - if (was_probing) { - _LOGT_acd(acd_data, "state: acd probe failed; signal failure"); - acd_data->probing_timestamp_msec = - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - _l3_acd_data_timeout_schedule_probing_full_restart(acd_data, now_msec); +handle_start_defending: + if (!_l3_acd_ipv4_addresses_on_link_contains(self, acd_data->info.addr)) { + if (acd_data->info.state != NM_L3_ACD_ADDR_STATE_READY) { + _l3_acd_data_state_set_full(self, + acd_data, + 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), + "probe is ready, waiting for address to be configured"); } - _l3_acd_data_notify_acd_completed_queue(self, acd_data); return; } - if (was_probing && acd_data->probe_result) { - /* probing just completed. Schedule handling the change. */ - _LOGT_acd(acd_data, "state: acd probe succeed"); - _l3_acd_data_notify_acd_completed_queue(self, acd_data); - if (state_change_mode != ACD_STATE_CHANGE_MODE_POST_COMMIT) - _l3_changed_configs_set_dirty(self); - nm_l3cfg_commit_on_idle_schedule(self); + _l3_acd_data_state_set(self, + acd_data, + NM_L3_ACD_ADDR_STATE_DEFENDING, + !NM_IN_SET(state_change_mode, + ACD_STATE_CHANGE_MODE_INIT, + ACD_STATE_CHANGE_MODE_INIT_REAPPLY, + ACD_STATE_CHANGE_MODE_POST_COMMIT)); + + nm_assert(acd_data->acd_defend_type_desired > NM_L3_ACD_DEFEND_TYPE_NONE); + nm_assert(acd_data->acd_defend_type_desired <= NM_L3_ACD_DEFEND_TYPE_ALWAYS); + + if (acd_data->acd_defend_type_desired != acd_data->acd_defend_type_current) { + acd_data->acd_defend_type_current = acd_data->acd_defend_type_desired; + acd_data->nacd_probe = n_acd_probe_free(acd_data->nacd_probe); } if (!acd_data->nacd_probe) { const char *failure_reason; NAcdProbe * probe; - if (acd_data->announcing_failed_is_retrying) { + if (acd_data->acd_data_timeout_source) { /* we already failed to create a probe. We are ratelimited to retry, but * we have a timer pending... */ return; } probe = _l3_acd_nacd_instance_create_probe(self, - acd_data->addr, + acd_data->info.addr, 0, acd_data, NULL, &failure_reason); if (!probe) { - /* we failed to create a probe for announcing the address. We log a (rate limited) - * warning and start a timer to retry. */ - _LOGT_acd(acd_data, - "state: start announcing failed to create probe (%s)", - failure_reason); - acd_data->announcing_failed_is_retrying = TRUE; - acd_data->probing_timestamp_msec = - nm_utils_get_monotonic_timestamp_msec_cached(&now_msec); - _l3_acd_data_timeout_schedule_announce_restart(acd_data, now_msec); + /* we failed to create a probe for announcing the address. We log a + * warning and start a timer to retry. This way (of having a timer pending) + * we also back off and are rate limited from retrying too frequently. */ + _LOGT_acd(acd_data, "start announcing failed to create probe (%s)", failure_reason); + _l3_acd_data_timeout_schedule(acd_data, ACD_WAIT_TIME_ANNOUNCE_RESTART_MSEC); return; } - _LOGT_acd(acd_data, "state: start announcing (with new probe)"); - acd_data->nacd_probe = probe; - acd_data->acd_state = ACD_STATE_ANNOUNCING; + _LOGT_acd(acd_data, + "start announcing (defend=%s) (probe created)", + _l3_acd_defend_type_to_string(acd_data->acd_defend_type_current, + sbuf256, + sizeof(sbuf256))); + acd_data->acd_defend_type_is_active = FALSE; + acd_data->nacd_probe = probe; return; } - if (acd_data->acd_state == ACD_STATE_PROBE_DONE) { - _LOGT_acd(acd_data, "state: start announcing (with existing probe)"); - acd_data->acd_state = ACD_STATE_ANNOUNCING; - if (n_acd_probe_announce(acd_data->nacd_probe, N_ACD_DEFEND_ALWAYS) != 0) + if (!acd_data->acd_defend_type_is_active) { + acd_data->acd_defend_type_is_active = TRUE; + _LOGT_acd(acd_data, + "start announcing (defend=%s) (with existing probe)", + _l3_acd_defend_type_to_string(acd_data->acd_defend_type_current, + sbuf256, + sizeof(sbuf256))); + if (n_acd_probe_announce(acd_data->nacd_probe, + _l3_acd_defend_type_to_nacd(acd_data->acd_defend_type_current)) + != 0) nm_assert_not_reached(); return; } @@ -2205,28 +2491,47 @@ handle_probe_done: static void _l3_acd_data_process_changes(NML3Cfg *self) { - gboolean acd_is_announcing = FALSE; - gboolean acd_is_pending = FALSE; + gboolean acd_is_pending = FALSE; + gboolean acd_busy = FALSE; AcdData *acd_data; + gint64 now_msec = 0; _l3_acd_data_prune(self, FALSE); c_list_for_each_entry (acd_data, &self->priv.p->acd_lst_head, acd_lst) { - _l3_acd_data_state_change(self, acd_data, ACD_STATE_CHANGE_MODE_POST_COMMIT, NULL); - if (acd_data->acd_state < ACD_STATE_PROBE_DONE) + _l3_acd_data_state_change(self, + acd_data, + ACD_STATE_CHANGE_MODE_POST_COMMIT, + NULL, + &now_msec); + if (acd_data->info.state <= NM_L3_ACD_ADDR_STATE_PROBING) acd_is_pending = TRUE; - else if (acd_data->acd_state >= ACD_STATE_ANNOUNCING - || (acd_data->acd_state >= ACD_STATE_PROBE_DONE && acd_data->probe_result)) - acd_is_announcing = TRUE; + if (acd_data->nacd_probe) + acd_busy = TRUE; } - self->priv.p->acd_is_pending = acd_is_pending; - self->priv.p->acd_is_announcing = acd_is_announcing; + self->priv.p->acd_is_pending = acd_is_pending; - if (!acd_is_pending && !acd_is_announcing) + if (!acd_busy) _l3_acd_nacd_instance_reset(self, NM_TERNARY_DEFAULT, FALSE); - _l3_acd_data_notify_acd_completed_all(self); + _nm_l3cfg_emit_signal_notify_acd_event_all(self); +} + +/*****************************************************************************/ + +const NML3AcdAddrInfo * +nm_l3cfg_get_acd_addr_info(NML3Cfg *self, in_addr_t addr) +{ + AcdData *acd_data; + + nm_assert(NM_IS_L3CFG(self)); + + acd_data = _l3_acd_data_find(self, addr); + if (!acd_data) + return NULL; + + return &acd_data->info; } /*****************************************************************************/ @@ -2238,7 +2543,7 @@ _l3_commit_on_idle_cb(gpointer user_data) nm_clear_g_source_inst(&self->priv.p->commit_on_idle_source); - _LOGT("platform commit on idle"); + _LOGT("commit on idle"); _l3_commit(self, NM_L3_CFG_COMMIT_TYPE_AUTO, TRUE); return G_SOURCE_REMOVE; } @@ -2251,6 +2556,7 @@ nm_l3cfg_commit_on_idle_schedule(NML3Cfg *self) if (self->priv.p->commit_on_idle_source) return; + _LOGT("commit on idle (scheduled)"); self->priv.p->commit_on_idle_source = nm_g_idle_source_new(G_PRIORITY_DEFAULT, _l3_commit_on_idle_cb, self, NULL); g_source_attach(self->priv.p->commit_on_idle_source, NULL); @@ -2275,7 +2581,7 @@ _l3_config_datas_find_next(GArray * l3_config_datas, for (i = start_idx; i < l3_config_datas->len; i++) { const L3ConfigData *l3_config_data = _l3_config_datas_at(l3_config_datas, i); - if (NM_IN_SET(needle_tag, NULL, l3_config_data->tag) + if (NM_IN_SET(needle_tag, NULL, l3_config_data->tag_confdata) && NM_IN_SET(needle_l3cd, NULL, l3_config_data->l3cd)) return i; } @@ -2294,54 +2600,15 @@ _l3_config_datas_get_sorted_cmp(gconstpointer p_a, gconstpointer p_b, gpointer u /* we sort the entries with higher priority (more important, lower numerical value) * first. */ - NM_CMP_FIELD(a, b, priority); + NM_CMP_FIELD(a, b, priority_confdata); /* if the priority is not unique, we sort them in the order they were added, * with the oldest first (lower numerical value). */ - NM_CMP_FIELD(a, b, pseudo_timestamp); + NM_CMP_FIELD(a, b, pseudo_timestamp_confdata); return nm_assert_unreachable_val(0); } -#define _l3_config_datas_get_sorted_a(l3_config_datas, out_infos, out_infos_len, out_infos_free) \ - G_STMT_START \ - { \ - GArray *const _l3_config_datas = (l3_config_datas); \ - const L3ConfigData *const **const _out_infos = (out_infos); \ - guint *const _out_infos_len = (out_infos_len); \ - const L3ConfigData ***const _out_infos_free = (out_infos_free); \ - gs_free const L3ConfigData **_infos_free = NULL; \ - const L3ConfigData ** _infos; \ - guint _l3_config_datas_len; \ - guint _i; \ - \ - _l3_config_datas_len = nm_g_array_len(_l3_config_datas); \ - \ - if (_l3_config_datas_len == 0) \ - _infos = NULL; \ - else if (_l3_config_datas_len < 300 / sizeof(_infos[0])) \ - _infos = g_alloca(_l3_config_datas_len * sizeof(_infos[0])); \ - else { \ - _infos_free = g_new(const L3ConfigData *, _l3_config_datas_len); \ - _infos = _infos_free; \ - } \ - for (_i = 0; _i < _l3_config_datas_len; _i++) \ - _infos[_i] = _l3_config_datas_at(_l3_config_datas, _i); \ - \ - if (_l3_config_datas_len > 1) { \ - g_qsort_with_data(_infos, \ - _l3_config_datas_len, \ - sizeof(_infos[0]), \ - _l3_config_datas_get_sorted_cmp, \ - NULL); \ - } \ - \ - *_out_infos = _infos; \ - *_out_infos_len = _l3_config_datas_len; \ - *_out_infos_free = g_steal_pointer(&_infos_free); \ - } \ - G_STMT_END - static void _l3_config_datas_remove_index_fast(GArray *arr, guint idx) { @@ -2376,7 +2643,7 @@ nm_l3cfg_mark_config_dirty(NML3Cfg *self, gconstpointer tag, gboolean dirty) if (idx < 0) return; - _l3_config_datas_at(self->priv.p->l3_config_datas, idx)->dirty = dirty; + _l3_config_datas_at(self->priv.p->l3_config_datas, idx)->dirty_confdata = dirty; idx++; } } @@ -2393,6 +2660,7 @@ nm_l3cfg_add_config(NML3Cfg * self, guint32 default_route_metric_6, guint32 default_route_penalty_4, guint32 default_route_penalty_6, + NML3AcdDefendType acd_defend_type, guint32 acd_timeout_msec, NML3ConfigMergeFlags merge_flags) { @@ -2405,6 +2673,14 @@ nm_l3cfg_add_config(NML3Cfg * self, nm_assert(l3cd); nm_assert(nm_l3_config_data_get_ifindex(l3cd) == self->priv.ifindex); + if (acd_timeout_msec > ACD_MAX_TIMEOUT_MSEC) + acd_timeout_msec = ACD_MAX_TIMEOUT_MSEC; + + nm_assert(NM_IN_SET(acd_defend_type, + NM_L3_ACD_DEFEND_TYPE_NEVER, + NM_L3_ACD_DEFEND_TYPE_ONCE, + NM_L3_ACD_DEFEND_TYPE_ALWAYS)); + nm_assert(default_route_metric_6 != 0u); /* IPv6 default route metric cannot be zero. */ if (default_route_table_4 == 0u) @@ -2434,12 +2710,11 @@ nm_l3cfg_add_config(NML3Cfg * self, if (l3_config_data->l3cd == l3cd) { nm_assert(idx == -1); idx = idx2; - continue; + idx2++; + } else { + changed = TRUE; + _l3_config_datas_remove_index_fast(self->priv.p->l3_config_datas, idx2); } - - changed = TRUE; - _l3_config_datas_remove_index_fast(self->priv.p->l3_config_datas, idx2); - idx2 = _l3_config_datas_find_next(self->priv.p->l3_config_datas, idx2, tag, NULL); if (idx2 < 0) break; @@ -2449,29 +2724,30 @@ nm_l3cfg_add_config(NML3Cfg * self, if (idx < 0) { l3_config_data = nm_g_array_append_new(self->priv.p->l3_config_datas, L3ConfigData); *l3_config_data = (L3ConfigData){ - .tag = tag, - .l3cd = nm_l3_config_data_ref_and_seal(l3cd), - .merge_flags = merge_flags, - .default_route_table_4 = default_route_table_4, - .default_route_table_6 = default_route_table_6, - .default_route_metric_4 = default_route_metric_4, - .default_route_metric_6 = default_route_metric_6, - .default_route_penalty_4 = default_route_penalty_4, - .default_route_penalty_6 = default_route_penalty_6, - .acd_timeout_msec = acd_timeout_msec, - .priority = priority, - .pseudo_timestamp = ++self->priv.p->pseudo_timestamp_counter, - .dirty = FALSE, + .tag_confdata = tag, + .l3cd = nm_l3_config_data_ref_and_seal(l3cd), + .merge_flags = merge_flags, + .default_route_table_4 = default_route_table_4, + .default_route_table_6 = default_route_table_6, + .default_route_metric_4 = default_route_metric_4, + .default_route_metric_6 = default_route_metric_6, + .default_route_penalty_4 = default_route_penalty_4, + .default_route_penalty_6 = default_route_penalty_6, + .acd_defend_type_confdata = acd_defend_type, + .acd_timeout_msec_confdata = acd_timeout_msec, + .priority_confdata = priority, + .pseudo_timestamp_confdata = ++self->priv.p->pseudo_timestamp_counter, + .dirty_confdata = FALSE, }; changed = TRUE; } else { - l3_config_data = _l3_config_datas_at(self->priv.p->l3_config_datas, idx); - l3_config_data->dirty = FALSE; - nm_assert(l3_config_data->tag == tag); + l3_config_data = _l3_config_datas_at(self->priv.p->l3_config_datas, idx); + l3_config_data->dirty_confdata = FALSE; + nm_assert(l3_config_data->tag_confdata == tag); nm_assert(l3_config_data->l3cd == l3cd); - if (l3_config_data->priority != priority) { - l3_config_data->priority = priority; - changed = TRUE; + if (l3_config_data->priority_confdata != priority) { + l3_config_data->priority_confdata = priority; + changed = TRUE; } if (l3_config_data->merge_flags != merge_flags) { l3_config_data->merge_flags = merge_flags; @@ -2501,12 +2777,18 @@ nm_l3cfg_add_config(NML3Cfg * self, l3_config_data->default_route_penalty_6 = default_route_penalty_6; changed = TRUE; } - if (l3_config_data->acd_timeout_msec != acd_timeout_msec) { - l3_config_data->acd_timeout_msec = acd_timeout_msec; - changed = TRUE; + if (l3_config_data->acd_defend_type_confdata != acd_defend_type) { + l3_config_data->acd_defend_type_confdata = acd_defend_type; + changed = TRUE; + } + if (l3_config_data->acd_timeout_msec_confdata != acd_timeout_msec) { + l3_config_data->acd_timeout_msec_confdata = acd_timeout_msec; + changed = TRUE; } } + nm_assert(l3_config_data->acd_defend_type_confdata == acd_defend_type); + if (changed) _l3_changed_configs_set_dirty(self); @@ -2537,7 +2819,8 @@ _l3cfg_remove_config(NML3Cfg * self, if (idx < 0) break; - if (only_dirty && !_l3_config_datas_at(self->priv.p->l3_config_datas, idx)->dirty) { + if (only_dirty + && !_l3_config_datas_at(self->priv.p->l3_config_datas, idx)->dirty_confdata) { idx++; continue; } @@ -2582,12 +2865,18 @@ typedef struct { } L3ConfigMergeHookAddObjData; static gboolean -_l3_hook_add_addr_cb(const NML3ConfigData *l3cd, const NMPObject *obj, gpointer user_data) +_l3_hook_add_addr_cb(const NML3ConfigData *l3cd, + const NMPObject * obj, + NMTernary * out_ip4acd_not_ready, + gpointer user_data) { const L3ConfigMergeHookAddObjData *hook_data = user_data; NML3Cfg * self = hook_data->self; AcdData * acd_data; in_addr_t addr; + gboolean acd_bad = FALSE; + + nm_assert(out_ip4acd_not_ready && *out_ip4acd_not_ready == NM_TERNARY_DEFAULT); if (NMP_OBJECT_GET_TYPE(obj) != NMP_OBJECT_TYPE_IP4_ADDRESS) return TRUE; @@ -2595,46 +2884,91 @@ _l3_hook_add_addr_cb(const NML3ConfigData *l3cd, const NMPObject *obj, gpointer addr = NMP_OBJECT_CAST_IP4_ADDRESS(obj)->address; if (ACD_ADDR_SKIP(addr)) - return TRUE; + goto out; acd_data = _l3_acd_data_find(self, addr); - nm_assert(acd_data); + + if (!acd_data) { + /* we don't yet track an ACD state for this address. That can only + * happend during _l3cfg_update_combined_config() with !to_commit, + * where we didn't update the ACD state. + * + * This means, unless you actually commit, nm_l3cfg_get_combined_l3cd(self, get_commited = FALSE) + * won't consider IPv4 addresses ready, that have no known ACD state yet. */ + nm_assert(self->priv.p->changed_configs_acd_state); + acd_bad = TRUE; + goto out; + } + nm_assert( _acd_track_data_is_not_dirty(_acd_data_find_track(acd_data, l3cd, obj, hook_data->tag))); - return _acd_data_probe_result_is_good(acd_data); + if (!NM_IN_SET(acd_data->info.state, + NM_L3_ACD_ADDR_STATE_READY, + NM_L3_ACD_ADDR_STATE_DEFENDING)) + acd_bad = TRUE; + +out: + *out_ip4acd_not_ready = acd_bad ? NM_TERNARY_TRUE : NM_TERNARY_FALSE; + return TRUE; } static void _l3cfg_update_combined_config(NML3Cfg * self, gboolean to_commit, + gboolean reapply, const NML3ConfigData **out_old /* transfer reference */, - gboolean * out_changed_configs, gboolean * out_changed_combined_l3cd) { - nm_auto_unref_l3cd const NML3ConfigData *l3cd_old = NULL; - nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL; - gs_free const L3ConfigData **l3_config_datas_free = NULL; - const L3ConfigData *const * l3_config_datas_sorted; + nm_auto_unref_l3cd const NML3ConfigData *l3cd_commited_old = NULL; + nm_auto_unref_l3cd const NML3ConfigData *l3cd_old = NULL; + nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL; + gs_free const L3ConfigData **l3_config_datas_free = NULL; + const L3ConfigData ** l3_config_datas_arr; guint l3_config_datas_len; guint i; + gboolean merged_changed = FALSE; + gboolean commited_changed = FALSE; nm_assert(NM_IS_L3CFG(self)); - nm_assert(!out_old || !*out_old); - NM_SET_OUT(out_changed_configs, self->priv.changed_configs); + NM_SET_OUT(out_changed_combined_l3cd, FALSE); - if (!self->priv.changed_configs) - goto out; + if (!self->priv.p->changed_configs_configs) { + if (!self->priv.p->changed_configs_acd_state) + goto out; + if (!to_commit) { + /* since we are not going to commit, we don't care about the + * ACD state. */ + goto out; + } + } + + self->priv.p->changed_configs_configs = FALSE; - self->priv.changed_configs = FALSE; + l3_config_datas_len = nm_g_array_len(self->priv.p->l3_config_datas); + l3_config_datas_arr = nm_malloc_maybe_a(300, + l3_config_datas_len * sizeof(l3_config_datas_arr[0]), + &l3_config_datas_free); + for (i = 0; i < l3_config_datas_len; i++) + l3_config_datas_arr[i] = _l3_config_datas_at(self->priv.p->l3_config_datas, i); - _l3_config_datas_get_sorted_a(self->priv.p->l3_config_datas, - &l3_config_datas_sorted, - &l3_config_datas_len, - &l3_config_datas_free); + if (l3_config_datas_len > 1) { + g_qsort_with_data(l3_config_datas_arr, + l3_config_datas_len, + sizeof(l3_config_datas_arr[0]), + _l3_config_datas_get_sorted_cmp, + NULL); + } - _l3_acd_data_add_all(self, l3_config_datas_sorted, l3_config_datas_len); + if (!to_commit) { + /* we are not going to commit these changes. Hence, we don't update the + * ACD states, but we need to remember that we have to on the next commit. */ + 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->changed_configs_acd_state = FALSE; + } if (l3_config_datas_len > 0) { L3ConfigMergeHookAddObjData hook_data = { @@ -2645,12 +2979,12 @@ _l3cfg_update_combined_config(NML3Cfg * self, self->priv.ifindex); for (i = 0; i < l3_config_datas_len; i++) { - const L3ConfigData *l3cd_data = l3_config_datas_sorted[i]; + const L3ConfigData *l3cd_data = l3_config_datas_arr[i]; if (NM_FLAGS_HAS(l3cd_data->merge_flags, NM_L3_CONFIG_MERGE_FLAGS_ONLY_FOR_ACD)) continue; - hook_data.tag = l3cd_data->tag; + hook_data.tag = l3cd_data->tag_confdata; nm_l3_config_data_merge(l3cd, l3cd_data->l3cd, l3cd_data->merge_flags, @@ -2672,24 +3006,43 @@ _l3cfg_update_combined_config(NML3Cfg * self, l3cd_old = g_steal_pointer(&self->priv.p->combined_l3cd_merged); self->priv.p->combined_l3cd_merged = nm_l3_config_data_seal(g_steal_pointer(&l3cd)); - + merged_changed = TRUE; if (!to_commit) { NM_SET_OUT(out_old, g_steal_pointer(&l3cd_old)); NM_SET_OUT(out_changed_combined_l3cd, TRUE); - _LOGT("desired IP configuration changed"); } out: if (to_commit && self->priv.p->combined_l3cd_commited != self->priv.p->combined_l3cd_merged) { - nm_auto_unref_l3cd const NML3ConfigData *l3cd_commited_old = NULL; - l3cd_commited_old = g_steal_pointer(&self->priv.p->combined_l3cd_commited); self->priv.p->combined_l3cd_commited = nm_l3_config_data_ref(self->priv.p->combined_l3cd_merged); - + commited_changed = TRUE; NM_SET_OUT(out_old, g_steal_pointer(&l3cd_commited_old)); NM_SET_OUT(out_changed_combined_l3cd, TRUE); - _LOGT("desired IP configuration changed for commit"); + } + + if ((merged_changed || commited_changed) && _LOGT_ENABLED()) { + char sbuf256[256]; + char sbuf30[30]; + + _LOGT("IP configuration changed (merged=%c%s, commited=%c%s)", + merged_changed ? '>' : '=', + NM_HASH_OBFUSCATE_PTR_STR(self->priv.p->combined_l3cd_merged, sbuf256), + commited_changed ? '>' : '=', + NM_HASH_OBFUSCATE_PTR_STR(self->priv.p->combined_l3cd_commited, sbuf30)); + + if (merged_changed) { + nm_l3_config_data_log(self->priv.p->combined_l3cd_merged, + NULL, + nm_sprintf_buf(sbuf256, + "l3cfg[" NM_HASH_OBFUSCATE_PTR_FMT + ",ifindex=%d]: ", + NM_HASH_OBFUSCATE_PTR(self), + nm_l3cfg_get_ifindex(self)), + LOGL_TRACE, + _NMLOG_DOMAIN); + } } } @@ -2874,10 +3227,13 @@ out_prune: /*****************************************************************************/ static gboolean -_l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) +_l3_commit_one(NML3Cfg * self, + int addr_family, + NML3CfgCommitType commit_type, + gboolean changed_combined_l3cd, + const NML3ConfigData *l3cd_old) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); - nm_auto_unref_l3cd const NML3ConfigData *l3cd_old = NULL; + const int IS_IPv4 = NM_IS_IPv4(addr_family); gs_unref_ptrarray GPtrArray *addresses = NULL; gs_unref_ptrarray GPtrArray *routes = NULL; gs_unref_ptrarray GPtrArray *addresses_prune = NULL; @@ -2885,8 +3241,6 @@ _l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) gs_unref_ptrarray GPtrArray *routes_temporary_not_available_arr = NULL; NMIPRouteTableSyncMode route_table_sync = NM_IP_ROUTE_TABLE_SYNC_MODE_NONE; gboolean final_failure_for_temporary_not_available = FALSE; - gboolean changed_combined_l3cd; - gboolean changed_configs; char sbuf_commit_type[50]; gboolean success = TRUE; @@ -2902,8 +3256,6 @@ _l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) nm_utils_addr_family_to_char(addr_family), _l3_cfg_commit_type_to_string(commit_type, sbuf_commit_type, sizeof(sbuf_commit_type))); - _l3cfg_update_combined_config(self, TRUE, &l3cd_old, &changed_configs, &changed_combined_l3cd); - if (changed_combined_l3cd) { /* our combined configuration changed. We may track entries in externally_removed_objs_hash, * which are not longer to be considered by our configuration. We need to forget about them. */ @@ -2916,29 +3268,40 @@ _l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) } if (self->priv.p->combined_l3cd_commited) { + GHashTable * externally_removed_objs_hash; NMDedupMultiFcnSelectPredicate predicate; + const NMDedupMultiHeadEntry * head_entry; if (commit_type != NM_L3_CFG_COMMIT_TYPE_REAPPLY - && self->priv.p->externally_removed_objs_cnt_addresses_x[IS_IPv4] > 0) - predicate = _l3cfg_externally_removed_objs_filter; - else - predicate = NULL; - addresses = nm_dedup_multi_objs_to_ptr_array_head( - nm_l3_config_data_lookup_objs(self->priv.p->combined_l3cd_commited, - NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)), - predicate, - self->priv.p->externally_removed_objs_hash); + && self->priv.p->externally_removed_objs_cnt_addresses_x[IS_IPv4] > 0) { + predicate = _l3cfg_externally_removed_objs_filter; + externally_removed_objs_hash = self->priv.p->externally_removed_objs_hash; + } else { + if (IS_IPv4) + predicate = _l3cfg_externally_removed_objs_filter; + else + predicate = NULL; + externally_removed_objs_hash = NULL; + } + head_entry = nm_l3_config_data_lookup_objs(self->priv.p->combined_l3cd_commited, + NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)); + addresses = nm_dedup_multi_objs_to_ptr_array_head(head_entry, + predicate, + externally_removed_objs_hash); if (commit_type != NM_L3_CFG_COMMIT_TYPE_REAPPLY - && self->priv.p->externally_removed_objs_cnt_routes_x[IS_IPv4] > 0) - predicate = _l3cfg_externally_removed_objs_filter; - else - predicate = NULL; - routes = nm_dedup_multi_objs_to_ptr_array_head( - nm_l3_config_data_lookup_objs(self->priv.p->combined_l3cd_commited, - NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)), - predicate, - self->priv.p->externally_removed_objs_hash); + && self->priv.p->externally_removed_objs_cnt_routes_x[IS_IPv4] > 0) { + predicate = _l3cfg_externally_removed_objs_filter; + externally_removed_objs_hash = self->priv.p->externally_removed_objs_hash; + } else { + predicate = NULL; + externally_removed_objs_hash = NULL; + } + head_entry = nm_l3_config_data_lookup_objs(self->priv.p->combined_l3cd_commited, + NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)); + routes = nm_dedup_multi_objs_to_ptr_array_head(head_entry, + predicate, + externally_removed_objs_hash); route_table_sync = nm_l3_config_data_get_route_table_sync(self->priv.p->combined_l3cd_commited, @@ -2958,22 +3321,13 @@ _l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) self->priv.ifindex, route_table_sync); } else if (commit_type == NM_L3_CFG_COMMIT_TYPE_UPDATE) { - /* during update, we do a cross with the previous configuration. - * - * Of course, if an entry is both to be pruned and to be added, then - * the latter wins. So, this works just nicely. */ - if (l3cd_old) { - const NMDedupMultiHeadEntry *head_entry; - - head_entry = - nm_l3_config_data_lookup_objs(l3cd_old, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)); - addresses_prune = nm_dedup_multi_objs_to_ptr_array_head(head_entry, NULL, NULL); - - head_entry = nm_l3_config_data_lookup_objs(l3cd_old, NMP_OBJECT_TYPE_IP_ROUTE(IS_IPv4)); - addresses_prune = nm_dedup_multi_objs_to_ptr_array_head(head_entry, NULL, NULL); - } + addresses_prune = nm_g_ptr_array_ref(self->priv.p->last_addresses_x[IS_IPv4]); + routes_prune = nm_g_ptr_array_ref(self->priv.p->last_routes_x[IS_IPv4]); } + nm_g_ptr_array_set(&self->priv.p->last_addresses_x[IS_IPv4], addresses); + nm_g_ptr_array_set(&self->priv.p->last_routes_x[IS_IPv4], routes); + /* FIXME(l3cfg): need to honor and set nm_l3_config_data_get_ip6_privacy(). */ /* FIXME(l3cfg): need to honor and set nm_l3_config_data_get_ndisc_*(). */ /* FIXME(l3cfg): need to honor and set nm_l3_config_data_get_ip6_mtu(). */ @@ -3008,8 +3362,10 @@ _l3_commit_one(NML3Cfg *self, int addr_family, NML3CfgCommitType commit_type) static void _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is_idle) { - gboolean commit_type_detected = FALSE; - char sbuf_ct[30]; + nm_auto_unref_l3cd const NML3ConfigData *l3cd_old = NULL; + gboolean commit_type_detected = FALSE; + char sbuf_ct[30]; + gboolean changed_combined_l3cd; g_return_if_fail(NM_IS_L3CFG(self)); nm_assert(NM_IN_SET(commit_type, @@ -3018,6 +3374,7 @@ _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is_idle) NM_L3_CFG_COMMIT_TYPE_ASSUME, NM_L3_CFG_COMMIT_TYPE_UPDATE, NM_L3_CFG_COMMIT_TYPE_REAPPLY)); + nm_assert(self->priv.p->commit_reentrant_count == 0); switch (commit_type) { case NM_L3_CFG_COMMIT_TYPE_AUTO: @@ -3043,7 +3400,7 @@ _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is_idle) break; } - _LOGT("platform-commit %s%s%s", + _LOGT("commit %s%s%s", _l3_cfg_commit_type_to_string(commit_type, sbuf_ct, sizeof(sbuf_ct)), commit_type_detected ? " (auto)" : "", is_idle ? " (idle handler)" : ""); @@ -3051,18 +3408,29 @@ _l3_commit(NML3Cfg *self, NML3CfgCommitType commit_type, gboolean is_idle) if (commit_type == NM_L3_CFG_COMMIT_TYPE_NONE) return; + self->priv.p->commit_reentrant_count++; + nm_clear_g_source_inst(&self->priv.p->commit_on_idle_source); if (commit_type == NM_L3_CFG_COMMIT_TYPE_REAPPLY) _l3cfg_externally_removed_objs_drop(self); + _l3cfg_update_combined_config(self, + TRUE, + commit_type == NM_L3_CFG_COMMIT_TYPE_REAPPLY, + &l3cd_old, + &changed_combined_l3cd); + /* FIXME(l3cfg): handle items currently not configurable in kernel. */ - _l3_commit_one(self, AF_INET, commit_type); - _l3_commit_one(self, AF_INET6, commit_type); + _l3_commit_one(self, AF_INET, commit_type, changed_combined_l3cd, l3cd_old); + _l3_commit_one(self, AF_INET6, commit_type, changed_combined_l3cd, l3cd_old); _l3_acd_data_process_changes(self); + nm_assert(self->priv.p->commit_reentrant_count == 1); + self->priv.p->commit_reentrant_count--; + _nm_l3cfg_emit_signal_notify_simple(self, NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT); } @@ -3141,7 +3509,7 @@ nm_l3cfg_commit_type_register(NML3Cfg * self, linked = FALSE; c_list_for_each_entry (h, &self->priv.p->commit_type_lst_head, commit_type_lst) { if (handle->commit_type >= h->commit_type) { - c_list_link_before(&self->priv.p->commit_type_lst_head, &handle->commit_type_lst); + c_list_link_before(&h->commit_type_lst, &handle->commit_type_lst); linked = TRUE; break; } @@ -3178,7 +3546,7 @@ nm_l3cfg_get_combined_l3cd(NML3Cfg *self, gboolean get_commited) if (get_commited) return self->priv.p->combined_l3cd_commited; - _l3cfg_update_combined_config(self, FALSE, NULL, NULL, NULL); + _l3cfg_update_combined_config(self, FALSE, FALSE, NULL, NULL); return self->priv.p->combined_l3cd_merged; } @@ -3220,8 +3588,7 @@ nm_l3cfg_has_commited_ip6_addresses_pending_dad(NML3Cfg *self) nmp_lookup_init_object(&plat_lookup, NMP_OBJECT_TYPE_IP6_ADDRESS, self->priv.ifindex); - nm_platform_iter_obj_for_each(&iter, self->priv.platform, &plat_lookup, &plat_obj) - { + nm_platform_iter_obj_for_each (&iter, self->priv.platform, &plat_lookup, &plat_obj) { const NMPlatformIP6Address *plat_addr = NMP_OBJECT_CAST_IP6_ADDRESS(plat_obj); const NMDedupMultiEntry * l3cd_entry; @@ -3243,6 +3610,47 @@ nm_l3cfg_has_commited_ip6_addresses_pending_dad(NML3Cfg *self) /*****************************************************************************/ +NML3IPv4LL * +nm_l3cfg_get_ipv4ll(NML3Cfg *self) +{ + g_return_val_if_fail(NM_IS_L3CFG(self), NULL); + + return self->priv.p->ipv4ll; +} + +NML3IPv4LL * +nm_l3cfg_access_ipv4ll(NML3Cfg *self) +{ + g_return_val_if_fail(NM_IS_L3CFG(self), NULL); + + if (self->priv.p->ipv4ll) + return nm_l3_ipv4ll_ref(self->priv.p->ipv4ll); + + /* We return the reference. But the NML3IPv4LL instance + * will call _nm_l3cfg_unregister_ipv4ll() when it gets + * destroyed. + * + * We don't have weak references, but NML3Cfg and NML3IPv4LL + * cooperate to handle this reference. */ + self->priv.p->ipv4ll = nm_l3_ipv4ll_new(self); + return self->priv.p->ipv4ll; +} + +void +_nm_l3cfg_unregister_ipv4ll(NML3Cfg *self) +{ + nm_assert(NM_IS_L3CFG(self)); + + /* we don't own the refernce to "self->priv.p->ipv4ll", but + * when that instance gets destroyed, we get called back to + * forget about it. Basically, it's like a weak pointer. */ + + nm_assert(self->priv.p->ipv4ll); + self->priv.p->ipv4ll = NULL; +} + +/*****************************************************************************/ + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { @@ -3273,7 +3681,7 @@ nm_l3cfg_init(NML3Cfg *self) self->priv.p = G_TYPE_INSTANCE_GET_PRIVATE(self, NM_TYPE_L3CFG, NML3CfgPrivate); c_list_init(&self->priv.p->acd_lst_head); - c_list_init(&self->priv.p->acd_notify_complete_lst_head); + c_list_init(&self->priv.p->acd_event_notify_lst_head); c_list_init(&self->priv.p->commit_type_lst_head); } @@ -3310,6 +3718,7 @@ finalize(GObject *object) NML3Cfg *self = NM_L3CFG(object); nm_assert(!self->priv.p->l3_config_datas); + nm_assert(!self->priv.p->ipv4ll); nm_assert(c_list_is_empty(&self->priv.p->commit_type_lst_head)); @@ -3320,7 +3729,7 @@ finalize(GObject *object) _l3_acd_data_prune(self, TRUE); nm_assert(c_list_is_empty(&self->priv.p->acd_lst_head)); - nm_assert(c_list_is_empty(&self->priv.p->acd_notify_complete_lst_head)); + nm_assert(c_list_is_empty(&self->priv.p->acd_event_notify_lst_head)); nm_assert(nm_g_hash_table_size(self->priv.p->acd_lst_hash) == 0); nm_clear_pointer(&self->priv.p->acd_lst_hash, g_hash_table_unref); @@ -3328,6 +3737,11 @@ finalize(GObject *object) nm_clear_g_source_inst(&self->priv.p->nacd_source); nm_clear_g_source_inst(&self->priv.p->nacd_instance_ensure_retry); + nm_clear_pointer(&self->priv.p->last_addresses_4, g_ptr_array_unref); + nm_clear_pointer(&self->priv.p->last_addresses_6, g_ptr_array_unref); + nm_clear_pointer(&self->priv.p->last_routes_4, g_ptr_array_unref); + nm_clear_pointer(&self->priv.p->last_routes_6, g_ptr_array_unref); + nm_clear_g_source(&self->priv.p->routes_temporary_not_available_id); nm_clear_pointer(&self->priv.p->routes_temporary_not_available_hash, g_hash_table_unref); diff --git a/src/nm-l3cfg.h b/src/nm-l3cfg.h index 9f957ae10c..e83bdc9163 100644 --- a/src/nm-l3cfg.h +++ b/src/nm-l3cfg.h @@ -6,6 +6,9 @@ #include "platform/nmp-object.h" #include "nm-l3-config-data.h" +#define NM_L3CFG_CONFIG_PRIORITY_IPV4LL 0 +#define NM_ACD_TIMEOUT_RFC5227_MSEC 9000u + #define NM_TYPE_L3CFG (nm_l3cfg_get_type()) #define NM_L3CFG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_L3CFG, NML3Cfg)) #define NM_L3CFG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_L3CFG, NML3CfgClass)) @@ -18,10 +21,76 @@ #define NM_L3CFG_SIGNAL_NOTIFY "l3cfg-notify" +typedef enum _nm_packed { + NM_L3_ACD_DEFEND_TYPE_NONE, + NM_L3_ACD_DEFEND_TYPE_NEVER, + NM_L3_ACD_DEFEND_TYPE_ONCE, + NM_L3_ACD_DEFEND_TYPE_ALWAYS, +} NML3AcdDefendType; + +typedef enum _nm_packed { + NM_L3_ACD_ADDR_STATE_INIT, + NM_L3_ACD_ADDR_STATE_PROBING, + NM_L3_ACD_ADDR_STATE_USED, + NM_L3_ACD_ADDR_STATE_READY, + NM_L3_ACD_ADDR_STATE_DEFENDING, + NM_L3_ACD_ADDR_STATE_CONFLICT, + NM_L3_ACD_ADDR_STATE_EXTERNAL_REMOVED, +} NML3AcdAddrState; + +typedef struct { + const NMPObject * obj; + const NML3ConfigData *l3cd; + gconstpointer tag; + + struct { + guint32 acd_timeout_msec_track; + NML3AcdDefendType acd_defend_type_track; + bool acd_dirty_track : 1; + bool acd_failed_notified_track : 1; + } _priv; + +} NML3AcdAddrTrackInfo; + +typedef struct { + in_addr_t addr; + guint n_track_infos; + NML3AcdAddrState state; + NML3Cfg * l3cfg; + const NML3AcdAddrTrackInfo *track_infos; +} NML3AcdAddrInfo; + +static inline const NML3AcdAddrTrackInfo * +nm_l3_acd_addr_info_find_track_info(const NML3AcdAddrInfo *addr_info, + gconstpointer tag, + const NML3ConfigData * l3cd, + const NMPObject * obj) +{ + guint i; + const NML3AcdAddrTrackInfo *ti; + + nm_assert(addr_info); + + /* we always expect that the number n_track_infos is reasonably small. Hence, + * a naive linear search is simplest and fastest (e.g. we don't have a hash table). */ + + for (i = 0, ti = addr_info->track_infos; i < addr_info->n_track_infos; i++, ti++) { + if (l3cd && ti->l3cd != l3cd) + continue; + if (tag && ti->tag != tag) + continue; + if (obj && ti->obj != obj) + continue; + return ti; + } + + return NULL; +} + typedef enum { NM_L3_CONFIG_NOTIFY_TYPE_ROUTES_TEMPORARY_NOT_AVAILABLE_EXPIRED, - NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED, + NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT, /* emitted at the end of nm_l3cfg_platform_commit(). */ NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT, @@ -38,24 +107,19 @@ typedef enum { * notifications without also subscribing directly to the platform. */ NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE, + NM_L3_CONFIG_NOTIFY_TYPE_IPV4LL_EVENT, + _NM_L3_CONFIG_NOTIFY_TYPE_NUM, } NML3ConfigNotifyType; -typedef struct { - const NMPObject * obj; - const NML3ConfigData *l3cd; - gconstpointer tag; -} NML3ConfigNotifyPayloadAcdFailedSource; +struct _NML3IPv4LL; typedef struct { NML3ConfigNotifyType notify_type; union { struct { - in_addr_t addr; - guint sources_len; - bool probe_result : 1; - const NML3ConfigNotifyPayloadAcdFailedSource *sources; - } acd_completed; + NML3AcdAddrInfo info; + } acd_event; struct { const NMPObject * obj; @@ -65,6 +129,10 @@ typedef struct { struct { guint32 obj_type_flags; } platform_change_on_idle; + + struct { + struct _NML3IPv4LL *ipv4ll; + } ipv4ll_event; }; } NML3ConfigNotifyData; @@ -79,7 +147,6 @@ struct _NML3Cfg { const NMPObject * plobj; const NMPObject * plobj_next; int ifindex; - bool changed_configs : 1; } priv; }; @@ -205,6 +272,7 @@ gboolean nm_l3cfg_add_config(NML3Cfg * self, guint32 default_route_metric_6, guint32 default_route_penalty_4, guint32 default_route_penalty_6, + NML3AcdDefendType acd_defend_type, guint32 acd_timeout_msec, NML3ConfigMergeFlags merge_flags); @@ -250,6 +318,10 @@ void nm_l3cfg_commit_on_idle_schedule(NML3Cfg *self); /*****************************************************************************/ +const NML3AcdAddrInfo *nm_l3cfg_get_acd_addr_info(NML3Cfg *self, in_addr_t addr); + +/*****************************************************************************/ + NML3CfgCommitType nm_l3cfg_commit_type_get(NML3Cfg *self); typedef struct _NML3CfgCommitTypeHandle NML3CfgCommitTypeHandle; @@ -273,4 +345,12 @@ gboolean nm_l3cfg_has_commited_ip6_addresses_pending_dad(NML3Cfg *self); /*****************************************************************************/ +struct _NML3IPv4LL *nm_l3cfg_get_ipv4ll(NML3Cfg *self); + +struct _NML3IPv4LL *nm_l3cfg_access_ipv4ll(NML3Cfg *self); + +void _nm_l3cfg_unregister_ipv4ll(NML3Cfg *self); + +/*****************************************************************************/ + #endif /* __NM_L3CFG_H__ */ diff --git a/src/nm-logging.h b/src/nm-logging.h index b2251c929d..cfaffa9885 100644 --- a/src/nm-logging.h +++ b/src/nm-logging.h @@ -17,18 +17,6 @@ #define NM_LOG_CONFIG_BACKEND_SYSLOG "syslog" #define NM_LOG_CONFIG_BACKEND_JOURNAL "journal" -static inline NMLogDomain -LOGD_IP_from_af(int addr_family) -{ - switch (addr_family) { - case AF_INET: - return LOGD_IP4; - case AF_INET6: - return LOGD_IP6; - } - g_return_val_if_reached(LOGD_NONE); -} - #define nm_log_err(domain, ...) nm_log(LOGL_ERR, (domain), NULL, NULL, __VA_ARGS__) #define nm_log_warn(domain, ...) nm_log(LOGL_WARN, (domain), NULL, NULL, __VA_ARGS__) #define nm_log_info(domain, ...) nm_log(LOGL_INFO, (domain), NULL, NULL, __VA_ARGS__) diff --git a/src/nm-manager.c b/src/nm-manager.c index 46f81c7cb4..03906c8435 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -142,7 +142,7 @@ typedef struct { GArray *capabilities; - CList active_connections_lst_head; + CList active_connections_lst_head; /* Oldest ACs at the beginning */ CList async_op_lst_head; guint ac_cleanup_id; NMActiveConnection *primary_connection; @@ -941,7 +941,7 @@ active_connection_add(NMManager *self, NMActiveConnection *active) nm_assert(NM_IS_ACTIVE_CONNECTION(active)); nm_assert(!c_list_is_linked(&active->active_connections_lst)); - c_list_link_front(&priv->active_connections_lst_head, &active->active_connections_lst); + c_list_link_tail(&priv->active_connections_lst_head, &active->active_connections_lst); g_object_ref(active); g_signal_connect(active, @@ -987,7 +987,7 @@ active_connection_find( nm_assert(!sett_conn || NM_IS_SETTINGS_CONNECTION(sett_conn)); nm_assert(!out_all_matching || !*out_all_matching); - c_list_for_each_entry (ac, &priv->active_connections_lst_head, active_connections_lst) { + c_list_for_each_entry_prev (ac, &priv->active_connections_lst_head, active_connections_lst) { NMSettingsConnection *ac_conn; ac_conn = nm_active_connection_get_settings_connection(ac); @@ -1013,8 +1013,37 @@ active_connection_find( g_ptr_array_add(all, g_object_ref(ac)); } - if (!best_ac) - return NULL; + if (!best_ac) { + AsyncOpData *async_op_data; + + c_list_for_each_entry (async_op_data, &priv->async_op_lst_head, async_op_lst) { + NMSettingsConnection *ac_conn; + + ac = async_op_data->ac_auth.active; + ac_conn = nm_active_connection_get_settings_connection(ac); + if (sett_conn && sett_conn != ac_conn) + continue; + if (uuid && !nm_streq0(uuid, nm_settings_connection_get_uuid(ac_conn))) + continue; + + if (!out_all_matching) + return ac; + + if (!best_ac) { + best_ac = ac; + continue; + } + + if (!all) { + all = g_ptr_array_new_with_free_func(g_object_unref); + g_ptr_array_add(all, g_object_ref(best_ac)); + } + g_ptr_array_add(all, g_object_ref(ac)); + } + + if (!best_ac) + return NULL; + } /* as an optimization, we only allocate out_all_matching, if there are more * than one result. If there is only one result, we only return the single @@ -2495,16 +2524,7 @@ nm_manager_device_auth_request(NMManager * self, &error)) goto fail_on_idle; - /* Validate the request */ chain = nm_auth_chain_new_subject(subject, context, device_auth_done_cb, self); - if (!chain) { - g_set_error(&error, - NM_MANAGER_ERROR, - NM_MANAGER_ERROR_PERMISSION_DENIED, - NM_UTILS_ERROR_MSG_REQ_AUTH_FAILED); - goto fail_on_idle; - } - if (cancellable) nm_auth_chain_set_cancellable(chain, cancellable); @@ -5184,6 +5204,7 @@ _internal_activation_auth_done(NMManager * self, return; fail: + _delete_volatile_connection_do(self, nm_active_connection_get_settings_connection(active)); nm_assert(error_desc || error); nm_active_connection_set_state_fail(active, NM_ACTIVE_CONNECTION_STATE_REASON_UNKNOWN, @@ -5452,6 +5473,8 @@ _activation_auth_done(NMManager * self, return; fail: + _delete_volatile_connection_do(self, connection); + nm_audit_log_connection_op(NM_AUDIT_OP_CONN_ACTIVATE, connection, FALSE, @@ -6038,15 +6061,7 @@ impl_manager_deactivate_connection(NMDBusObject * obj, &error)) goto done; - /* Validate the user request */ chain = nm_auth_chain_new_subject(subject, invocation, deactivate_net_auth_done_cb, self); - if (!chain) { - error = g_error_new_literal(NM_MANAGER_ERROR, - NM_MANAGER_ERROR_PERMISSION_DENIED, - NM_UTILS_ERROR_MSG_REQ_AUTH_FAILED); - goto done; - } - c_list_link_tail(&priv->auth_lst_head, nm_auth_chain_parent_lst_list(chain)); nm_auth_chain_set_data(chain, "path", g_strdup(active_path), g_free); nm_auth_chain_add_call(chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, TRUE); @@ -7857,7 +7872,9 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) break; case PROP_ACTIVE_CONNECTIONS: ptrarr = g_ptr_array_new(); - c_list_for_each_entry (ac, &priv->active_connections_lst_head, active_connections_lst) { + c_list_for_each_entry_prev (ac, + &priv->active_connections_lst_head, + active_connections_lst) { path = nm_dbus_object_get_path(NM_DBUS_OBJECT(ac)); if (path) g_ptr_array_add(ptrarr, g_strdup(path)); diff --git a/src/nm-manager.h b/src/nm-manager.h index 75f8a673d0..fcb29cf562 100644 --- a/src/nm-manager.h +++ b/src/nm-manager.h @@ -72,6 +72,7 @@ NMState nm_manager_get_state(NMManager *manager); const CList *nm_manager_get_active_connections(NMManager *manager); +/* From least recently activated */ #define nm_manager_for_each_active_connection(manager, iter, tmp_list) \ for (tmp_list = nm_manager_get_active_connections(manager), \ iter = c_list_entry(tmp_list->next, NMActiveConnection, active_connections_lst); \ @@ -86,6 +87,22 @@ const CList *nm_manager_get_active_connections(NMManager *manager); NMActiveConnection, \ active_connections_lst)) +/* From most recently activated */ +#define nm_manager_for_each_active_connection_prev(manager, iter, tmp_list) \ + for (tmp_list = nm_manager_get_active_connections(manager), \ + iter = c_list_entry(tmp_list->prev, NMActiveConnection, active_connections_lst); \ + ({ \ + const gboolean _has_prev = (&iter->active_connections_lst != tmp_list); \ + \ + if (!_has_prev) \ + iter = NULL; \ + _has_prev; \ + }); \ + iter = c_list_entry(iter->active_connections_lst.prev, \ + NMActiveConnection, \ + active_connections_lst)) + +/* From least recently activated */ #define nm_manager_for_each_active_connection_safe(manager, iter, tmp_list, iter_safe) \ for (tmp_list = nm_manager_get_active_connections(manager), iter_safe = tmp_list->next; ({ \ if (iter_safe != tmp_list) { \ diff --git a/src/nm-netns.c b/src/nm-netns.c index 2970e45c91..879bdee237 100644 --- a/src/nm-netns.c +++ b/src/nm-netns.c @@ -126,6 +126,19 @@ _l3cfg_weak_notify(gpointer data, GObject *where_the_object_was) } NML3Cfg * +nm_netns_get_l3cfg(NMNetns *self, int ifindex) +{ + NMNetnsPrivate *priv; + + g_return_val_if_fail(NM_IS_NETNS(self), NULL); + g_return_val_if_fail(ifindex > 0, NULL); + + priv = NM_NETNS_GET_PRIVATE(self); + + return g_hash_table_lookup(priv->l3cfgs, &ifindex); +} + +NML3Cfg * nm_netns_access_l3cfg(NMNetns *self, int ifindex) { NMNetnsPrivate *priv; @@ -453,7 +466,7 @@ dispose(GObject *object) g_signal_handlers_disconnect_by_data(priv->platform, &priv->_self_signal_user_data); g_clear_object(&priv->platform); - g_clear_pointer(&priv->l3cfgs, g_hash_table_unref); + nm_clear_pointer(&priv->l3cfgs, g_hash_table_unref); nm_clear_pointer(&priv->rules_manager, nmp_rules_manager_unref); diff --git a/src/nm-netns.h b/src/nm-netns.h index bb0c955ef3..5ae0c294b3 100644 --- a/src/nm-netns.h +++ b/src/nm-netns.h @@ -31,6 +31,8 @@ struct _NMDedupMultiIndex *nm_netns_get_multi_idx(NMNetns *self); #define NM_NETNS_GET (nm_netns_get()) +NML3Cfg *nm_netns_get_l3cfg(NMNetns *self, int ifindex); + NML3Cfg *nm_netns_access_l3cfg(NMNetns *netns, int ifindex); /*****************************************************************************/ diff --git a/src/nm-pacrunner-manager.c b/src/nm-pacrunner-manager.c index 0fb3198481..7c1c2c56a5 100644 --- a/src/nm-pacrunner-manager.c +++ b/src/nm-pacrunner-manager.c @@ -126,11 +126,13 @@ NM_AUTO_DEFINE_FCN0(NMPacrunnerConfId *, _nm_auto_unref_conf_id, conf_id_unref); static void get_ip_domains(GPtrArray *domains, NMIPConfig *ip_config) { - NMDedupMultiIter ipconf_iter; - char * cidr; - guint i, num; - char sbuf[NM_UTILS_INET_ADDRSTRLEN]; - int addr_family; + NMDedupMultiIter ipconf_iter; + char * cidr; + guint i, num; + char sbuf[NM_UTILS_INET_ADDRSTRLEN]; + int addr_family; + const NMPlatformIPAddress *address; + const NMPlatformIPRoute * routes; if (!ip_config) return; @@ -145,47 +147,20 @@ get_ip_domains(GPtrArray *domains, NMIPConfig *ip_config) for (i = 0; i < num; i++) g_ptr_array_add(domains, g_strdup(nm_ip_config_get_domain(ip_config, i))); - if (addr_family == AF_INET) { - const NMPlatformIP4Address *address; - - nm_ip_config_iter_ip4_address_for_each (&ipconf_iter, (NMIP4Config *) ip_config, &address) { - cidr = g_strdup_printf("%s/%u", - _nm_utils_inet4_ntop(address->address, sbuf), - address->plen); - g_ptr_array_add(domains, cidr); - } - } else { - const NMPlatformIP6Address *address; - - nm_ip_config_iter_ip6_address_for_each (&ipconf_iter, (NMIP6Config *) ip_config, &address) { - cidr = g_strdup_printf("%s/%u", - _nm_utils_inet6_ntop(&address->address, sbuf), - address->plen); - g_ptr_array_add(domains, cidr); - } + nm_ip_config_iter_ip_address_for_each (&ipconf_iter, ip_config, &address) { + cidr = g_strdup_printf("%s/%u", + nm_utils_inet_ntop(addr_family, address->address_ptr, sbuf), + address->plen); + g_ptr_array_add(domains, cidr); } - if (addr_family == AF_INET) { - const NMPlatformIP4Route *routes; - - nm_ip_config_iter_ip4_route_for_each (&ipconf_iter, (NMIP4Config *) ip_config, &routes) { - if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(routes)) - continue; - cidr = - g_strdup_printf("%s/%u", _nm_utils_inet4_ntop(routes->network, sbuf), routes->plen); - g_ptr_array_add(domains, cidr); - } - } else { - const NMPlatformIP6Route *routes; - - nm_ip_config_iter_ip6_route_for_each (&ipconf_iter, (NMIP6Config *) ip_config, &routes) { - if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(routes)) - continue; - cidr = g_strdup_printf("%s/%u", - _nm_utils_inet6_ntop(&routes->network, sbuf), - routes->plen); - g_ptr_array_add(domains, cidr); - } + nm_ip_config_iter_ip_route_for_each (&ipconf_iter, ip_config, &routes) { + if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT(routes)) + continue; + cidr = g_strdup_printf("%s/%u", + nm_utils_inet_ntop(addr_family, routes->network_ptr, sbuf), + routes->plen); + g_ptr_array_add(domains, cidr); } } diff --git a/src/nm-policy.c b/src/nm-policy.c index 038b89cf8a..568c55eefb 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -64,14 +64,7 @@ typedef struct { NMActiveConnection *default_ac4, *activating_ac4; NMActiveConnection *default_ac6, *activating_ac6; - struct { - GInetAddress *addr; - GResolver * resolver; - GCancellable *cancellable; - } lookup; - NMDnsManager *dns_manager; - gulong config_changed_id; guint reset_retries_id; /* idle handler for resetting the retries count */ @@ -117,6 +110,8 @@ _PRIV_TO_SELF(NMPolicyPrivate *priv) /*****************************************************************************/ #define _NMLOG_PREFIX_NAME "policy" +#undef _NMLOG_ENABLED +#define _NMLOG_ENABLED(level, domain) (nm_logging_enabled((level), (domain))) #define _NMLOG(level, domain, ...) \ G_STMT_START \ { \ @@ -131,6 +126,7 @@ _PRIV_TO_SELF(NMPolicyPrivate *priv) /*****************************************************************************/ +static void update_system_hostname(NMPolicy *self, const char *msg); static void schedule_activate_all(NMPolicy *self); static void schedule_activate_check(NMPolicy *self, NMDevice *device); static NMDevice *get_default_device(NMPolicy *self, int addr_family); @@ -359,11 +355,11 @@ device_ip6_prefix_delegated(NMDevice *device, NMPlatformIP6Address *prefix, gpoi delegation->device = device; delegation->prefix = *prefix; - /* The newly activated connections are added to the list beginning, - * so traversing it from the beginning makes it likely for newly + /* The newly activated connections are added to the end of the list, + * so traversing it from the end makes it likely for newly * activated connections that have no subnet assigned to be served * first. That is a simple yet fair policy, which is good. */ - nm_manager_for_each_active_connection (priv->manager, ac, tmp_list) { + nm_manager_for_each_active_connection_prev (priv->manager, ac, tmp_list) { NMDevice *to_device; to_device = nm_active_connection_get_device(ac); @@ -588,12 +584,6 @@ _set_hostname(NMPolicy *self, const char *new_hostname, const char *msg) * there was no valid hostname to start with. */ - /* Clear lookup addresses if we have a hostname, so that we don't - * restart the reverse lookup thread later. - */ - if (new_hostname) - g_clear_object(&priv->lookup.addr); - /* Update the DNS only if the hostname is actually * going to change. */ @@ -639,57 +629,168 @@ _set_hostname(NMPolicy *self, const char *new_hostname, const char *msg) g_object_ref(self)); } -static void -lookup_callback(GObject *source, GAsyncResult *result, gpointer user_data) +typedef struct { + NMDevice *device; + int priority; + bool from_dhcp : 1; + bool from_dns : 1; + + union { + struct { + bool ip_6; + bool ip_4; + }; + bool ip_x[2]; + }; +} DeviceHostnameInfo; + +static int +device_hostname_info_compare(gconstpointer a, gconstpointer b) { - NMPolicy * self; - NMPolicyPrivate *priv; - gs_free char * hostname = NULL; - gs_free_error GError *error = NULL; + const DeviceHostnameInfo *info1 = a; + const DeviceHostnameInfo *info2 = b; - hostname = g_resolver_lookup_by_address_finish(G_RESOLVER(source), result, &error); - if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - return; + NM_CMP_FIELD(info1, info2, priority); - self = user_data; - priv = NM_POLICY_GET_PRIVATE(self); + return 0; +} + +NM_CON_DEFAULT_NOP("hostname.from-dhcp"); +NM_CON_DEFAULT_NOP("hostname.from-dns-lookup"); +NM_CON_DEFAULT_NOP("hostname.only-from-default"); + +static gboolean +device_get_hostname_property_boolean(NMDevice *device, const char *name) +{ + NMSettingHostname *s_hostname; + char buf[128]; + int value; + + nm_assert(NM_IN_STRSET(name, + NM_SETTING_HOSTNAME_FROM_DHCP, + NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, + NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT)); + + s_hostname = nm_device_get_applied_setting(device, NM_TYPE_SETTING_HOSTNAME); + + if (s_hostname) { + g_object_get(s_hostname, name, &value, NULL); + if (NM_IN_SET(value, NM_TERNARY_FALSE, NM_TERNARY_TRUE)) + return value; + } + + return nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, + nm_sprintf_buf(buf, "hostname.%s", name), + device, + NM_TERNARY_FALSE, + NM_TERNARY_TRUE, + NM_TERNARY_TRUE); +} + +static int +device_get_hostname_priority(NMDevice *device) +{ + NMSettingHostname *s_hostname; + int priority; - g_clear_object(&priv->lookup.cancellable); + s_hostname = nm_device_get_applied_setting(device, NM_TYPE_SETTING_HOSTNAME); + if (s_hostname) { + priority = nm_setting_hostname_get_priority(s_hostname); + if (priority != 0) + return priority; + } - if (hostname) - _set_hostname(self, hostname, "from address lookup"); - else - _set_hostname(self, NULL, error->message); + return nm_config_data_get_connection_default_int64(NM_CONFIG_GET_DATA, + NM_CON_DEFAULT("hostname.priority"), + device, + G_MININT, + G_MAXINT, + 100); +} + +static GArray * +build_device_hostname_infos(NMPolicy *self) +{ + NMPolicyPrivate * priv = NM_POLICY_GET_PRIVATE(self); + const CList * tmp_clist; + NMActiveConnection *ac; + GArray * array = NULL; + + nm_manager_for_each_active_connection (priv->manager, ac, tmp_clist) { + DeviceHostnameInfo *info; + NMDevice * device; + gboolean only_from_default; + + device = nm_active_connection_get_device(ac); + if (!device) + continue; + + only_from_default = + device_get_hostname_property_boolean(device, NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT); + if (only_from_default && ac != priv->default_ac4 && ac != priv->default_ac6) + continue; + + if (!array) + array = g_array_sized_new(FALSE, FALSE, sizeof(DeviceHostnameInfo), 4); + + info = nm_g_array_append_new(array, DeviceHostnameInfo); + *info = (DeviceHostnameInfo){ + .device = device, + .priority = device_get_hostname_priority(device), + .from_dhcp = + device_get_hostname_property_boolean(device, NM_SETTING_HOSTNAME_FROM_DHCP), + .from_dns = + device_get_hostname_property_boolean(device, NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP), + .ip_4 = priv->default_ac4 || !only_from_default, + .ip_6 = priv->default_ac6 || !only_from_default, + }; + } + + if (array && array->len > 1) { + const DeviceHostnameInfo *info0; + guint i; + + g_array_sort(array, device_hostname_info_compare); + + info0 = &g_array_index(array, DeviceHostnameInfo, 0); + if (info0->priority < 0) { + for (i = 1; i < array->len; i++) { + const DeviceHostnameInfo *info = &g_array_index(array, DeviceHostnameInfo, i); + + if (info->priority > info0->priority) { + g_array_set_size(array, i); + break; + } + } + } + } + + return array; } static void -lookup_by_address(NMPolicy *self) +device_dns_lookup_done(NMDevice *device, gpointer user_data) { - NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE(self); + NMPolicy *self = user_data; + + g_signal_handlers_disconnect_by_func(device, device_dns_lookup_done, self); - nm_clear_g_cancellable(&priv->lookup.cancellable); - priv->lookup.cancellable = g_cancellable_new(); - g_resolver_lookup_by_address_async(priv->lookup.resolver, - priv->lookup.addr, - priv->lookup.cancellable, - lookup_callback, - self); + update_system_hostname(self, "lookup finished"); } static void update_system_hostname(NMPolicy *self, const char *msg) { - NMPolicyPrivate * priv = NM_POLICY_GET_PRIVATE(self); - const char * configured_hostname; - gs_free char * temp_hostname = NULL; - const char * dhcp_hostname, *p; - NMIP4Config * ip4_config; - NMIP6Config * ip6_config; - gboolean external_hostname = FALSE; - const NMPlatformIP4Address *addr4; - const NMPlatformIP6Address *addr6; - NMDevice * device; - NMDhcpConfig * dhcp_config; + NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE(self); + const char * configured_hostname; + gs_free char * temp_hostname = NULL; + const char * dhcp_hostname, *p; + gboolean external_hostname = FALSE; + NMDhcpConfig * dhcp_config; + gs_unref_array GArray *infos = NULL; + DeviceHostnameInfo * info; + guint i; + int IS_IPv4; g_return_if_fail(self != NULL); @@ -700,8 +801,6 @@ update_system_hostname(NMPolicy *self, const char *msg) _LOGT(LOGD_DNS, "set-hostname: updating hostname (%s)", msg); - nm_clear_g_cancellable(&priv->lookup.cancellable); - /* Check if the hostname was set externally to NM, so that in that case * we can avoid to fallback to the one we got when we started. * Consider "not specific" hostnames as equal. */ @@ -729,10 +828,9 @@ update_system_hostname(NMPolicy *self, const char *msg) /* Hostname precedence order: * * 1) a configured hostname (from settings) - * 2) automatic hostname from the default device's config (DHCP, VPN, etc) - * 3) the last hostname set outside NM - * 4) reverse-DNS of the best device's IPv4 address - * + * 2) automatic hostname from DHCP of eligible interfaces + * 3) reverse-DNS lookup of the first address on eligible interfaces + * 4) the last hostname set outside NM */ /* Try a persistent hostname first */ @@ -743,40 +841,73 @@ update_system_hostname(NMPolicy *self, const char *msg) return; } - if (priv->default_ac4) { - /* Grab a hostname out of the device's DHCP4 config */ - dhcp_config = nm_device_get_dhcp_config(get_default_device(self, AF_INET), AF_INET); - if (dhcp_config) { - dhcp_hostname = nm_dhcp_config_get_option(dhcp_config, "host_name"); - if (dhcp_hostname && dhcp_hostname[0]) { - p = nm_str_skip_leading_spaces(dhcp_hostname); - if (p[0]) { - _set_hostname(self, p, "from DHCPv4"); - priv->dhcp_hostname = TRUE; - return; + infos = build_device_hostname_infos(self); + + if (infos && _LOGT_ENABLED(LOGD_DNS)) { + _LOGT(LOGD_DNS, "device hostname info:"); + for (i = 0; i < infos->len; i++) { + info = &g_array_index(infos, DeviceHostnameInfo, i); + _LOGT(LOGD_DNS, + " - prio:%4d ipv:%c%c dhcp:%d dns:%d dev:%s", + info->priority, + info->ip_4 ? '4' : '-', + info->ip_6 ? '6' : '-', + info->from_dhcp, + info->from_dns, + nm_device_get_iface(info->device)); + } + } + + for (i = 0; infos && i < infos->len; i++) { + info = &g_array_index(infos, DeviceHostnameInfo, i); + g_signal_handlers_disconnect_by_func(info->device, device_dns_lookup_done, self); + for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { + const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + + if (info->from_dhcp && info->ip_x[IS_IPv4]) { + dhcp_config = nm_device_get_dhcp_config(info->device, addr_family); + if (dhcp_config) { + dhcp_hostname = + nm_dhcp_config_get_option(dhcp_config, IS_IPv4 ? "host_name" : "fqdn_fqdn"); + if (dhcp_hostname && dhcp_hostname[0]) { + p = nm_str_skip_leading_spaces(dhcp_hostname); + if (p[0]) { + _set_hostname(self, p, IS_IPv4 ? "from DHCPv4" : "from DHCPv6"); + priv->dhcp_hostname = TRUE; + return; + } + _LOGW(LOGD_DNS, + "set-hostname: DHCPv%c-provided hostname '%s' looks invalid; " + "ignoring it", + nm_utils_addr_family_to_char(addr_family), + dhcp_hostname); + } } - _LOGW(LOGD_DNS, - "set-hostname: DHCPv4-provided hostname '%s' looks invalid; ignoring it", - dhcp_hostname); } } - } - if (priv->default_ac6) { - /* Grab a hostname out of the device's DHCP6 config */ - dhcp_config = nm_device_get_dhcp_config(get_default_device(self, AF_INET6), AF_INET6); - if (dhcp_config) { - dhcp_hostname = nm_dhcp_config_get_option(dhcp_config, "fqdn_fqdn"); - if (dhcp_hostname && dhcp_hostname[0]) { - p = nm_str_skip_leading_spaces(dhcp_hostname); - if (p[0]) { - _set_hostname(self, p, "from DHCPv6"); - priv->dhcp_hostname = TRUE; - return; + if (priv->hostname_mode != NM_POLICY_HOSTNAME_MODE_DHCP) { + for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { + const int addr_family = IS_IPv4 ? AF_INET : AF_INET6; + + if (info->from_dns && info->ip_x[IS_IPv4]) { + const char *result; + gboolean wait; + + result = + nm_device_get_hostname_from_dns_lookup(info->device, addr_family, &wait); + if (result) { + _set_hostname(self, result, "from address lookup"); + return; + } + if (wait) { + g_signal_connect(info->device, + NM_DEVICE_DNS_LOOKUP_DONE, + (GCallback) device_dns_lookup_done, + self); + return; + } } - _LOGW(LOGD_DNS, - "set-hostname: DHCPv6-provided hostname '%s' looks invalid; ignoring it", - dhcp_hostname); } } } @@ -800,14 +931,6 @@ update_system_hostname(NMPolicy *self, const char *msg) priv->dhcp_hostname = FALSE; - if (!priv->default_ac4 && !priv->default_ac6) { - /* No best device; fall back to the last hostname set externally - * to NM or if there wasn't one, 'localhost.localdomain' - */ - _set_hostname(self, priv->orig_hostname, "no default device"); - return; - } - /* If no automatically-configured hostname, try using the last hostname * set externally to NM */ @@ -816,30 +939,7 @@ update_system_hostname(NMPolicy *self, const char *msg) return; } - /* No configured hostname, no automatically determined hostname, and no - * bootup hostname. Start reverse DNS of the current IPv4 or IPv6 address. - */ - device = get_default_device(self, AF_INET); - ip4_config = device ? nm_device_get_ip4_config(device) : NULL; - - device = get_default_device(self, AF_INET6); - ip6_config = device ? nm_device_get_ip6_config(device) : NULL; - - if (ip4_config && (addr4 = nm_ip4_config_get_first_address(ip4_config))) { - g_clear_object(&priv->lookup.addr); - priv->lookup.addr = - g_inet_address_new_from_bytes((guint8 *) &addr4->address, G_SOCKET_FAMILY_IPV4); - } else if (ip6_config && (addr6 = nm_ip6_config_get_first_address(ip6_config))) { - g_clear_object(&priv->lookup.addr); - priv->lookup.addr = - g_inet_address_new_from_bytes((guint8 *) &addr6->address, G_SOCKET_FAMILY_IPV6); - } else { - /* No valid IP config; fall back to localhost.localdomain */ - _set_hostname(self, NULL, "no IP config"); - return; - } - - lookup_by_address(self); + _set_hostname(self, NULL, "no hostname found"); } static void @@ -1801,6 +1901,8 @@ device_state_changed(NMDevice * device, switch (new_state) { case NM_DEVICE_STATE_FAILED: + g_signal_handlers_disconnect_by_func(device, device_dns_lookup_done, self); + /* Mark the connection invalid if it failed during activation so that * it doesn't get automatically chosen over and over and over again. */ @@ -1939,6 +2041,8 @@ device_state_changed(NMDevice * device, ip6_remove_device_prefix_delegations(self, device); break; case NM_DEVICE_STATE_DISCONNECTED: + g_signal_handlers_disconnect_by_func(device, device_dns_lookup_done, self); + /* Reset retry counts for a device's connections when carrier on; if cable * was unplugged and plugged in again, we should try to reconnect. */ @@ -2412,40 +2516,6 @@ firewall_state_changed(NMFirewallManager *manager, gboolean initialized_now, gpo } static void -dns_config_changed(NMDnsManager *dns_manager, gpointer user_data) -{ - NMPolicy * self = (NMPolicy *) user_data; - NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE(self); - - /* Restart a thread for reverse-DNS lookup after we are signalled that - * DNS changed. Because the result from a previous run may not be right - * (race in updating DNS and doing the reverse lookup). - */ - - nm_clear_g_cancellable(&priv->lookup.cancellable); - - /* Re-start the hostname lookup thread if we don't have hostname yet. */ - if (priv->lookup.addr) { - char * str = NULL; - gs_free char *hostname = NULL; - - /* Check if the hostname was externally set */ - if ((hostname = _get_hostname(self)) && nm_utils_is_specific_hostname(hostname) - && !nm_streq0(hostname, priv->last_hostname)) { - g_clear_object(&priv->lookup.addr); - return; - } - - _LOGD(LOGD_DNS, - "restarting reverse-lookup thread for address %s", - (str = g_inet_address_to_string(priv->lookup.addr))); - g_free(str); - - lookup_by_address(self); - } -} - -static void connection_updated(NMSettings * settings, NMSettingsConnection *connection, guint update_reason_u, @@ -2677,12 +2747,6 @@ constructed(GObject *object) priv->dns_manager = g_object_ref(nm_dns_manager_get()); nm_dns_manager_set_initial_hostname(priv->dns_manager, priv->orig_hostname); - priv->config_changed_id = g_signal_connect(priv->dns_manager, - NM_DNS_MANAGER_CONFIG_CHANGED, - G_CALLBACK(dns_config_changed), - self); - - priv->lookup.resolver = g_resolver_get_default(); g_signal_connect(priv->hostname_manager, "notify::" NM_HOSTNAME_MANAGER_HOSTNAME, @@ -2764,10 +2828,6 @@ dispose(GObject *object) NMDevice * device; ActivateData * data, *data_safe; - nm_clear_g_cancellable(&priv->lookup.cancellable); - g_clear_object(&priv->lookup.addr); - g_clear_object(&priv->lookup.resolver); - nm_clear_g_object(&priv->default_ac4); nm_clear_g_object(&priv->default_ac6); nm_clear_g_object(&priv->activating_ac4); @@ -2790,10 +2850,7 @@ dispose(GObject *object) g_clear_object(&priv->agent_mgr); } - if (priv->dns_manager) { - nm_clear_g_signal_handler(priv->dns_manager, &priv->config_changed_id); - g_clear_object(&priv->dns_manager); - } + g_clear_object(&priv->dns_manager); g_hash_table_iter_init(&h_iter, priv->devices); if (g_hash_table_iter_next(&h_iter, (gpointer *) &device, NULL)) { diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index b377c85e7a..4e98ae9e99 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -8281,13 +8281,6 @@ wifi_get_capabilities(NMPlatform *platform, int ifindex, NMDeviceWifiCapabilitie return TRUE; } -static gboolean -wifi_get_bssid(NMPlatform *platform, int ifindex, guint8 *bssid) -{ - WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); - return nm_wifi_utils_get_bssid(wifi_data, bssid); -} - static guint32 wifi_get_frequency(NMPlatform *platform, int ifindex) { @@ -8296,17 +8289,14 @@ wifi_get_frequency(NMPlatform *platform, int ifindex) } static gboolean -wifi_get_quality(NMPlatform *platform, int ifindex) -{ - WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); - return nm_wifi_utils_get_qual(wifi_data); -} - -static guint32 -wifi_get_rate(NMPlatform *platform, int ifindex) +wifi_get_station(NMPlatform * platform, + int ifindex, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); - return nm_wifi_utils_get_rate(wifi_data); + return nm_wifi_utils_get_station(wifi_data, out_bssid, out_quality, out_rate); } static NM80211Mode @@ -9669,10 +9659,8 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass) platform_class->infiniband_partition_delete = infiniband_partition_delete; platform_class->wifi_get_capabilities = wifi_get_capabilities; - platform_class->wifi_get_bssid = wifi_get_bssid; platform_class->wifi_get_frequency = wifi_get_frequency; - platform_class->wifi_get_quality = wifi_get_quality; - platform_class->wifi_get_rate = wifi_get_rate; + platform_class->wifi_get_station = wifi_get_station; platform_class->wifi_get_mode = wifi_get_mode; platform_class->wifi_set_mode = wifi_set_mode; platform_class->wifi_set_powersave = wifi_set_powersave; diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 7969206cba..cd58211594 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -3051,16 +3051,6 @@ nm_platform_wifi_get_capabilities(NMPlatform *self, int ifindex, NMDeviceWifiCap return klass->wifi_get_capabilities(self, ifindex, caps); } -gboolean -nm_platform_wifi_get_bssid(NMPlatform *self, int ifindex, guint8 *bssid) -{ - _CHECK_SELF(self, klass, FALSE); - - g_return_val_if_fail(ifindex > 0, FALSE); - - return klass->wifi_get_bssid(self, ifindex, bssid); -} - guint32 nm_platform_wifi_get_frequency(NMPlatform *self, int ifindex) { @@ -3071,24 +3061,18 @@ nm_platform_wifi_get_frequency(NMPlatform *self, int ifindex) return klass->wifi_get_frequency(self, ifindex); } -int -nm_platform_wifi_get_quality(NMPlatform *self, int ifindex) -{ - _CHECK_SELF(self, klass, 0); - - g_return_val_if_fail(ifindex > 0, 0); - - return klass->wifi_get_quality(self, ifindex); -} - -guint32 -nm_platform_wifi_get_rate(NMPlatform *self, int ifindex) +gboolean +nm_platform_wifi_get_station(NMPlatform * self, + int ifindex, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate) { - _CHECK_SELF(self, klass, 0); + _CHECK_SELF(self, klass, FALSE); - g_return_val_if_fail(ifindex > 0, 0); + g_return_val_if_fail(ifindex > 0, FALSE); - return klass->wifi_get_rate(self, ifindex); + return klass->wifi_get_station(self, ifindex, out_bssid, out_quality, out_rate); } NM80211Mode @@ -3746,7 +3730,7 @@ _addr_array_clean_expired(int addr_family, } #endif - if (addr_family == AF_INET6 && NM_FLAGS_HAS(a->n_ifa_flags, IFA_F_TEMPORARY)) { + if (!NM_IS_IPv4(addr_family) && NM_FLAGS_HAS(a->n_ifa_flags, IFA_F_TEMPORARY)) { /* temporary addresses are never added explicitly by NetworkManager but * kernel adds them via mngtempaddr flag. * @@ -3987,7 +3971,7 @@ nm_platform_ip_address_sync(NMPlatform *self, GPtrArray * addresses_prune) { const gint32 now = nm_utils_get_monotonic_timestamp_sec(); - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); gs_unref_hashtable GHashTable *known_addresses_idx = NULL; GPtrArray * plat_addresses; GHashTable * known_subnets = NULL; @@ -4336,7 +4320,7 @@ nm_platform_ip_address_get_prune_list(NMPlatform *self, int ifindex, gboolean exclude_ipv6_temporary_addrs) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); const NMDedupMultiHeadEntry *head_entry; NMPLookup lookup; GPtrArray * result; @@ -4388,10 +4372,7 @@ nm_platform_ip_route_get_prune_list(NMPlatform * self, NM_IP_ROUTE_TABLE_SYNC_MODE_FULL, NM_IP_ROUTE_TABLE_SYNC_MODE_ALL)); - nmp_lookup_init_object(&lookup, - addr_family == AF_INET ? NMP_OBJECT_TYPE_IP4_ROUTE - : NMP_OBJECT_TYPE_IP6_ROUTE, - ifindex); + nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ROUTE(NM_IS_IPv4(addr_family)), ifindex); head_entry = nm_platform_lookup(self, &lookup); if (!head_entry) return NULL; @@ -4447,6 +4428,7 @@ nm_platform_ip_route_sync(NMPlatform *self, GPtrArray * routes_prune, GPtrArray **out_temporary_not_available) { + const int IS_IPv4 = NM_IS_IPv4(addr_family); const NMPlatformVTableRoute *vt; gs_unref_hashtable GHashTable *routes_idx = NULL; const NMPObject * conf_o; @@ -4456,10 +4438,8 @@ nm_platform_ip_route_sync(NMPlatform *self, gboolean success = TRUE; char sbuf1[sizeof(_nm_utils_to_string_buffer)]; char sbuf2[sizeof(_nm_utils_to_string_buffer)]; - const gboolean IS_IPv4 = (addr_family == AF_INET); nm_assert(NM_IS_PLATFORM(self)); - nm_assert(NM_IN_SET(addr_family, AF_INET, AF_INET6)); nm_assert(ifindex > 0); vt = &nm_platform_vtable_route.vx[IS_IPv4]; @@ -4671,9 +4651,9 @@ sync_route_add: prune_o = routes_prune->pdata[i]; - nm_assert((addr_family == AF_INET + nm_assert((NM_IS_IPv4(addr_family) && NMP_OBJECT_GET_TYPE(prune_o) == NMP_OBJECT_TYPE_IP4_ROUTE) - || (addr_family == AF_INET6 + || (!NM_IS_IPv4(addr_family) && NMP_OBJECT_GET_TYPE(prune_o) == NMP_OBJECT_TYPE_IP6_ROUTE)); if (routes_idx && g_hash_table_lookup(routes_idx, prune_o)) @@ -4816,8 +4796,8 @@ _ip_route_add(NMPlatform *self, NMPNlmFlags flags, int addr_family, gconstpointe _LOG3D("route: %-10s IPv%c route: %s", _nmp_nlm_flag_to_string(flags & NMP_NLM_FLAG_FMASK), nm_utils_addr_family_to_char(addr_family), - addr_family == AF_INET ? nm_platform_ip4_route_to_string(route, sbuf, sizeof(sbuf)) - : nm_platform_ip6_route_to_string(route, sbuf, sizeof(sbuf))); + NM_IS_IPv4(addr_family) ? nm_platform_ip4_route_to_string(route, sbuf, sizeof(sbuf)) + : nm_platform_ip6_route_to_string(route, sbuf, sizeof(sbuf))); return klass->ip_route_add(self, flags, addr_family, route); } @@ -5647,7 +5627,7 @@ nm_platform_lnk_bridge_to_string(const NMPlatformLnkBridge *lnk, char *buf, gsiz lnk->vlan_protocol, (int) lnk->vlan_stats_enabled, lnk->group_fwd_mask, - NM_ETHER_ADDR_FORMAT_VAL(lnk->group_addr), + NM_ETHER_ADDR_FORMAT_VAL(&lnk->group_addr), (int) lnk->mcast_snooping, lnk->mcast_router, (int) lnk->mcast_query_use_ifaddr, @@ -6272,11 +6252,16 @@ nm_platform_ip4_address_to_string(const NMPlatformIP4Address *address, char *buf "%s" /* label */ " src %s" "%s" /* external */ + "%s" /* ip4acd_not_ready */ "", s_address, address->plen, - broadcast_address ? " brd " : "", - broadcast_address ? _nm_utils_inet4_ntop(broadcast_address, str_broadcast) : "", + broadcast_address != 0u || address->use_ip4_broadcast_address + ? (address->use_ip4_broadcast_address ? " brd " : " brd* ") + : "", + broadcast_address != 0u || address->use_ip4_broadcast_address + ? _nm_utils_inet4_ntop(broadcast_address, str_broadcast) + : "", str_lft_p, str_pref_p, str_time_p, @@ -6285,7 +6270,8 @@ nm_platform_ip4_address_to_string(const NMPlatformIP4Address *address, char *buf _to_string_ifa_flags(address->n_ifa_flags, s_flags, sizeof(s_flags)), str_label, nmp_utils_ip_config_source_to_string(address->addr_source, s_source, sizeof(s_source)), - address->external ? " ext" : ""); + address->external ? " ext" : "", + address->ip4acd_not_ready ? " ip4acd-not-ready" : ""); g_free(str_peer); return buf; } @@ -6515,7 +6501,9 @@ nm_platform_ip4_route_to_string(const NMPlatformIP4Route *route, char *buf, gsiz route->plen, s_gateway, str_dev, - route->metric_any ? "??" : nm_sprintf_buf(str_metric, "%u", route->metric), + route->metric_any + ? (route->metric ? nm_sprintf_buf(str_metric, "??+%u", route->metric) : "??") + : nm_sprintf_buf(str_metric, "%u", route->metric), route->mss, nmp_utils_ip_config_source_to_string(route->rt_source, s_source, sizeof(s_source)), _rtm_flags_to_string_full(str_rtm_flags, sizeof(str_rtm_flags), route->r_rtm_flags), @@ -6639,7 +6627,9 @@ nm_platform_ip6_route_to_string(const NMPlatformIP6Route *route, char *buf, gsiz route->plen, s_gateway, str_dev, - route->metric_any ? "??" : nm_sprintf_buf(str_metric, "%u", route->metric), + route->metric_any + ? (route->metric ? nm_sprintf_buf(str_metric, "??+%u", route->metric) : "??") + : nm_sprintf_buf(str_metric, "%u", route->metric), route->mss, nmp_utils_ip_config_source_to_string(route->rt_source, s_source, sizeof(s_source)), route->src_plen || !IN6_IS_ADDR_UNSPECIFIED(&route->src) @@ -7841,7 +7831,7 @@ nm_platform_ip4_address_hash_update(const NMPlatformIP4Address *obj, NMHashState nm_hash_update_vals(h, obj->ifindex, obj->addr_source, - nm_platform_ip4_broadcast_address_from_addr(obj), + obj->use_ip4_broadcast_address ? obj->broadcast_address : ((in_addr_t) 0u), obj->timestamp, obj->lifetime, obj->preferred, @@ -7849,7 +7839,10 @@ nm_platform_ip4_address_hash_update(const NMPlatformIP4Address *obj, NMHashState obj->plen, obj->address, obj->peer_address, - NM_HASH_COMBINE_BOOLS(guint8, obj->external)); + NM_HASH_COMBINE_BOOLS(guint8, + obj->external, + obj->use_ip4_broadcast_address, + obj->ip4acd_not_ready)); nm_hash_update_strarr(h, obj->label); } @@ -7861,8 +7854,9 @@ nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, const NMPlatformIP4Ad NM_CMP_FIELD(a, b, address); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD(a, b, peer_address); - NM_CMP_DIRECT(nm_platform_ip4_broadcast_address_from_addr(a), - nm_platform_ip4_broadcast_address_from_addr(b)); + NM_CMP_FIELD_UNSAFE(a, b, use_ip4_broadcast_address); + if (a->use_ip4_broadcast_address) + NM_CMP_FIELD(a, b, broadcast_address); NM_CMP_FIELD(a, b, addr_source); NM_CMP_FIELD(a, b, timestamp); NM_CMP_FIELD(a, b, lifetime); @@ -7870,6 +7864,7 @@ nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, const NMPlatformIP4Ad NM_CMP_FIELD(a, b, n_ifa_flags); NM_CMP_FIELD_STR(a, b, label); NM_CMP_FIELD_UNSAFE(a, b, external); + NM_CMP_FIELD_UNSAFE(a, b, ip4acd_not_ready); return 0; } @@ -7922,7 +7917,7 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(obj)), nm_utils_ip4_address_clear_host_address(obj->network, obj->plen), obj->plen, - nm_platform_ip4_route_get_effective_metric(obj), + obj->metric, obj->tos, NM_HASH_COMBINE_BOOLS(guint8, obj->metric_any, obj->table_any)); break; @@ -7933,7 +7928,7 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(obj)), nm_utils_ip4_address_clear_host_address(obj->network, obj->plen), obj->plen, - nm_platform_ip4_route_get_effective_metric(obj), + obj->metric, obj->tos, /* on top of WEAK_ID: */ obj->ifindex, @@ -7965,7 +7960,7 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, obj->ifindex, nm_utils_ip4_address_clear_host_address(obj->network, obj->plen), obj->plen, - nm_platform_ip4_route_get_effective_metric(obj), + obj->metric, obj->gateway, nmp_utils_ip_config_source_round_trip_rtprot(obj->rt_source), _ip_route_scope_inv_get_normalized(obj), @@ -7994,7 +7989,7 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, obj->ifindex, obj->network, obj->plen, - nm_platform_ip4_route_get_effective_metric(obj), + obj->metric, obj->gateway, obj->rt_source, obj->scope_inv, @@ -8034,8 +8029,7 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, NM_CMP_DIRECT_IN4ADDR_SAME_PREFIX(a->network, b->network, MIN(a->plen, b->plen)); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); - if (!a->metric_any) - NM_CMP_FIELD(a, b, metric); + NM_CMP_FIELD(a, b, metric); NM_CMP_FIELD(a, b, tos); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) { NM_CMP_FIELD(a, b, ifindex); @@ -8076,8 +8070,7 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, NM_CMP_FIELD(a, b, network); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); - if (!a->metric_any) - NM_CMP_FIELD(a, b, metric); + 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(nmp_utils_ip_config_source_round_trip_rtprot(a->rt_source), @@ -8125,7 +8118,7 @@ nm_platform_ip6_route_hash_update(const NMPlatformIP6Route *obj, nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(obj)), *nm_utils_ip6_address_clear_host_address(&a1, &obj->network, obj->plen), obj->plen, - nm_platform_ip6_route_get_effective_metric(obj), + obj->metric, *nm_utils_ip6_address_clear_host_address(&a2, &obj->src, obj->src_plen), obj->src_plen, NM_HASH_COMBINE_BOOLS(guint8, obj->metric_any, obj->table_any)); @@ -8137,7 +8130,7 @@ nm_platform_ip6_route_hash_update(const NMPlatformIP6Route *obj, nm_platform_ip_route_get_effective_table(NM_PLATFORM_IP_ROUTE_CAST(obj)), *nm_utils_ip6_address_clear_host_address(&a1, &obj->network, obj->plen), obj->plen, - nm_platform_ip6_route_get_effective_metric(obj), + obj->metric, *nm_utils_ip6_address_clear_host_address(&a2, &obj->src, obj->src_plen), obj->src_plen, NM_HASH_COMBINE_BOOLS(guint8, obj->metric_any, obj->table_any), @@ -8153,7 +8146,7 @@ nm_platform_ip6_route_hash_update(const NMPlatformIP6Route *obj, obj->ifindex, *nm_utils_ip6_address_clear_host_address(&a1, &obj->network, obj->plen), obj->plen, - nm_platform_ip6_route_get_effective_metric(obj), + obj->metric, obj->gateway, obj->pref_src, *nm_utils_ip6_address_clear_host_address(&a2, &obj->src, obj->src_plen), @@ -8182,7 +8175,7 @@ nm_platform_ip6_route_hash_update(const NMPlatformIP6Route *obj, obj->table_coerced, obj->ifindex, obj->network, - nm_platform_ip6_route_get_effective_metric(obj), + obj->metric, obj->gateway, obj->pref_src, obj->src, @@ -8223,8 +8216,7 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_DIRECT_IN6ADDR_SAME_PREFIX(&a->network, &b->network, MIN(a->plen, b->plen)); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); - if (!a->metric_any) - NM_CMP_FIELD(a, b, metric); + NM_CMP_FIELD(a, b, metric); NM_CMP_DIRECT_IN6ADDR_SAME_PREFIX(&a->src, &b->src, MIN(a->src_plen, b->src_plen)); NM_CMP_FIELD(a, b, src_plen); if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID) { @@ -8249,8 +8241,7 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_FIELD_IN6ADDR(a, b, network); NM_CMP_FIELD(a, b, plen); NM_CMP_FIELD_UNSAFE(a, b, metric_any); - if (!a->metric_any) - NM_CMP_FIELD(a, b, metric); + NM_CMP_FIELD(a, b, metric); 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) { diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h index a1314000c3..25a741166e 100644 --- a/src/platform/nm-platform.h +++ b/src/platform/nm-platform.h @@ -322,10 +322,15 @@ typedef enum { guint8 plen; \ \ /* FIXME(l3cfg): the external marker won't be necessary anymore, because we only - * merge addresses we care about, and ignore (don't remove) external addresses. */ \ + * merge addresses we care about, and ignore (don't remove) external addresses. */ \ bool external : 1; \ \ bool use_ip4_broadcast_address : 1; \ + \ + /* Whether the address is ready to be configured. By default, an address is, but this + * flag may indicate that the address is just for tracking purpose only, but the ACD + * state is not yet ready for the address to be configured. */ \ + bool ip4acd_not_ready : 1; \ ; /** @@ -410,9 +415,9 @@ typedef union { * configures addresses. */ #define NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE ((guint32) 0u) -#define __NMPlatformIPRoute_COMMON \ - __NMPlatformObjWithIfindex_COMMON; \ - \ +#define __NMPlatformIPRoute_COMMON \ + __NMPlatformObjWithIfindex_COMMON; \ + \ /* The NMIPConfigSource. For routes that we receive from cache this corresponds * to the rtm_protocol field (and is one of the NM_IP_CONFIG_SOURCE_RTPROT_* values). * When adding a route, the source will be coerced to the protocol using @@ -424,11 +429,11 @@ typedef union { * * When deleting an IPv4/IPv6 route, the rtm_protocol field must match (even * if it is not part of the primary key for IPv6) -- unless rtm_protocol is set - * to zero, in which case the first matching route (with proto ignored) is deleted. */ \ - NMIPConfigSource rt_source; \ - \ - guint8 plen; \ - \ + * to zero, in which case the first matching route (with proto ignored) is deleted. */ \ + NMIPConfigSource rt_source; \ + \ + guint8 plen; \ + \ /* RTA_METRICS: * * For IPv4 routes, these properties are part of their @@ -439,24 +444,29 @@ typedef union { * * When deleting a route, kernel seems to ignore the RTA_METRICS properties. * That is a problem/bug for IPv4 because you cannot explicitly select which - * route to delete. Kernel just picks the first. See rh#1475642. */ \ - \ - /* RTA_METRICS.RTAX_LOCK (iproute2: "lock" arguments) */ \ - bool lock_window : 1; \ - bool lock_cwnd : 1; \ - bool lock_initcwnd : 1; \ - bool lock_initrwnd : 1; \ - bool lock_mtu : 1; \ - \ - /* if TRUE, the "metric" field gets ignored and can be overridden with settings from - * the device. This is to track routes that should be configured (e.g. from a DHCP - * lease), but where the actual metric is determined by NMDevice. */ \ - bool metric_any : 1; \ - \ + * route to delete. Kernel just picks the first. See rh#1475642. */ \ + \ + /* RTA_METRICS.RTAX_LOCK (iproute2: "lock" arguments) */ \ + bool lock_window : 1; \ + bool lock_cwnd : 1; \ + bool lock_initcwnd : 1; \ + bool lock_initrwnd : 1; \ + bool lock_mtu : 1; \ + \ + /* if TRUE, the "metric" field is interpreted as an offset that is added to a default + * metric. For example, form a DHCP lease we don't know the actually used metric, because + * that is determined by upper layers (the configuration). However, we have a default + * metric that should be used. So we set "metric_any" to %TRUE, which means to use + * the default metric. However, we still treat the "metric" field as an offset that + * will be added to the default metric. In most case, you want that "metric" is zero + * when setting "metric_any". */ \ + bool metric_any : 1; \ + \ /* like "metric_any", the table is determined by other layers of the code. - * This field overrides "table_coerced" field. */ \ - bool table_any : 1; \ - \ + * This field overrides "table_coerced" field. If "table_any" is true, then + * the "table_coerced" field is ignored (unlike for the metric). */ \ + bool table_any : 1; \ + \ /* rtnh_flags * * Routes with rtm_flags RTM_F_CLONED are hidden by platform and @@ -466,44 +476,46 @@ typedef union { * NOTE: currently we ignore all flags except RTM_F_CLONED * and RTNH_F_ONLINK. * We also may not properly consider the flags as part of the ID - * in route-cmp. */ \ - unsigned r_rtm_flags; \ - \ - /* RTA_METRICS.RTAX_ADVMSS (iproute2: advmss) */ \ - guint32 mss; \ - \ - /* RTA_METRICS.RTAX_WINDOW (iproute2: window) */ \ - guint32 window; \ - \ - /* RTA_METRICS.RTAX_CWND (iproute2: cwnd) */ \ - guint32 cwnd; \ - \ - /* RTA_METRICS.RTAX_INITCWND (iproute2: initcwnd) */ \ - guint32 initcwnd; \ - \ - /* RTA_METRICS.RTAX_INITRWND (iproute2: initrwnd) */ \ - guint32 initrwnd; \ - \ - /* RTA_METRICS.RTAX_MTU (iproute2: mtu) */ \ - guint32 mtu; \ - \ - /* RTA_PRIORITY (iproute2: metric) */ \ - guint32 metric; \ - \ + * in route-cmp. */ \ + unsigned r_rtm_flags; \ + \ + /* RTA_METRICS.RTAX_ADVMSS (iproute2: advmss) */ \ + guint32 mss; \ + \ + /* RTA_METRICS.RTAX_WINDOW (iproute2: window) */ \ + guint32 window; \ + \ + /* RTA_METRICS.RTAX_CWND (iproute2: cwnd) */ \ + guint32 cwnd; \ + \ + /* RTA_METRICS.RTAX_INITCWND (iproute2: initcwnd) */ \ + guint32 initcwnd; \ + \ + /* RTA_METRICS.RTAX_INITRWND (iproute2: initrwnd) */ \ + guint32 initrwnd; \ + \ + /* RTA_METRICS.RTAX_MTU (iproute2: mtu) */ \ + guint32 mtu; \ + \ + /* RTA_PRIORITY (iproute2: metric) + * If "metric_any" is %TRUE, then this is interpreted as an offset that will be + * added to a default base metric. In such cases, the offset is usually zero. */ \ + guint32 metric; \ + \ /* rtm_table, RTA_TABLE. * * This is not the original table ID. Instead, 254 (RT_TABLE_MAIN) and * zero (RT_TABLE_UNSPEC) are swapped, so that the default is the main - * table. Use nm_platform_route_table_coerce()/nm_platform_route_table_uncoerce(). */ \ - guint32 table_coerced; \ - \ + * table. Use nm_platform_route_table_coerce()/nm_platform_route_table_uncoerce(). */ \ + guint32 table_coerced; \ + \ /* rtm_type. * * This is not the original type, if type_coerced is 0 then * it means RTN_UNSPEC otherwise the type value is preserved. - * */ \ - guint8 type_coerced; \ - \ + * */ \ + guint8 type_coerced; \ + \ /*end*/ typedef struct { @@ -1170,6 +1182,11 @@ typedef struct { gboolean (*wifi_get_capabilities)(NMPlatform * self, int ifindex, NMDeviceWifiCapabilities *caps); + gboolean (*wifi_get_station)(NMPlatform * self, + int ifindex, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate); gboolean (*wifi_get_bssid)(NMPlatform *self, int ifindex, guint8 *bssid); guint32 (*wifi_get_frequency)(NMPlatform *self, int ifindex); int (*wifi_get_quality)(NMPlatform *self, int ifindex); @@ -1950,10 +1967,12 @@ gboolean nm_platform_link_tun_get_properties(NMPlatform * self, gboolean nm_platform_wifi_get_capabilities(NMPlatform *self, int ifindex, NMDeviceWifiCapabilities *caps); -gboolean nm_platform_wifi_get_bssid(NMPlatform *self, int ifindex, guint8 *bssid); guint32 nm_platform_wifi_get_frequency(NMPlatform *self, int ifindex); -int nm_platform_wifi_get_quality(NMPlatform *self, int ifindex); -guint32 nm_platform_wifi_get_rate(NMPlatform *self, int ifindex); +gboolean nm_platform_wifi_get_station(NMPlatform * self, + int ifindex, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate); NM80211Mode nm_platform_wifi_get_mode(NMPlatform *self, int ifindex); void nm_platform_wifi_set_mode(NMPlatform *self, int ifindex, NM80211Mode mode); void nm_platform_wifi_set_powersave(NMPlatform *self, int ifindex, guint32 powersave); @@ -2097,18 +2116,18 @@ static inline guint32 nm_platform_ip4_route_get_effective_metric(const NMPlatformIP4Route *r) { nm_assert(r); - nm_assert(!r->metric_any || r->metric == 0); - return r->metric_any ? NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4 : r->metric; + return r->metric_any ? nm_add_clamped_u32(NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4, r->metric) + : r->metric; } static inline guint32 nm_platform_ip6_route_get_effective_metric(const NMPlatformIP6Route *r) { nm_assert(r); - nm_assert(!r->metric_any || r->metric == 0); - return r->metric_any ? NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6 : r->metric; + return r->metric_any ? nm_add_clamped_u32(NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6, r->metric) + : r->metric; } static inline guint32 diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index 6eea732f57..cc18e49527 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -1098,7 +1098,7 @@ _vt_cmd_obj_to_string_lnk_wireguard(const NMPObject * obj, g_snprintf(buf, buf_len, __VA_ARGS__); \ return buf; \ } \ - struct _dummy_struct_for_tailing_semicolon + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON _vt_cmd_plobj_to_string_id(link, NMPlatformLink, "%d", obj->ifindex); @@ -1390,7 +1390,7 @@ _vt_cmd_obj_copy_lnk_wireguard(NMPObject *dst, const NMPObject *src) cmd \ } \ } \ - struct _dummy_struct_for_tailing_semicolon + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON _vt_cmd_plobj_id_copy(link, NMPlatformLink, { dst->ifindex = src->ifindex; }); @@ -1485,7 +1485,7 @@ nmp_object_id_cmp(const NMPObject *obj1, const NMPObject *obj2) } \ return 0; \ } \ - struct _dummy_struct_for_tailing_semicolon + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON _vt_cmd_plobj_id_cmp(link, NMPlatformLink, { NM_CMP_FIELD(obj1, obj2, ifindex); }); @@ -1581,7 +1581,7 @@ nmp_object_id_hash(const NMPObject *obj) cmd; \ } \ } \ - struct _dummy_struct_for_tailing_semicolon + _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON _vt_cmd_plobj_id_hash_update(link, NMPlatformLink, { nm_hash_update_val(h, obj->ifindex); }); diff --git a/src/platform/nmp-object.h b/src/platform/nmp-object.h index 58f54dbe0f..5480f8391b 100644 --- a/src/platform/nmp-object.h +++ b/src/platform/nmp-object.h @@ -1077,52 +1077,64 @@ nm_platform_dedup_multi_iter_next_obj(NMDedupMultiIter *ipconf_iter, return has_next; } -static inline gboolean -nm_platform_dedup_multi_iter_next_ip4_address(NMDedupMultiIter * ipconf_iter, - const NMPlatformIP4Address **out_address) -{ - gboolean has_next; - - has_next = nm_dedup_multi_iter_next(ipconf_iter); - if (out_address) - *out_address = has_next ? NMP_OBJECT_CAST_IP4_ADDRESS(ipconf_iter->current->obj) : NULL; - return has_next; -} - -static inline gboolean -nm_platform_dedup_multi_iter_next_ip4_route(NMDedupMultiIter * ipconf_iter, - const NMPlatformIP4Route **out_route) -{ - gboolean has_next; - - has_next = nm_dedup_multi_iter_next(ipconf_iter); - if (out_route) - *out_route = has_next ? NMP_OBJECT_CAST_IP4_ROUTE(ipconf_iter->current->obj) : NULL; - return has_next; -} - -static inline gboolean -nm_platform_dedup_multi_iter_next_ip6_address(NMDedupMultiIter * ipconf_iter, - const NMPlatformIP6Address **out_address) -{ - gboolean has_next; - - has_next = nm_dedup_multi_iter_next(ipconf_iter); - if (out_address) - *out_address = has_next ? NMP_OBJECT_CAST_IP6_ADDRESS(ipconf_iter->current->obj) : NULL; - return has_next; -} - -static inline gboolean -nm_platform_dedup_multi_iter_next_ip6_route(NMDedupMultiIter * ipconf_iter, - const NMPlatformIP6Route **out_route) -{ - gboolean has_next; +#define _nm_platform_dedup_multi_iter_next(ipconf_iter, out_obj, field, ...) \ + ({ \ + NMDedupMultiIter *const _ipconf_iter = (ipconf_iter); \ + const typeof(((NMPObject *) NULL)->field) **const _out_obj = (out_obj); \ + gboolean _has_next; \ + \ + if (G_LIKELY(nm_dedup_multi_iter_next(_ipconf_iter))) { \ + if (_out_obj) { \ + *_out_obj = _NMP_OBJECT_CAST(_ipconf_iter->current->obj, field, __VA_ARGS__); \ + } else { \ + nm_assert( \ + NM_IN_SET(NMP_OBJECT_GET_TYPE(_ipconf_iter->current->obj), __VA_ARGS__)); \ + } \ + _has_next = TRUE; \ + } else { \ + if (_out_obj) \ + *_out_obj = NULL; \ + _has_next = FALSE; \ + } \ + _has_next; \ + }) - has_next = nm_dedup_multi_iter_next(ipconf_iter); - if (out_route) - *out_route = has_next ? NMP_OBJECT_CAST_IP6_ROUTE(ipconf_iter->current->obj) : NULL; - return has_next; -} +#define nm_platform_dedup_multi_iter_next_ip_address(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip_address, \ + NMP_OBJECT_TYPE_IP4_ADDRESS, \ + NMP_OBJECT_TYPE_IP6_ADDRESS) + +#define nm_platform_dedup_multi_iter_next_ip4_address(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip4_address, \ + NMP_OBJECT_TYPE_IP4_ADDRESS) + +#define nm_platform_dedup_multi_iter_next_ip6_address(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip6_address, \ + NMP_OBJECT_TYPE_IP6_ADDRESS) + +#define nm_platform_dedup_multi_iter_next_ip_route(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip_route, \ + NMP_OBJECT_TYPE_IP4_ROUTE, \ + NMP_OBJECT_TYPE_IP6_ROUTE) + +#define nm_platform_dedup_multi_iter_next_ip4_route(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip4_route, \ + NMP_OBJECT_TYPE_IP4_ROUTE) + +#define nm_platform_dedup_multi_iter_next_ip6_route(ipconf_iter, out_obj) \ + _nm_platform_dedup_multi_iter_next((ipconf_iter), \ + (out_obj), \ + ip6_route, \ + NMP_OBJECT_TYPE_IP6_ROUTE) #endif /* __NMP_OBJECT_H__ */ diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c index fb43004630..f5b2128b3b 100644 --- a/src/platform/tests/test-common.c +++ b/src/platform/tests/test-common.c @@ -5,13 +5,15 @@ #include "nm-default.h" +#include "test-common.h" + #include <sys/mount.h> #include <sched.h> #include <sys/wait.h> #include <fcntl.h> #include <linux/if_tun.h> -#include "test-common.h" +#include "n-acd/src/n-acd.h" #define SIGNAL_DATA_FMT "'%s-%s' ifindex %d%s%s%s (%d times received)" #define SIGNAL_DATA_ARG(data) \ @@ -87,7 +89,7 @@ nmtstp_platform_ip6_address_get_all(NMPlatform *self, int ifindex) const NMPlatformIPAddress * nmtstp_platform_ip_address_find(NMPlatform *self, int ifindex, int addr_family, gconstpointer addr) { - const gboolean IS_IPv4 = NM_IS_IPv4(addr_family); + const int IS_IPv4 = NM_IS_IPv4(addr_family); const NMPlatformIPAddress *found = NULL; NMDedupMultiIter iter; const NMPObject * obj; @@ -99,8 +101,7 @@ nmtstp_platform_ip_address_find(NMPlatform *self, int ifindex, int addr_family, nm_assert(addr); nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4), ifindex); - nm_platform_iter_obj_for_each(&iter, self, &lookup, &obj) - { + nm_platform_iter_obj_for_each (&iter, self, &lookup, &obj) { const NMPlatformIPAddress *a = NMP_OBJECT_CAST_IP_ADDRESS(obj); g_assert(NMP_OBJECT_GET_ADDR_FAMILY(obj) == addr_family); @@ -1478,7 +1479,7 @@ nmtstp_link_bridge_add(NMPlatform * platform, lnk->group_fwd_mask != 0 ? nm_sprintf_buf(sbuf_gfw, "group_fwd_mask %#x ", lnk->group_fwd_mask) : "", - NM_ETHER_ADDR_FORMAT_VAL(lnk->group_addr), + NM_ETHER_ADDR_FORMAT_VAL(&lnk->group_addr), (int) lnk->mcast_snooping, lnk->mcast_router, (int) lnk->mcast_query_use_ifaddr, @@ -2567,3 +2568,145 @@ main(int argc, char **argv) g_object_unref(NM_PLATFORM_GET); return result; } + +/*****************************************************************************/ + +struct _NMTstpAcdDefender { + int ifindex; + in_addr_t ip_addr; + NAcd * nacd; + NAcdProbe *probe; + GSource * source; + gint8 announce_started; +}; + +static gboolean +_l3_acd_nacd_event(int fd, GIOCondition condition, gpointer user_data) +{ + NMTstpAcdDefender *defender = user_data; + int r; + + r = n_acd_dispatch(defender->nacd); + if (r == N_ACD_E_PREEMPTED) + r = 0; + g_assert_cmpint(r, ==, 0); + + while (TRUE) { + NAcdEvent *event; + + r = n_acd_pop_event(defender->nacd, &event); + g_assert_cmpint(r, ==, 0); + if (!event) + return G_SOURCE_CONTINUE; + + switch (event->event) { + case N_ACD_EVENT_READY: + g_assert_cmpint(defender->announce_started, ==, 0); + g_assert(defender->probe == event->ready.probe); + defender->announce_started++; + _LOGT("acd-defender[" NM_HASH_OBFUSCATE_PTR_FMT "]: start announcing", + NM_HASH_OBFUSCATE_PTR(defender)); + r = n_acd_probe_announce(defender->probe, N_ACD_DEFEND_ALWAYS); + g_assert_cmpint(r, ==, 0); + break; + case N_ACD_EVENT_DEFENDED: + g_assert(defender->probe == event->defended.probe); + g_assert_cmpint(event->defended.n_sender, ==, ETH_ALEN); + _LOGT("acd-defender[" NM_HASH_OBFUSCATE_PTR_FMT + "]: defended from " NM_ETHER_ADDR_FORMAT_STR, + NM_HASH_OBFUSCATE_PTR(defender), + NM_ETHER_ADDR_FORMAT_VAL((const NMEtherAddr *) event->defended.sender)); + break; + case N_ACD_EVENT_USED: + case N_ACD_EVENT_CONFLICT: + case N_ACD_EVENT_DOWN: + default: + g_assert_not_reached(); + break; + } + } +} + +NMTstpAcdDefender * +nmtstp_acd_defender_new(int ifindex, in_addr_t ip_addr, const NMEtherAddr *mac_addr) +{ + NMTstpAcdDefender * defender; + nm_auto(n_acd_config_freep) NAcdConfig * config = NULL; + nm_auto(n_acd_unrefp) NAcd * nacd = NULL; + nm_auto(n_acd_probe_config_freep) NAcdProbeConfig *probe_config = NULL; + NAcdProbe * probe; + int fd; + int r; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + + g_assert_cmpint(ifindex, >, 0); + g_assert(mac_addr); + + r = n_acd_config_new(&config); + g_assert_cmpint(r, ==, 0); + g_assert(config); + + n_acd_config_set_ifindex(config, ifindex); + n_acd_config_set_transport(config, N_ACD_TRANSPORT_ETHERNET); + n_acd_config_set_mac(config, (const guint8 *) mac_addr, sizeof(*mac_addr)); + + r = n_acd_new(&nacd, config); + g_assert_cmpint(r, ==, 0); + g_assert(nacd); + + r = n_acd_probe_config_new(&probe_config); + g_assert_cmpint(r, ==, 0); + g_assert(probe_config); + + n_acd_probe_config_set_ip(probe_config, (struct in_addr){ip_addr}); + n_acd_probe_config_set_timeout(probe_config, 0); + + r = n_acd_probe(nacd, &probe, probe_config); + g_assert_cmpint(r, ==, 0); + g_assert(probe); + + defender = g_slice_new(NMTstpAcdDefender); + *defender = (NMTstpAcdDefender){ + .ifindex = ifindex, + .ip_addr = ip_addr, + .nacd = g_steal_pointer(&nacd), + .probe = g_steal_pointer(&probe), + }; + + _LOGT("acd-defender[" NM_HASH_OBFUSCATE_PTR_FMT + "]: new for ifindex=%d, hwaddr=" NM_ETHER_ADDR_FORMAT_STR ", ipaddr=%s", + NM_HASH_OBFUSCATE_PTR(defender), + ifindex, + NM_ETHER_ADDR_FORMAT_VAL(mac_addr), + _nm_utils_inet4_ntop(ip_addr, sbuf_addr)); + + n_acd_probe_set_userdata(defender->probe, defender); + + n_acd_get_fd(defender->nacd, &fd); + g_assert_cmpint(fd, >=, 0); + + defender->source = nm_g_source_attach(nm_g_unix_fd_source_new(fd, + G_IO_IN, + G_PRIORITY_DEFAULT, + _l3_acd_nacd_event, + defender, + NULL), + NULL); + + return defender; +} + +void +nmtstp_acd_defender_destroy(NMTstpAcdDefender *defender) +{ + if (!defender) + return; + + _LOGT("acd-defender[" NM_HASH_OBFUSCATE_PTR_FMT "]: destroy", NM_HASH_OBFUSCATE_PTR(defender)); + + nm_clear_g_source_inst(&defender->source); + nm_clear_pointer(&defender->nacd, n_acd_unref); + nm_clear_pointer(&defender->probe, n_acd_probe_free); + + nm_g_slice_free(defender); +} diff --git a/src/platform/tests/test-common.h b/src/platform/tests/test-common.h index 1d996f4644..3a4bcb3b66 100644 --- a/src/platform/tests/test-common.h +++ b/src/platform/tests/test-common.h @@ -606,5 +606,14 @@ void nmtstp_setup_platform(void); /*****************************************************************************/ +typedef struct _NMTstpAcdDefender NMTstpAcdDefender; + +NMTstpAcdDefender * +nmtstp_acd_defender_new(int ifindex, in_addr_t ip_addr, const NMEtherAddr *mac_addr); + +void nmtstp_acd_defender_destroy(NMTstpAcdDefender *defender); + +/*****************************************************************************/ + void _nmtstp_init_tests(int *argc, char ***argv); void _nmtstp_setup_tests(void); diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.c b/src/platform/wifi/nm-wifi-utils-nl80211.c index dddfa8fafb..457c6b8e5a 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/platform/wifi/nm-wifi-utils-nl80211.c @@ -163,6 +163,7 @@ dispose(GObject *object) struct nl80211_iface_info { NM80211Mode mode; + uint32_t freq; }; static int @@ -193,6 +194,9 @@ nl80211_iface_info_handler(struct nl_msg *msg, void *arg) break; } + if (tb[NL80211_ATTR_WIPHY_FREQ] != NULL) + info->freq = nla_get_u32(tb[NL80211_ATTR_WIPHY_FREQ]); + return NL_SKIP; } @@ -359,142 +363,19 @@ nla_put_failure: g_return_val_if_reached(FALSE); } -/* @divisor: pass what value @xbm should be divided by to get dBm */ -static guint32 -nl80211_xbm_to_percent(gint32 xbm, guint32 divisor) -{ -#define NOISE_FLOOR_DBM -90 -#define SIGNAL_MAX_DBM -20 - - xbm /= divisor; - xbm = CLAMP(xbm, NOISE_FLOOR_DBM, SIGNAL_MAX_DBM); - - return 100 - - 70 - * (((float) SIGNAL_MAX_DBM - (float) xbm) - / ((float) SIGNAL_MAX_DBM - (float) NOISE_FLOOR_DBM)); -} - -struct nl80211_bss_info { - guint32 freq; - guint8 bssid[ETH_ALEN]; - guint8 ssid[32]; - guint32 ssid_len; - guint32 beacon_signal; - gboolean valid; -}; - -#define WLAN_EID_SSID 0 - -static void -find_ssid(guint8 *ies, guint32 ies_len, guint8 **ssid, guint32 *ssid_len) -{ - *ssid = NULL; - *ssid_len = 0; - - while (ies_len > 2 && ies[0] != WLAN_EID_SSID) { - ies_len -= ies[1] + 2; - ies += ies[1] + 2; - } - if (ies_len < 2) - return; - if (ies_len < 2 + ies[1]) - return; - - *ssid_len = ies[1]; - *ssid = ies + 2; -} - -static int -nl80211_bss_dump_handler(struct nl_msg *msg, void *arg) -{ - static const struct nla_policy bss_policy[] = { - [NL80211_BSS_TSF] = {.type = NLA_U64}, - [NL80211_BSS_FREQUENCY] = {.type = NLA_U32}, - [NL80211_BSS_BSSID] = {.minlen = ETH_ALEN}, - [NL80211_BSS_BEACON_INTERVAL] = {.type = NLA_U16}, - [NL80211_BSS_CAPABILITY] = {.type = NLA_U16}, - [NL80211_BSS_INFORMATION_ELEMENTS] = {}, - [NL80211_BSS_SIGNAL_MBM] = {.type = NLA_U32}, - [NL80211_BSS_SIGNAL_UNSPEC] = {.type = NLA_U8}, - [NL80211_BSS_STATUS] = {.type = NLA_U32}, - }; - struct nl80211_bss_info *info = arg; - struct genlmsghdr * gnlh = nlmsg_data(nlmsg_hdr(msg)); - struct nlattr * tb[NL80211_ATTR_MAX + 1]; - struct nlattr * bss[G_N_ELEMENTS(bss_policy)]; - guint32 status; - - if (nla_parse_arr(tb, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL) < 0) - return NL_SKIP; - - if (tb[NL80211_ATTR_BSS] == NULL) - return NL_SKIP; - - if (nla_parse_nested_arr(bss, tb[NL80211_ATTR_BSS], bss_policy)) - return NL_SKIP; - - if (bss[NL80211_BSS_STATUS] == NULL) - return NL_SKIP; - - status = nla_get_u32(bss[NL80211_BSS_STATUS]); - - if (status != NL80211_BSS_STATUS_ASSOCIATED && status != NL80211_BSS_STATUS_IBSS_JOINED) - return NL_SKIP; - - if (bss[NL80211_BSS_BSSID] == NULL) - return NL_SKIP; - memcpy(info->bssid, nla_data(bss[NL80211_BSS_BSSID]), ETH_ALEN); - - if (bss[NL80211_BSS_FREQUENCY]) - info->freq = nla_get_u32(bss[NL80211_BSS_FREQUENCY]); - - if (bss[NL80211_BSS_SIGNAL_UNSPEC]) - info->beacon_signal = nla_get_u8(bss[NL80211_BSS_SIGNAL_UNSPEC]); - - if (bss[NL80211_BSS_SIGNAL_MBM]) - info->beacon_signal = nl80211_xbm_to_percent(nla_get_u32(bss[NL80211_BSS_SIGNAL_MBM]), 100); - - if (bss[NL80211_BSS_INFORMATION_ELEMENTS]) { - guint8 *ssid; - guint32 ssid_len; - - find_ssid(nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]), - nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]), - &ssid, - &ssid_len); - if (ssid && ssid_len && ssid_len <= sizeof(info->ssid)) { - memcpy(info->ssid, ssid, ssid_len); - info->ssid_len = ssid_len; - } - } - - info->valid = TRUE; - - return NL_SKIP; -} - -static void -nl80211_get_bss_info(NMWifiUtilsNl80211 *self, struct nl80211_bss_info *bss_info) -{ - nm_auto_nlmsg struct nl_msg *msg = NULL; - - memset(bss_info, 0, sizeof(*bss_info)); - - msg = nl80211_alloc_msg(self, NL80211_CMD_GET_SCAN, NLM_F_DUMP); - - nl80211_send_and_recv(self, msg, nl80211_bss_dump_handler, bss_info); -} - static guint32 wifi_nl80211_get_freq(NMWifiUtils *data) { - NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; - struct nl80211_bss_info bss_info; + NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; + struct nl80211_iface_info iface_info = {}; + nm_auto_nlmsg struct nl_msg *msg = NULL; - nl80211_get_bss_info(self, &bss_info); + msg = nl80211_alloc_msg(self, NL80211_CMD_GET_INTERFACE, 0); + + if (nl80211_send_and_recv(self, msg, nl80211_iface_info_handler, &iface_info) < 0) + return 0; - return bss_info.freq; + return iface_info.freq; } static guint32 @@ -513,21 +394,25 @@ wifi_nl80211_find_freq(NMWifiUtils *data, const guint32 *freqs) return 0; } -static gboolean -wifi_nl80211_get_bssid(NMWifiUtils *data, guint8 *out_bssid) +/* @divisor: pass what value @xbm should be divided by to get dBm */ +static guint32 +nl80211_xbm_to_percent(gint32 xbm, guint32 divisor) { - NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; - struct nl80211_bss_info bss_info; - - nl80211_get_bss_info(self, &bss_info); +#define NOISE_FLOOR_DBM -90 +#define SIGNAL_MAX_DBM -20 - if (bss_info.valid) - memcpy(out_bssid, bss_info.bssid, ETH_ALEN); + xbm /= divisor; + xbm = CLAMP(xbm, NOISE_FLOOR_DBM, SIGNAL_MAX_DBM); - return bss_info.valid; + return 100 + - 70 + * (((float) SIGNAL_MAX_DBM - (float) xbm) + / ((float) SIGNAL_MAX_DBM - (float) NOISE_FLOOR_DBM)); } struct nl80211_station_info { + gboolean valid; + guint8 bssid[ETH_ALEN]; guint32 txrate; gboolean txrate_valid; guint8 signal; @@ -535,19 +420,21 @@ struct nl80211_station_info { }; static int -nl80211_station_handler(struct nl_msg *msg, void *arg) +nl80211_station_dump_handler(struct nl_msg *msg, void *arg) { static const struct nla_policy stats_policy[] = { - [NL80211_STA_INFO_INACTIVE_TIME] = {.type = NLA_U32}, - [NL80211_STA_INFO_RX_BYTES] = {.type = NLA_U32}, - [NL80211_STA_INFO_TX_BYTES] = {.type = NLA_U32}, - [NL80211_STA_INFO_RX_PACKETS] = {.type = NLA_U32}, - [NL80211_STA_INFO_TX_PACKETS] = {.type = NLA_U32}, - [NL80211_STA_INFO_SIGNAL] = {.type = NLA_U8}, - [NL80211_STA_INFO_TX_BITRATE] = {.type = NLA_NESTED}, - [NL80211_STA_INFO_LLID] = {.type = NLA_U16}, - [NL80211_STA_INFO_PLID] = {.type = NLA_U16}, - [NL80211_STA_INFO_PLINK_STATE] = {.type = NLA_U8}, + [NL80211_STA_INFO_INACTIVE_TIME] = {.type = NLA_U32}, + [NL80211_STA_INFO_RX_BYTES] = {.type = NLA_U32}, + [NL80211_STA_INFO_TX_BYTES] = {.type = NLA_U32}, + [NL80211_STA_INFO_RX_PACKETS] = {.type = NLA_U32}, + [NL80211_STA_INFO_TX_PACKETS] = {.type = NLA_U32}, + [NL80211_STA_INFO_SIGNAL] = {.type = NLA_U8}, + [NL80211_STA_INFO_TX_BITRATE] = {.type = NLA_NESTED}, + [NL80211_STA_INFO_LLID] = {.type = NLA_U16}, + [NL80211_STA_INFO_PLID] = {.type = NLA_U16}, + [NL80211_STA_INFO_PLINK_STATE] = {.type = NLA_U8}, + [NL80211_STA_INFO_STA_FLAGS] = {.minlen = sizeof(struct nl80211_sta_flag_update)}, + [NL80211_STA_INFO_BEACON_SIGNAL_AVG] = {.type = NLA_U8}, }; static const struct nla_policy rate_policy[] = { [NL80211_RATE_INFO_BITRATE] = {.type = NLA_U16}, @@ -564,80 +451,76 @@ nl80211_station_handler(struct nl_msg *msg, void *arg) if (nla_parse_arr(tb, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL) < 0) return NL_SKIP; + if (tb[NL80211_ATTR_MAC] == NULL) + return NL_SKIP; + if (tb[NL80211_ATTR_STA_INFO] == NULL) return NL_SKIP; if (nla_parse_nested_arr(sinfo, tb[NL80211_ATTR_STA_INFO], stats_policy)) return NL_SKIP; - if (sinfo[NL80211_STA_INFO_TX_BITRATE] == NULL) - return NL_SKIP; + if (sinfo[NL80211_STA_INFO_STA_FLAGS] != NULL) { + const struct nl80211_sta_flag_update *flags = nla_data(sinfo[NL80211_STA_INFO_STA_FLAGS]); - if (nla_parse_nested_arr(rinfo, sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy)) - return NL_SKIP; + if (flags->mask & ~flags->set & (1 << NL80211_STA_FLAG_ASSOCIATED)) + return NL_SKIP; + } - if (rinfo[NL80211_RATE_INFO_BITRATE] == NULL) - return NL_SKIP; + memcpy(info->bssid, nla_data(tb[NL80211_ATTR_MAC]), ETH_ALEN); + info->valid = TRUE; - /* convert from nl80211's units of 100kbps to NM's kbps */ - info->txrate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]) * 100; - info->txrate_valid = TRUE; + if (sinfo[NL80211_STA_INFO_TX_BITRATE] != NULL + && !nla_parse_nested_arr(rinfo, sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy) + && rinfo[NL80211_RATE_INFO_BITRATE] != NULL) { + /* convert from nl80211's units of 100kbps to NM's kbps */ + info->txrate = nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]) * 100; + info->txrate_valid = TRUE; + } if (sinfo[NL80211_STA_INFO_SIGNAL] != NULL) { info->signal = nl80211_xbm_to_percent((gint8) nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]), 1); info->signal_valid = TRUE; + } else if (sinfo[NL80211_STA_INFO_BEACON_SIGNAL_AVG] != NULL) { + /* Fall back to beacon signal strength */ + info->signal = + nl80211_xbm_to_percent((gint8) nla_get_u8(sinfo[NL80211_STA_INFO_BEACON_SIGNAL_AVG]), + 1); + info->signal_valid = TRUE; } return NL_SKIP; } -static void -nl80211_get_ap_info(NMWifiUtilsNl80211 *self, struct nl80211_station_info *sta_info) +static gboolean +wifi_nl80211_get_station(NMWifiUtils *data, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate) { - nm_auto_nlmsg struct nl_msg *msg = NULL; - struct nl80211_bss_info bss_info; - - memset(sta_info, 0, sizeof(*sta_info)); + NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; + nm_auto_nlmsg struct nl_msg *msg = NULL; + struct nl80211_station_info sta_info = {}; - nl80211_get_bss_info(self, &bss_info); - if (!bss_info.valid) - return; + msg = nl80211_alloc_msg(self, NL80211_CMD_GET_STATION, NLM_F_DUMP); - msg = nl80211_alloc_msg(self, NL80211_CMD_GET_STATION, 0); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, bss_info.bssid); - - nl80211_send_and_recv(self, msg, nl80211_station_handler, sta_info); - if (!sta_info->signal_valid) { - /* Fall back to bss_info signal quality (both are in percent) */ - sta_info->signal = bss_info.beacon_signal; - } - - return; - -nla_put_failure: - g_return_if_reached(); -} + nl80211_send_and_recv(self, msg, nl80211_station_dump_handler, &sta_info); -static guint32 -wifi_nl80211_get_rate(NMWifiUtils *data) -{ - NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; - struct nl80211_station_info sta_info; + if (!sta_info.valid || (out_quality && !sta_info.signal_valid) + || (out_rate && !sta_info.txrate_valid)) + return FALSE; - nl80211_get_ap_info(self, &sta_info); + if (out_bssid) + memcpy(out_bssid, sta_info.bssid, ETH_ALEN); - return sta_info.txrate; -} + if (out_quality) + *out_quality = sta_info.signal; -static int -wifi_nl80211_get_qual(NMWifiUtils *data) -{ - NMWifiUtilsNl80211 * self = (NMWifiUtilsNl80211 *) data; - struct nl80211_station_info sta_info; + if (out_rate) + *out_rate = sta_info.txrate; - nl80211_get_ap_info(self, &sta_info); - return sta_info.signal; + return TRUE; } static gboolean @@ -952,9 +835,7 @@ nm_wifi_utils_nl80211_class_init(NMWifiUtilsNl80211Class *klass) wifi_utils_class->set_wake_on_wlan = wifi_nl80211_set_wake_on_wlan, wifi_utils_class->get_freq = wifi_nl80211_get_freq; wifi_utils_class->find_freq = wifi_nl80211_find_freq; - wifi_utils_class->get_bssid = wifi_nl80211_get_bssid; - wifi_utils_class->get_rate = wifi_nl80211_get_rate; - wifi_utils_class->get_qual = wifi_nl80211_get_qual; + wifi_utils_class->get_station = wifi_nl80211_get_station; wifi_utils_class->indicate_addressing_running = wifi_nl80211_indicate_addressing_running; wifi_utils_class->get_mesh_channel = wifi_nl80211_get_mesh_channel; wifi_utils_class->set_mesh_channel = wifi_nl80211_set_mesh_channel; diff --git a/src/platform/wifi/nm-wifi-utils-private.h b/src/platform/wifi/nm-wifi-utils-private.h index 1a5303a668..703ef66a82 100644 --- a/src/platform/wifi/nm-wifi-utils-private.h +++ b/src/platform/wifi/nm-wifi-utils-private.h @@ -31,15 +31,17 @@ typedef struct { /* Return first supported frequency in the zero-terminated list */ guint32 (*find_freq)(NMWifiUtils *data, const guint32 *freqs); - /* Return current bitrate in Kbps */ - guint32 (*get_rate)(NMWifiUtils *data); - - gboolean (*get_bssid)(NMWifiUtils *data, guint8 *out_bssid); - - /* Return a signal strength percentage 0 - 100% for the current BSSID; - * return -1 on errors or if not associated. + /* + * @out_bssid: must be NULL or an ETH_ALEN-byte buffer + * @out_quality: receives signal strength percentage 0 - 100% for the current BSSID, if not NULL + * @out_rate: receives current bitrate in Kbps if not NULL + * + * Returns %TRUE on succcess, %FALSE on errors or if not associated. */ - int (*get_qual)(NMWifiUtils *data); + gboolean (*get_station)(NMWifiUtils *data, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate); /* OLPC Mesh-only functions */ diff --git a/src/platform/wifi/nm-wifi-utils-wext.c b/src/platform/wifi/nm-wifi-utils-wext.c index 8299415d23..fde48cc652 100644 --- a/src/platform/wifi/nm-wifi-utils-wext.c +++ b/src/platform/wifi/nm-wifi-utils-wext.c @@ -266,7 +266,7 @@ wifi_wext_find_freq(NMWifiUtils *data, const guint32 *freqs) } static gboolean -wifi_wext_get_bssid(NMWifiUtils *data, guint8 *out_bssid) +wifi_wext_get_bssid(NMWifiUtils *data, NMEtherAddr *out_bssid) { NMWifiUtilsWext *wext = (NMWifiUtilsWext *) data; struct iwreq wrq; @@ -453,6 +453,38 @@ wifi_wext_get_qual(NMWifiUtils *data) return wext_qual_to_percent(&stats.qual, &wext->max_qual); } +static gboolean +wifi_wext_get_station(NMWifiUtils *data, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate) +{ + NMEtherAddr local_addr; + + if (!out_bssid && !out_quality && !out_rate) { + /* hm, the caller requested no parameter at all? + * Don't simply return TRUE, but at least check that + * we can successfully fetch the bssid. */ + out_bssid = &local_addr; + } + + if (out_bssid) { + if (!wifi_wext_get_bssid(data, out_bssid)) + return FALSE; + } + if (out_quality) { + *out_quality = wifi_wext_get_qual(data); + if (*out_quality < 0) + return FALSE; + } + if (out_rate) { + *out_rate = wifi_wext_get_rate(data); + if (*out_rate == 0) + return FALSE; + } + return TRUE; +} + /*****************************************************************************/ /* OLPC Mesh-only functions */ @@ -677,9 +709,7 @@ nm_wifi_utils_wext_class_init(NMWifiUtilsWextClass *klass) wifi_utils_class->set_powersave = wifi_wext_set_powersave; wifi_utils_class->get_freq = wifi_wext_get_freq; wifi_utils_class->find_freq = wifi_wext_find_freq; - wifi_utils_class->get_bssid = wifi_wext_get_bssid; - wifi_utils_class->get_rate = wifi_wext_get_rate; - wifi_utils_class->get_qual = wifi_wext_get_qual; + wifi_utils_class->get_station = wifi_wext_get_station; wifi_utils_class->get_mesh_channel = wifi_wext_get_mesh_channel; wifi_utils_class->set_mesh_channel = wifi_wext_set_mesh_channel; wifi_utils_class->set_mesh_ssid = wifi_wext_set_mesh_ssid; diff --git a/src/platform/wifi/nm-wifi-utils.c b/src/platform/wifi/nm-wifi-utils.c index 3f9d3a48f5..92fbc200d5 100644 --- a/src/platform/wifi/nm-wifi-utils.c +++ b/src/platform/wifi/nm-wifi-utils.c @@ -132,27 +132,14 @@ nm_wifi_utils_find_freq(NMWifiUtils *data, const guint32 *freqs) } gboolean -nm_wifi_utils_get_bssid(NMWifiUtils *data, guint8 *out_bssid) +nm_wifi_utils_get_station(NMWifiUtils *data, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate) { g_return_val_if_fail(data != NULL, FALSE); - g_return_val_if_fail(out_bssid != NULL, FALSE); - memset(out_bssid, 0, ETH_ALEN); - return NM_WIFI_UTILS_GET_CLASS(data)->get_bssid(data, out_bssid); -} - -guint32 -nm_wifi_utils_get_rate(NMWifiUtils *data) -{ - g_return_val_if_fail(data != NULL, 0); - return NM_WIFI_UTILS_GET_CLASS(data)->get_rate(data); -} - -int -nm_wifi_utils_get_qual(NMWifiUtils *data) -{ - g_return_val_if_fail(data != NULL, 0); - return NM_WIFI_UTILS_GET_CLASS(data)->get_qual(data); + return NM_WIFI_UTILS_GET_CLASS(data)->get_station(data, out_bssid, out_quality, out_rate); } gboolean diff --git a/src/platform/wifi/nm-wifi-utils.h b/src/platform/wifi/nm-wifi-utils.h index d1df2fb822..2febd52803 100644 --- a/src/platform/wifi/nm-wifi-utils.h +++ b/src/platform/wifi/nm-wifi-utils.h @@ -43,14 +43,17 @@ guint32 nm_wifi_utils_get_freq(NMWifiUtils *data); * Frequencies are specified in MHz. */ guint32 nm_wifi_utils_find_freq(NMWifiUtils *data, const guint32 *freqs); -/* out_bssid must be ETH_ALEN bytes */ -gboolean nm_wifi_utils_get_bssid(NMWifiUtils *data, guint8 *out_bssid); - -/* Returns current bitrate in Kbps */ -guint32 nm_wifi_utils_get_rate(NMWifiUtils *data); - -/* Returns quality 0 - 100% on success, or -1 on error */ -int nm_wifi_utils_get_qual(NMWifiUtils *data); +/* + * @out_bssid: must be NULL or an ETH_ALEN-byte buffer + * @out_quality: receives signal quality in 0 - 100% range if not NULL + * @out_rate: receives current bitrate in Kbps if not NULL + * + * Returns %TRUE on succcess. + */ +gboolean nm_wifi_utils_get_station(NMWifiUtils *data, + NMEtherAddr *out_bssid, + int * out_quality, + guint32 * out_rate); /* Tells the driver DHCP or SLAAC is running */ gboolean nm_wifi_utils_indicate_addressing_running(NMWifiUtils *data, gboolean running); diff --git a/src/ppp/nm-ppp-manager.c b/src/ppp/nm-ppp-manager.c index a200334c81..a2ac2a23eb 100644 --- a/src/ppp/nm-ppp-manager.c +++ b/src/ppp/nm-ppp-manager.c @@ -1302,8 +1302,7 @@ _ppp_manager_new(const char *iface) { g_return_val_if_fail(iface != NULL, NULL); - return ( - NMPPPManager *) g_object_new(NM_TYPE_PPP_MANAGER, NM_PPP_MANAGER_PARENT_IFACE, iface, NULL); + return g_object_new(NM_TYPE_PPP_MANAGER, NM_PPP_MANAGER_PARENT_IFACE, iface, NULL); } static void diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c index 743a3467ce..81a522436e 100644 --- a/src/settings/nm-secret-agent.c +++ b/src/settings/nm-secret-agent.c @@ -695,7 +695,7 @@ nm_secret_agent_new(GDBusMethodInvocation * context, dbus_owner = nm_auth_subject_get_unix_process_dbus_sender(subject); - self = (NMSecretAgent *) g_object_new(NM_TYPE_SECRET_AGENT, NULL); + self = g_object_new(NM_TYPE_SECRET_AGENT, NULL); priv = NM_SECRET_AGENT_GET_PRIVATE(self); diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 6b9d50834c..8b0b2c0dd3 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -2521,17 +2521,9 @@ nm_settings_add_connection_dbus(NMSettings * self, else perm = NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM; - /* Validate the user request */ chain = nm_auth_chain_new_subject(subject, context, pk_add_cb, self); - if (!chain) { - error = g_error_new_literal(NM_SETTINGS_ERROR, - NM_SETTINGS_ERROR_PERMISSION_DENIED, - NM_UTILS_ERROR_MSG_REQ_AUTH_FAILED); - goto done; - } c_list_link_tail(&priv->auth_lst_head, nm_auth_chain_parent_lst_list(chain)); - nm_auth_chain_set_data(chain, "perm", (gpointer) perm, NULL); nm_auth_chain_set_data(chain, "connection", g_object_ref(connection), g_object_unref); nm_auth_chain_set_data(chain, "callback", callback, NULL); diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 5a021a8c37..9b7873c01b 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -2547,6 +2547,42 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea } static NMSetting * +make_hostname_setting(shvarFile *ifcfg) +{ + NMSetting *setting; + NMTernary from_dhcp; + NMTernary from_dns_lookup; + NMTernary only_from_default; + int priority; + + priority = svGetValueInt64(ifcfg, "HOSTNAME_PRIORITY", 10, G_MININT32, G_MAXINT32, 0); + + from_dhcp = svGetValueTernary(ifcfg, "HOSTNAME_FROM_DHCP"); + from_dns_lookup = svGetValueTernary(ifcfg, "HOSTNAME_FROM_DNS_LOOKUP"); + only_from_default = svGetValueTernary(ifcfg, "HOSTNAME_ONLY_FROM_DEFAULT"); + + /* Create the setting when at least one key is not default*/ + if (priority == 0 && from_dhcp == NM_TERNARY_DEFAULT && from_dns_lookup == NM_TERNARY_DEFAULT + && only_from_default == NM_TERNARY_DEFAULT) + return NULL; + + setting = nm_setting_hostname_new(); + + g_object_set(setting, + NM_SETTING_HOSTNAME_PRIORITY, + priority, + NM_SETTING_HOSTNAME_FROM_DHCP, + from_dhcp, + NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, + from_dns_lookup, + NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT, + only_from_default, + NULL); + + return setting; +} + +static NMSetting * make_sriov_setting(shvarFile *ifcfg) { gs_unref_hashtable GHashTable *keys = NULL; @@ -2951,7 +2987,8 @@ make_dcb_setting(shvarFile *ifcfg, NMSetting **out_setting, GError **error) gboolean dcb_on; NMSettingDcbFlags flags = NM_SETTING_DCB_FLAG_NONE; - g_return_val_if_fail(out_setting != NULL, FALSE); + g_return_val_if_fail(out_setting, FALSE); + *out_setting = NULL; dcb_on = !!svGetValueBoolean(ifcfg, "DCB", FALSE); if (!dcb_on) @@ -5339,24 +5376,31 @@ infiniband_connection_from_ifcfg(const char *file, shvarFile *ifcfg, GError **er static void handle_bond_option(NMSettingBond *s_bond, const char *key, const char *value) { - char * sanitized = NULL, *j; - const char *p = value; + gs_free char *sanitized = NULL; + const char * p = value; /* Remove any quotes or +/- from arp_ip_target */ - if (!g_strcmp0(key, NM_SETTING_BOND_OPTION_ARP_IP_TARGET) && value && value[0]) { + if (nm_streq0(key, NM_SETTING_BOND_OPTION_ARP_IP_TARGET) && value && value[0]) { + char *j; + if (*p == '\'' || *p == '"') p++; - j = sanitized = g_malloc0(strlen(p) + 1); + j = sanitized = g_malloc(strlen(p) + 1); while (*p) { if (*p != '+' && *p != '-' && *p != '\'' && *p != '"') *j++ = *p; p++; } + *j++ = '\0'; + value = sanitized; } - if (!nm_setting_bond_add_option(s_bond, key, sanitized ?: value)) - PARSE_WARNING("invalid bonding option '%s' = %s", key, sanitized ?: value); - g_free(sanitized); + if (!_nm_setting_bond_validate_option(key, value, NULL)) { + PARSE_WARNING("invalid bonding option '%s' = %s", key, value); + return; + } + + nm_setting_bond_add_option(s_bond, key, value); } static NMSetting * @@ -6236,8 +6280,9 @@ connection_from_file_full(const char *filename, gs_unref_object NMConnection *connection = NULL; gs_free char * type = NULL; char * devtype, *bootproto; - NMSetting * s_ip4, *s_ip6, *s_tc, *s_proxy, *s_port, *s_dcb = NULL, *s_user; - NMSetting * s_sriov, *s_match; + NMSetting * setting; + NMSetting * s_ip4; + NMSetting * s_ip6; const char * ifcfg_name = NULL; gboolean has_ip4_defroute = FALSE; gboolean has_complex_routes_v4; @@ -6525,13 +6570,13 @@ connection_from_file_full(const char *filename, NM_SETTING_IP_CONFIG(s_ip4), NM_SETTING_IP_CONFIG(s_ip6)); - s_sriov = make_sriov_setting(main_ifcfg); - if (s_sriov) - nm_connection_add_setting(connection, s_sriov); + setting = make_sriov_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - s_tc = make_tc_setting(main_ifcfg); - if (s_tc) - nm_connection_add_setting(connection, s_tc); + setting = make_tc_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); /* For backwards compatibility, if IPv4 is disabled or the * config fails for some reason, we read DOMAIN and put the @@ -6539,30 +6584,34 @@ connection_from_file_full(const char *filename, */ check_dns_search_domains(main_ifcfg, s_ip4, s_ip6); - s_proxy = make_proxy_setting(main_ifcfg); - if (s_proxy) - nm_connection_add_setting(connection, s_proxy); + setting = make_proxy_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); + + setting = make_hostname_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - s_user = make_user_setting(main_ifcfg); - if (s_user) - nm_connection_add_setting(connection, s_user); + setting = make_user_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - s_match = make_match_setting(main_ifcfg); - if (s_match) - nm_connection_add_setting(connection, s_match); + setting = make_match_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - s_port = make_bridge_port_setting(main_ifcfg); - if (s_port) - nm_connection_add_setting(connection, s_port); + setting = make_bridge_port_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - s_port = make_team_port_setting(main_ifcfg); - if (s_port) - nm_connection_add_setting(connection, s_port); + setting = make_team_port_setting(main_ifcfg); + if (setting) + nm_connection_add_setting(connection, setting); - if (!make_dcb_setting(main_ifcfg, &s_dcb, error)) + if (!make_dcb_setting(main_ifcfg, &setting, error)) return NULL; - if (s_dcb) - nm_connection_add_setting(connection, s_dcb); + if (setting) + nm_connection_add_setting(connection, setting); if (!nm_connection_normalize(connection, NULL, NULL, error)) return NULL; diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c index 567dc8a847..0ebc085330 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c @@ -873,6 +873,10 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = { _KEY_TYPE("GATEWAY_PING_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("GENERATE_MAC_ADDRESS_MASK", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("GVRP", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("HOSTNAME_FROM_DHCP", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("HOSTNAME_FROM_DNS_LOOKUP", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("HOSTNAME_ONLY_FROM_DEFAULT", NMS_IFCFG_KEY_TYPE_IS_PLAIN), + _KEY_TYPE("HOSTNAME_PRIORITY", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("HWADDR", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("HWADDR_BLACKLIST", NMS_IFCFG_KEY_TYPE_IS_PLAIN), _KEY_TYPE("IEEE_8021X_ALTSUBJECT_MATCHES", NMS_IFCFG_KEY_TYPE_IS_PLAIN), diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h index 16ea7f0f88..97111e76ea 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h @@ -33,7 +33,7 @@ typedef struct { NMSIfcfgKeyTypeFlags key_flags; } NMSIfcfgKeyTypeInfo; -extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[243]; +extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[247]; const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx); diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index 648846727f..ee78780282 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -1051,6 +1051,28 @@ write_infiniband_setting(NMConnection *connection, shvarFile *ifcfg, GError **er return TRUE; } +static void +write_hostname_setting(NMConnection *connection, shvarFile *ifcfg) +{ + NMSettingHostname *s_hostname; + NMTernary t; + + s_hostname = _nm_connection_get_setting(connection, NM_TYPE_SETTING_HOSTNAME); + if (!s_hostname) + return; + + svSetValueInt64(ifcfg, "HOSTNAME_PRIORITY", nm_setting_hostname_get_priority(s_hostname)); + + t = nm_setting_hostname_get_from_dhcp(s_hostname); + svSetValueInt64_cond(ifcfg, "HOSTNAME_FROM_DHCP", t != NM_TERNARY_DEFAULT, t); + + t = nm_setting_hostname_get_from_dns_lookup(s_hostname); + svSetValueInt64_cond(ifcfg, "HOSTNAME_FROM_DNS_LOOKUP", t != NM_TERNARY_DEFAULT, t); + + t = nm_setting_hostname_get_only_from_default(s_hostname); + svSetValueInt64_cond(ifcfg, "HOSTNAME_ONLY_FROM_DEFAULT", t != NM_TERNARY_DEFAULT, t); +} + static gboolean write_wired_setting(NMConnection *connection, shvarFile *ifcfg, GError **error) { @@ -3347,7 +3369,7 @@ do_write_construct(NMConnection * connection, return FALSE; write_match_setting(connection, ifcfg); - + write_hostname_setting(connection, ifcfg); write_sriov_setting(connection, ifcfg); if (!write_tc_setting(connection, ifcfg, error)) diff --git a/src/supplicant/nm-supplicant-interface.c b/src/supplicant/nm-supplicant-interface.c index 77254c7ebc..d3558a3331 100644 --- a/src/supplicant/nm-supplicant-interface.c +++ b/src/supplicant/nm-supplicant-interface.c @@ -668,19 +668,17 @@ _bss_info_properties_changed(NMSupplicantInterface *self, if (arr_len != 0) { nm_assert(arr_len == sizeof(bss_info->bssid)); bss_info->bssid_valid = TRUE; - memcpy(bss_info->bssid, arr_data, sizeof(bss_info->bssid)); + memcpy(&bss_info->bssid, arr_data, sizeof(bss_info->bssid)); } else if (bss_info->bssid_valid) { bss_info->bssid_valid = FALSE; - memset(bss_info->bssid, 0, sizeof(bss_info->bssid)); + memset(&bss_info->bssid, 0, sizeof(bss_info->bssid)); } g_variant_unref(v_v); } else { nm_assert(!initial || !bss_info->bssid_valid); } - nm_assert( - (bss_info->bssid_valid && !nm_utils_memeqzero(bss_info->bssid, sizeof(bss_info->bssid))) - || (!bss_info->bssid_valid - && nm_utils_memeqzero(bss_info->bssid, sizeof(bss_info->bssid)))); + nm_assert((!!bss_info->bssid_valid) + == (!nm_utils_memeqzero(&bss_info->bssid, sizeof(bss_info->bssid)))); p_max_rate_has = FALSE; p_max_rate = 0; @@ -1322,6 +1320,54 @@ nm_supplicant_interface_get_capabilities(NMSupplicantInterface *self) return caps; } +static void +set_bridge_cb(GVariant *ret, GError *error, gpointer user_data) +{ + NMSupplicantInterface *self; + NMLogLevel level; + gs_free const char * bridge = NULL; + + nm_utils_user_data_unpack(user_data, &self, &bridge); + + if (nm_utils_error_is_cancelled(error)) + return; + + /* The supplicant supports writing the bridge property since + * version 2.10. Before that version, trying to set the property + * results in a InvalidArgs error. Don't log a warning unless we + * are trying to set a non-NULL bridge. */ + if (!error) + level = LOGL_DEBUG; + else if (bridge == NULL && g_error_matches(error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS)) { + level = LOGL_DEBUG; + } else + level = LOGL_WARN; + + _NMLOG(level, + "set bridge %s%s%s result: %s", + NM_PRINT_FMT_QUOTE_STRING(bridge), + error ? error->message : "success"); +} + +void +nm_supplicant_interface_set_bridge(NMSupplicantInterface *self, const char *bridge) +{ + NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE(self); + + _LOGT("set bridge %s%s%s", NM_PRINT_FMT_QUOTE_STRING(bridge)); + + nm_dbus_connection_call_set(priv->dbus_connection, + priv->name_owner->str, + priv->object_path->str, + NM_WPAS_DBUS_IFACE_INTERFACE, + "BridgeIfname", + g_variant_new_string(bridge ?: ""), + DBUS_TIMEOUT_MSEC, + priv->main_cancellable, + set_bridge_cb, + nm_utils_user_data_pack(self, g_strdup(bridge))); +} + void nm_supplicant_interface_set_global_capabilities(NMSupplicantInterface *self, NMSupplCapMask value) { diff --git a/src/supplicant/nm-supplicant-interface.h b/src/supplicant/nm-supplicant-interface.h index 812ea193fb..97ff0a95b0 100644 --- a/src/supplicant/nm-supplicant-interface.h +++ b/src/supplicant/nm-supplicant-interface.h @@ -190,4 +190,6 @@ void nm_supplicant_interface_cancel_wps(NMSupplicantInterface *self); NMSupplicantAuthState nm_supplicant_interface_get_auth_state(NMSupplicantInterface *self); +void nm_supplicant_interface_set_bridge(NMSupplicantInterface *self, const char *bridge); + #endif /* __NM_SUPPLICANT_INTERFACE_H__ */ diff --git a/src/supplicant/nm-supplicant-types.h b/src/supplicant/nm-supplicant-types.h index e35059af45..72936ddfc2 100644 --- a/src/supplicant/nm-supplicant-types.h +++ b/src/supplicant/nm-supplicant-types.h @@ -158,7 +158,7 @@ typedef struct _NMSupplicantBssInfo { guint8 signal_percent; - guint8 bssid[6 /* ETH_ALEN */]; + NMEtherAddr bssid; NM80211ApFlags ap_flags : 5; diff --git a/src/systemd/src/libsystemd/sd-event/event-source.h b/src/systemd/src/libsystemd/sd-event/event-source.h index 08eb9b6a61..a8a30d825e 100644 --- a/src/systemd/src/libsystemd/sd-event/event-source.h +++ b/src/systemd/src/libsystemd/sd-event/event-source.h @@ -60,6 +60,7 @@ struct sd_event_source { bool pending:1; bool dispatching:1; bool floating:1; + bool exit_on_failure:1; int64_t priority; unsigned pending_index; diff --git a/src/systemd/src/libsystemd/sd-event/sd-event.c b/src/systemd/src/libsystemd/sd-event/sd-event.c index d5993a22b6..60df499b01 100644 --- a/src/systemd/src/libsystemd/sd-event/sd-event.c +++ b/src/systemd/src/libsystemd/sd-event/sd-event.c @@ -974,6 +974,12 @@ static sd_event_source *source_new(sd_event *e, bool floating, EventSourceType t return s; } +static int io_exit_callback(sd_event_source *s, int fd, uint32_t revents, void *userdata) { + assert(s); + + return sd_event_exit(sd_event_source_get_event(s), PTR_TO_INT(userdata)); +} + _public_ int sd_event_add_io( sd_event *e, sd_event_source **ret, @@ -989,10 +995,12 @@ _public_ int sd_event_add_io( assert_return(e = event_resolve(e), -ENOPKG); assert_return(fd >= 0, -EBADF); assert_return(!(events & ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP|EPOLLET)), -EINVAL); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = io_exit_callback; + s = source_new(e, !ret, SOURCE_IO); if (!s) return -ENOMEM; @@ -1238,6 +1246,12 @@ _public_ int sd_event_add_signal( return 0; } +static int child_exit_callback(sd_event_source *s, const siginfo_t *si, void *userdata) { + assert(s); + + return sd_event_exit(sd_event_source_get_event(s), PTR_TO_INT(userdata)); +} + static bool shall_use_pidfd(void) { /* Mostly relevant for debugging, i.e. this is used in test-event.c to test the event loop once with and once without pidfd */ return getenv_bool_secure("SYSTEMD_PIDFD") != 0; @@ -1259,10 +1273,12 @@ _public_ int sd_event_add_child( assert_return(pid > 1, -EINVAL); assert_return(!(options & ~(WEXITED|WSTOPPED|WCONTINUED)), -EINVAL); assert_return(options != 0, -EINVAL); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = child_exit_callback; + if (e->n_enabled_child_sources == 0) { /* Caller must block SIGCHLD before using us to watch children, even if pidfd is available, * for compatibility with pre-pidfd and because we don't want the reap the child processes @@ -1360,10 +1376,12 @@ _public_ int sd_event_add_child_pidfd( assert_return(pidfd >= 0, -EBADF); assert_return(!(options & ~(WEXITED|WSTOPPED|WCONTINUED)), -EINVAL); assert_return(options != 0, -EINVAL); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = child_exit_callback; + if (e->n_enabled_child_sources == 0) { r = signal_is_blocked(SIGCHLD); if (r < 0) @@ -1430,6 +1448,12 @@ _public_ int sd_event_add_child_pidfd( } #endif /* NM_IGNORED */ +static int generic_exit_callback(sd_event_source *s, void *userdata) { + assert(s); + + return sd_event_exit(sd_event_source_get_event(s), PTR_TO_INT(userdata)); +} + _public_ int sd_event_add_defer( sd_event *e, sd_event_source **ret, @@ -1441,10 +1465,12 @@ _public_ int sd_event_add_defer( assert_return(e, -EINVAL); assert_return(e = event_resolve(e), -ENOPKG); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = generic_exit_callback; + s = source_new(e, !ret, SOURCE_DEFER); if (!s) return -ENOMEM; @@ -1475,10 +1501,12 @@ _public_ int sd_event_add_post( assert_return(e, -EINVAL); assert_return(e = event_resolve(e), -ENOPKG); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = generic_exit_callback; + s = source_new(e, !ret, SOURCE_POST); if (!s) return -ENOMEM; @@ -1830,6 +1858,12 @@ static int inode_data_realize_watch(sd_event *e, struct inode_data *d) { return 1; } +static int inotify_exit_callback(sd_event_source *s, const struct inotify_event *event, void *userdata) { + assert(s); + + return sd_event_exit(sd_event_source_get_event(s), PTR_TO_INT(userdata)); +} + _public_ int sd_event_add_inotify( sd_event *e, sd_event_source **ret, @@ -1848,10 +1882,12 @@ _public_ int sd_event_add_inotify( assert_return(e, -EINVAL); assert_return(e = event_resolve(e), -ENOPKG); assert_return(path, -EINVAL); - assert_return(callback, -EINVAL); assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); assert_return(!event_pid_changed(e), -ECHILD); + if (!callback) + callback = inotify_exit_callback; + /* Refuse IN_MASK_ADD since we coalesce watches on the same inode, and hence really don't want to merge * masks. Or in other words, this whole code exists only to manage IN_MASK_ADD type operations for you, hence * the user can't use them for us. */ @@ -3187,16 +3223,21 @@ static int process_inotify(sd_event *e) { } static int source_dispatch(sd_event_source *s) { + _cleanup_(sd_event_unrefp) sd_event *saved_event = NULL; EventSourceType saved_type; int r = 0; assert(s); assert(s->pending || s->type == SOURCE_EXIT); - /* Save the event source type, here, so that we still know it after the event callback which might invalidate - * the event. */ + /* Save the event source type, here, so that we still know it after the event callback which might + * invalidate the event. */ saved_type = s->type; + /* Similar, store a reference to the event loop object, so that we can still access it after the + * callback might have invalidated/disconnected the event source. */ + saved_event = sd_event_ref(s->event); + if (!IN_SET(s->type, SOURCE_DEFER, SOURCE_EXIT)) { r = source_set_pending(s, false); if (r < 0) @@ -3303,9 +3344,15 @@ static int source_dispatch(sd_event_source *s) { s->dispatching = false; - if (r < 0) - log_debug_errno(r, "Event source %s (type %s) returned error, disabling: %m", - strna(s->description), event_source_type_to_string(saved_type)); + if (r < 0) { + log_debug_errno(r, "Event source %s (type %s) returned error, %s: %m", + strna(s->description), + event_source_type_to_string(saved_type), + s->exit_on_failure ? "exiting" : "disabling"); + + if (s->exit_on_failure) + (void) sd_event_exit(saved_event, r); + } if (s->n_ref == 0) source_free(s); @@ -3338,9 +3385,15 @@ static int event_prepare(sd_event *e) { r = s->prepare(s, s->userdata); s->dispatching = false; - if (r < 0) - log_debug_errno(r, "Prepare callback of event source %s (type %s) returned error, disabling: %m", - strna(s->description), event_source_type_to_string(s->type)); + if (r < 0) { + log_debug_errno(r, "Prepare callback of event source %s (type %s) returned error, %s: %m", + strna(s->description), + event_source_type_to_string(s->type), + s->exit_on_failure ? "exiting" : "disabling"); + + if (s->exit_on_failure) + (void) sd_event_exit(e, r); + } if (s->n_ref == 0) source_free(s); @@ -3979,4 +4032,22 @@ _public_ int sd_event_source_set_floating(sd_event_source *s, int b) { return 1; } + +_public_ int sd_event_source_get_exit_on_failure(sd_event_source *s) { + assert_return(s, -EINVAL); + assert_return(s->type != SOURCE_EXIT, -EDOM); + + return s->exit_on_failure; +} + +_public_ int sd_event_source_set_exit_on_failure(sd_event_source *s, int b) { + assert_return(s, -EINVAL); + assert_return(s->type != SOURCE_EXIT, -EDOM); + + if (s->exit_on_failure == !!b) + return 0; + + s->exit_on_failure = b; + return 1; +} #endif /* NM_IGNORED */ diff --git a/src/systemd/src/systemd/sd-event.h b/src/systemd/src/systemd/sd-event.h index dc96bfa681..3a53c3d27d 100644 --- a/src/systemd/src/systemd/sd-event.h +++ b/src/systemd/src/systemd/sd-event.h @@ -160,6 +160,8 @@ int sd_event_source_set_destroy_callback(sd_event_source *s, sd_event_destroy_t int sd_event_source_get_destroy_callback(sd_event_source *s, sd_event_destroy_t *ret); int sd_event_source_get_floating(sd_event_source *s); int sd_event_source_set_floating(sd_event_source *s, int b); +int sd_event_source_get_exit_on_failure(sd_event_source *s); +int sd_event_source_set_exit_on_failure(sd_event_source *s, int b); /* Define helpers so that __attribute__((cleanup(sd_event_unrefp))) and similar may be used. */ _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_event, sd_event_unref); diff --git a/src/tests/test-core-with-expect.c b/src/tests/test-core-with-expect.c index 62b93a047b..9c77a85d47 100644 --- a/src/tests/test-core-with-expect.c +++ b/src/tests/test-core-with-expect.c @@ -236,7 +236,7 @@ do_test_nm_utils_kill_child(void) char *argv1[] = { "bash", "-c", - "trap \"sleep 0.3; exit 10\" EXIT; " + "trap \"sleep 0.5; exit 10\" EXIT; " "sleep 100000; exit $? #" TEST_TOKEN, NULL, }; @@ -562,30 +562,26 @@ test_nm_utils_array_remove_at_indexes(void) static void test_nm_ethernet_address_is_valid(void) { - g_assert(!nm_ethernet_address_is_valid(NULL, -1)); - g_assert(!nm_ethernet_address_is_valid(NULL, ETH_ALEN)); + g_assert(!nm_ether_addr_is_valid_str(NULL)); + g_assert(!nm_ether_addr_is_valid(NULL)); - g_assert(!nm_ethernet_address_is_valid("FF:FF:FF:FF:FF:FF", -1)); - g_assert(!nm_ethernet_address_is_valid("00:00:00:00:00:00", -1)); - g_assert(!nm_ethernet_address_is_valid("44:44:44:44:44:44", -1)); - g_assert(!nm_ethernet_address_is_valid("00:30:b4:00:00:00", -1)); + g_assert(!nm_ether_addr_is_valid_str("FF:FF:FF:FF:FF:FF")); + g_assert(!nm_ether_addr_is_valid_str("00:00:00:00:00:00")); + g_assert(!nm_ether_addr_is_valid_str("44:44:44:44:44:44")); + g_assert(!nm_ether_addr_is_valid_str("00:30:b4:00:00:00")); - g_assert(!nm_ethernet_address_is_valid("", -1)); - g_assert(!nm_ethernet_address_is_valid("1", -1)); - g_assert(!nm_ethernet_address_is_valid("2", -1)); + g_assert(!nm_ether_addr_is_valid_str("")); + g_assert(!nm_ether_addr_is_valid_str("1")); + g_assert(!nm_ether_addr_is_valid_str("2")); - g_assert( - !nm_ethernet_address_is_valid(((guint8[8]){0x00, 0x30, 0xb4, 0x00, 0x00, 0x00}), ETH_ALEN)); - g_assert( - nm_ethernet_address_is_valid(((guint8[8]){0x00, 0x30, 0xb4, 0x00, 0x00, 0x01}), ETH_ALEN)); + g_assert(!nm_ether_addr_is_valid(&NM_ETHER_ADDR_INIT(0x00, 0x30, 0xb4, 0x00, 0x00, 0x00))); + g_assert(nm_ether_addr_is_valid(&NM_ETHER_ADDR_INIT(0x00, 0x30, 0xb4, 0x00, 0x00, 0x01))); /* some Broad cast addresses (with MSB of first octet set). */ - g_assert(!nm_ethernet_address_is_valid("57:44:44:44:44:44", -1)); - g_assert(nm_ethernet_address_is_valid("56:44:44:44:44:44", -1)); - g_assert( - !nm_ethernet_address_is_valid(((guint8[8]){0x03, 0x30, 0xb4, 0x00, 0x00, 0x00}), ETH_ALEN)); - g_assert( - nm_ethernet_address_is_valid(((guint8[8]){0x02, 0x30, 0xb4, 0x00, 0x00, 0x01}), ETH_ALEN)); + g_assert(!nm_ether_addr_is_valid_str("57:44:44:44:44:44")); + g_assert(nm_ether_addr_is_valid_str("56:44:44:44:44:44")); + g_assert(!nm_ether_addr_is_valid(&NM_ETHER_ADDR_INIT(0x03, 0x30, 0xb4, 0x00, 0x00, 0x00))); + g_assert(nm_ether_addr_is_valid(&NM_ETHER_ADDR_INIT(0x02, 0x30, 0xb4, 0x00, 0x00, 0x01))); } /*****************************************************************************/ diff --git a/src/tests/test-core.c b/src/tests/test-core.c index 37b4a6252c..39c5ad46d2 100644 --- a/src/tests/test-core.c +++ b/src/tests/test-core.c @@ -1929,7 +1929,7 @@ test_reverse_dns_ip4(void) GPtrArray *domains = g_ptr_array_new_full(8, g_free); inet_pton(AF_INET, "7.2.3.0", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 27, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 27, domains); g_assert_cmpuint(domains->len, ==, 32); g_assert_cmpstr(domains->pdata[0], ==, "0.3.2.7.in-addr.arpa"); g_assert_cmpstr(domains->pdata[31], ==, "31.3.2.7.in-addr.arpa"); @@ -1937,7 +1937,7 @@ test_reverse_dns_ip4(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "10.155.16.0", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 22, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 22, domains); g_assert_cmpuint(domains->len, ==, 4); g_assert_cmpstr(domains->pdata[0], ==, "16.155.10.in-addr.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "17.155.10.in-addr.arpa"); @@ -1947,21 +1947,21 @@ test_reverse_dns_ip4(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "4.5.6.7", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 32, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 32, domains); g_assert_cmpuint(domains->len, ==, 1); g_assert_cmpstr(domains->pdata[0], ==, "7.6.5.4.in-addr.arpa"); g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "4.5.6.7", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 8, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 8, domains); g_assert_cmpuint(domains->len, ==, 1); g_assert_cmpstr(domains->pdata[0], ==, "4.in-addr.arpa"); g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "4.180.6.7", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 9, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 9, domains); g_assert_cmpuint(domains->len, ==, 128); g_assert_cmpstr(domains->pdata[0], ==, "128.4.in-addr.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "129.4.in-addr.arpa"); @@ -1970,7 +1970,7 @@ test_reverse_dns_ip4(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "172.16.0.0", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 12, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 12, domains); g_assert_cmpuint(domains->len, ==, 16); g_assert_cmpstr(domains->pdata[0], ==, "16.172.in-addr.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "17.172.in-addr.arpa"); @@ -1980,7 +1980,7 @@ test_reverse_dns_ip4(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET, "1.2.3.4", &addr); - nm_utils_get_reverse_dns_domains_ip4(addr, 0, domains); + nm_utils_get_reverse_dns_domains_ip_4(addr, 0, domains); g_assert_cmpuint(domains->len, ==, 0); g_ptr_array_unref(domains); @@ -1993,14 +1993,14 @@ test_reverse_dns_ip6(void) GPtrArray * domains = g_ptr_array_new_full(8, g_free); inet_pton(AF_INET6, "1234::56", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 16, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 16, domains); g_assert_cmpuint(domains->len, ==, 1); g_assert_cmpstr(domains->pdata[0], ==, "4.3.2.1.ip6.arpa"); g_ptr_array_set_size(domains, 0); inet_pton(AF_INET6, "1234::56", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 17, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 17, domains); g_assert_cmpuint(domains->len, ==, 8); g_assert_cmpstr(domains->pdata[0], ==, "0.4.3.2.1.ip6.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "1.4.3.2.1.ip6.arpa"); @@ -2009,7 +2009,7 @@ test_reverse_dns_ip6(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET6, "2001:db8::", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 29, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 29, domains); g_assert_cmpuint(domains->len, ==, 8); g_assert_cmpstr(domains->pdata[0], ==, "8.b.d.0.1.0.0.2.ip6.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "9.b.d.0.1.0.0.2.ip6.arpa"); @@ -2018,7 +2018,7 @@ test_reverse_dns_ip6(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET6, "0123:4567:89ab:cdef::", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 63, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 63, domains); g_assert_cmpuint(domains->len, ==, 2); g_assert_cmpstr(domains->pdata[0], ==, "e.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.ip6.arpa"); g_assert_cmpstr(domains->pdata[1], ==, "f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.ip6.arpa"); @@ -2026,7 +2026,7 @@ test_reverse_dns_ip6(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET6, "fec0:1234:5678:9ab0::", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 61, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 61, domains); g_assert_cmpuint(domains->len, ==, 8); g_assert_cmpstr(domains->pdata[0], ==, "0.b.a.9.8.7.6.5.4.3.2.1.0.c.e.f.ip6.arpa"); g_assert_cmpstr(domains->pdata[7], ==, "7.b.a.9.8.7.6.5.4.3.2.1.0.c.e.f.ip6.arpa"); @@ -2034,7 +2034,7 @@ test_reverse_dns_ip6(void) g_ptr_array_set_size(domains, 0); inet_pton(AF_INET6, "0123:4567:89ab:cdee::", &addr); - nm_utils_get_reverse_dns_domains_ip6(&addr, 0, domains); + nm_utils_get_reverse_dns_domains_ip_6(&addr, 0, domains); g_assert_cmpuint(domains->len, ==, 0); g_ptr_array_unref(domains); diff --git a/src/tests/test-l3cfg.c b/src/tests/test-l3cfg.c index d55dcfbcaa..9156328b22 100644 --- a/src/tests/test-l3cfg.c +++ b/src/tests/test-l3cfg.c @@ -3,6 +3,7 @@ #include "nm-default.h" #include "nm-l3cfg.h" +#include "nm-l3-ipv4ll.h" #include "nm-netns.h" #include "platform/nm-platform.h" @@ -10,6 +11,23 @@ /*****************************************************************************/ +static NML3Cfg * +_netns_access_l3cfg(NMNetns *netns, int ifindex) +{ + NML3Cfg *l3cfg; + + g_assert(NM_IS_NETNS(netns)); + g_assert(ifindex > 0); + + g_assert(!nm_netns_get_l3cfg(netns, ifindex)); + + l3cfg = nm_netns_access_l3cfg(netns, ifindex); + g_assert(NM_IS_L3CFG(l3cfg)); + return l3cfg; +} + +/*****************************************************************************/ + typedef struct { int test_idx; NMPlatform * platform; @@ -28,6 +46,8 @@ _test_fixture_1_setup(TestFixture1 *f, int test_idx) { const NMPlatformLink *l0; const NMPlatformLink *l1; + const NMEtherAddr addr0 = NM_ETHER_ADDR_INIT(0xAA, 0xAA, test_idx, 0x00, 0x00, 0x00); + const NMEtherAddr addr1 = NM_ETHER_ADDR_INIT(0xAA, 0xAA, test_idx, 0x00, 0x00, 0x11); g_assert_cmpint(test_idx, >, 0); g_assert_cmpint(f->test_idx, ==, 0); @@ -41,14 +61,26 @@ _test_fixture_1_setup(TestFixture1 *f, int test_idx) f->multiidx = nm_dedup_multi_index_ref(nm_platform_get_multi_idx(f->platform)); f->netns = nm_netns_new(f->platform); - l0 = nmtstp_link_veth_add(f->platform, -1, f->ifname0, f->ifname1); + nmtstp_link_veth_add(f->platform, -1, f->ifname0, f->ifname1); + + l0 = nmtstp_link_get_typed(f->platform, -1, f->ifname0, NM_LINK_TYPE_VETH); l1 = nmtstp_link_get_typed(f->platform, -1, f->ifname1, NM_LINK_TYPE_VETH); f->ifindex0 = l0->ifindex; - f->hwaddr0 = l0->l_address; - f->ifindex1 = l1->ifindex; - f->hwaddr1 = l1->l_address; + + g_assert_cmpint(nm_platform_link_set_address(f->platform, f->ifindex0, &addr0, sizeof(addr0)), + ==, + 0); + g_assert_cmpint(nm_platform_link_set_address(f->platform, f->ifindex1, &addr1, sizeof(addr1)), + ==, + 0); + + l0 = nmtstp_link_get_typed(f->platform, f->ifindex0, f->ifname0, NM_LINK_TYPE_VETH); + l1 = nmtstp_link_get_typed(f->platform, f->ifindex1, f->ifname1, NM_LINK_TYPE_VETH); + + f->hwaddr0 = l0->l_address; + f->hwaddr1 = l1->l_address; g_assert(nm_platform_link_set_up(f->platform, f->ifindex0, NULL)); g_assert(nm_platform_link_set_up(f->platform, f->ifindex1, NULL)); @@ -93,15 +125,24 @@ typedef enum { typedef struct { const TestFixture1 *f; + bool has_addr4_101 : 1; + bool add_addr4_101 : 1; + + guint32 acd_timeout_msec_a; + NML3AcdDefendType acd_defend_type_a; + TestL3cfgNotifyType notify_type; guint post_commit_event_count; guint general_event_count; + guint general_event_flags; union { struct { int cb_count; bool expected_probe_result : 1; + bool acd_event_ready_45 : 1; + bool acd_event_ready_101 : 1; } wait_for_acd_ready_1; - } notify_data; + } notify_result; } TestL3cfgData; static void @@ -112,7 +153,8 @@ _test_l3cfg_data_set_notify_type(TestL3cfgData *tdata, TestL3cfgNotifyType notif tdata->notify_type = notify_type; tdata->post_commit_event_count = 0; tdata->general_event_count = 0; - memset(&tdata->notify_data, 0, sizeof(tdata->notify_data)); + tdata->general_event_flags = 0; + memset(&tdata->notify_result, 0, sizeof(tdata->notify_result)); } static void @@ -120,6 +162,8 @@ _test_l3cfg_signal_notify(NML3Cfg * l3cfg, const NML3ConfigNotifyData *notify_data, TestL3cfgData * tdata) { + guint i; + g_assert(NM_IS_L3CFG(l3cfg)); g_assert(tdata); g_assert(notify_data); @@ -131,6 +175,18 @@ _test_l3cfg_signal_notify(NML3Cfg * l3cfg, else if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE) { g_assert(NMP_OBJECT_IS_VALID(notify_data->platform_change.obj)); g_assert(notify_data->platform_change.change_type != 0); + } else if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT) { + g_assert_cmpint(notify_data->acd_event.info.n_track_infos, >=, 1); + g_assert(notify_data->acd_event.info.track_infos); + for (i = 0; i < notify_data->acd_event.info.n_track_infos; i++) { + const NML3AcdAddrTrackInfo *ti = ¬ify_data->acd_event.info.track_infos[i]; + + nm_assert(NMP_OBJECT_GET_TYPE(ti->obj) == NMP_OBJECT_TYPE_IP4_ADDRESS); + nm_assert(NMP_OBJECT_CAST_IP4_ADDRESS(ti->obj)->address + == notify_data->acd_event.info.addr); + nm_assert(NM_IS_L3_CONFIG_DATA(ti->l3cd)); + nm_assert(ti->tag); + } } switch (tdata->notify_type) { @@ -150,14 +206,33 @@ _test_l3cfg_signal_notify(NML3Cfg * l3cfg, case NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT: tdata->post_commit_event_count++; return; - case NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED: + case NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT: switch (tdata->f->test_idx) { case 2: - nmtst_assert_ip4_address(notify_data->acd_completed.addr, "192.167.133.45"); - g_assert(notify_data->acd_completed.probe_result); + case 3: + nmtst_assert_ip4_address(notify_data->acd_event.info.addr, "192.168.133.45"); + if (tdata->f->test_idx == 2) + g_assert(notify_data->acd_event.info.state == NM_L3_ACD_ADDR_STATE_DEFENDING); + else + g_assert(notify_data->acd_event.info.state == NM_L3_ACD_ADDR_STATE_PROBING); g_assert(tdata->general_event_count == 0); tdata->general_event_count++; return; + case 4: + if (notify_data->acd_event.info.addr == nmtst_inet4_from_string("192.168.133.45")) { + g_assert(!NM_FLAGS_HAS(tdata->general_event_flags, 0x1u)); + tdata->general_event_flags |= 0x1u; + g_assert(notify_data->acd_event.info.state == NM_L3_ACD_ADDR_STATE_PROBING); + tdata->general_event_count++; + } else if (notify_data->acd_event.info.addr + == nmtst_inet4_from_string("192.168.133.101")) { + g_assert(!NM_FLAGS_HAS(tdata->general_event_flags, 0x4u)); + tdata->general_event_flags |= 0x4u; + g_assert(notify_data->acd_event.info.state == NM_L3_ACD_ADDR_STATE_PROBING); + tdata->general_event_count++; + } else + g_assert_not_reached(); + return; default: g_assert_not_reached(); return; @@ -169,30 +244,63 @@ _test_l3cfg_signal_notify(NML3Cfg * l3cfg, return; } case TEST_L3CFG_NOTIFY_TYPE_WAIT_FOR_ACD_READY_1: + { + int num_acd_completed_events = + 1 + 2 + (tdata->add_addr4_101 ? (tdata->has_addr4_101 ? 1 : 3) : 0); + if (NM_IN_SET(notify_data->notify_type, NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE, NM_L3_CONFIG_NOTIFY_TYPE_PLATFORM_CHANGE_ON_IDLE)) return; - if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_ACD_COMPLETED) { - g_assert(tdata->notify_data.wait_for_acd_ready_1.cb_count == 0); - tdata->notify_data.wait_for_acd_ready_1.cb_count++; + if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_ACD_EVENT) { + if (notify_data->acd_event.info.addr == nmtst_inet4_from_string("192.168.133.45")) { + g_assert(NM_IN_SET(notify_data->acd_event.info.state, + NM_L3_ACD_ADDR_STATE_READY, + NM_L3_ACD_ADDR_STATE_DEFENDING)); + tdata->notify_result.wait_for_acd_ready_1.acd_event_ready_45 = TRUE; + } else if (notify_data->acd_event.info.addr + == nmtst_inet4_from_string("192.168.133.101")) { + if (tdata->has_addr4_101) { + g_assert( + NM_IN_SET(notify_data->acd_event.info.state, NM_L3_ACD_ADDR_STATE_USED)); + } else { + g_assert(NM_IN_SET(notify_data->acd_event.info.state, + NM_L3_ACD_ADDR_STATE_READY, + NM_L3_ACD_ADDR_STATE_DEFENDING)); + tdata->notify_result.wait_for_acd_ready_1.acd_event_ready_101 = TRUE; + } + } else + g_assert_not_reached(); + + g_assert_cmpint(tdata->notify_result.wait_for_acd_ready_1.cb_count, + <, + num_acd_completed_events); + tdata->notify_result.wait_for_acd_ready_1.cb_count++; return; } if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_POST_COMMIT) { - g_assert(tdata->notify_data.wait_for_acd_ready_1.cb_count == 1); - tdata->notify_data.wait_for_acd_ready_1.cb_count++; - nmtstp_platform_ip_addresses_assert(tdata->f->platform, - tdata->f->ifindex0, - TRUE, - TRUE, - TRUE, - "192.167.133.45", - "1:2:3:4::45"); + g_assert_cmpint(tdata->notify_result.wait_for_acd_ready_1.cb_count, >, 0); + g_assert_cmpint(tdata->notify_result.wait_for_acd_ready_1.cb_count, + <, + num_acd_completed_events); + tdata->notify_result.wait_for_acd_ready_1.cb_count++; + nmtstp_platform_ip_addresses_assert( + tdata->f->platform, + tdata->f->ifindex0, + TRUE, + TRUE, + TRUE, + tdata->notify_result.wait_for_acd_ready_1.acd_event_ready_45 ? "192.168.133.45" + : NULL, + tdata->notify_result.wait_for_acd_ready_1.acd_event_ready_101 ? "192.168.133.101" + : NULL, + "1:2:3:4::45"); return; } g_assert_not_reached(); return; } + } g_assert_not_reached(); } @@ -200,19 +308,20 @@ _test_l3cfg_signal_notify(NML3Cfg * l3cfg, static void test_l3cfg(gconstpointer test_data) { - nm_auto(_test_fixture_1_teardown) TestFixture1 test_fixture = {}; + const int TEST_IDX = GPOINTER_TO_INT(test_data); + const guint32 ACD_TIMEOUT_BASE_MSEC = 1000; + nm_auto(_test_fixture_1_teardown) TestFixture1 test_fixture = {}; const TestFixture1 * f; NML3CfgCommitTypeHandle * commit_type_1; NML3CfgCommitTypeHandle * commit_type_2; - gs_unref_object NML3Cfg *l3cfg0 = NULL; - nm_auto_unref_l3cd const NML3ConfigData *l3cd_a = NULL; - guint32 acd_timeout_msec = 0; - TestL3cfgData tdata_stack = { + gs_unref_object NML3Cfg *l3cfg0 = NULL; + nm_auto_unref_l3cd const NML3ConfigData *l3cd_a = NULL; + TestL3cfgData tdata_stack = { .f = NULL, }; TestL3cfgData *const tdata = &tdata_stack; - _LOGD("test start (/l3cfg/%d)", GPOINTER_TO_INT(test_data)); + _LOGD("test start (/l3cfg/%d)", TEST_IDX); if (nmtst_test_quick()) { gs_free char *msg = @@ -223,18 +332,39 @@ test_l3cfg(gconstpointer test_data) return; } - f = _test_fixture_1_setup(&test_fixture, GPOINTER_TO_INT(test_data)); - - tdata->f = f; + f = _test_fixture_1_setup(&test_fixture, TEST_IDX); + + tdata->f = f; + tdata->has_addr4_101 = (f->test_idx == 4 && nmtst_get_rand_bool()); + tdata->add_addr4_101 = (f->test_idx == 4 && nmtst_get_rand_bool()); + + tdata->acd_timeout_msec_a = NM_IN_SET(f->test_idx, 3, 4) ? ACD_TIMEOUT_BASE_MSEC : 0u; + tdata->acd_defend_type_a = NM_IN_SET(f->test_idx, 4) + ? nmtst_rand_select(NM_L3_ACD_DEFEND_TYPE_NEVER, + NM_L3_ACD_DEFEND_TYPE_ONCE, + NM_L3_ACD_DEFEND_TYPE_ALWAYS) + : NM_L3_ACD_DEFEND_TYPE_NEVER; + + if (tdata->has_addr4_101) { + nmtstp_ip4_address_add(f->platform, + -1, + f->ifindex1, + nmtst_inet4_from_string("192.168.133.101"), + 24, + nmtst_inet4_from_string("192.168.133.101"), + 100000, + 0, + 0, + NULL); + } - l3cfg0 = nm_netns_access_l3cfg(f->netns, f->ifindex0); - g_assert(NM_IS_L3CFG(l3cfg0)); + l3cfg0 = _netns_access_l3cfg(f->netns, f->ifindex0); g_signal_connect(l3cfg0, NM_L3CFG_SIGNAL_NOTIFY, G_CALLBACK(_test_l3cfg_signal_notify), tdata); commit_type_1 = nm_l3cfg_commit_type_register(l3cfg0, NM_L3_CFG_COMMIT_TYPE_UPDATE, NULL); - if ((nmtst_get_rand_uint32() % 4u) != 0) { + if (!nmtst_get_rand_one_case_in(4)) { commit_type_2 = nm_l3cfg_commit_type_register(l3cfg0, nmtst_rand_select(NM_L3_CFG_COMMIT_TYPE_NONE, @@ -249,6 +379,7 @@ test_l3cfg(gconstpointer test_data) break; case 2: case 3: + case 4: { nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL; @@ -256,23 +387,32 @@ test_l3cfg(gconstpointer test_data) nm_l3_config_data_add_address_4( l3cd, - NM_PLATFORM_IP4_ADDRESS_INIT(.address = nmtst_inet4_from_string("192.167.133.45"), - .peer_address = nmtst_inet4_from_string("192.167.133.45"), + NM_PLATFORM_IP4_ADDRESS_INIT(.address = nmtst_inet4_from_string("192.168.133.45"), + .peer_address = nmtst_inet4_from_string("192.168.133.45"), .plen = 24, )); + if (tdata->add_addr4_101) { + nm_l3_config_data_add_address_4( + l3cd, + NM_PLATFORM_IP4_ADDRESS_INIT(.address = nmtst_inet4_from_string("192.168.133.101"), + .peer_address = + nmtst_inet4_from_string("192.168.133.101"), + .plen = 24, )); + } + nm_l3_config_data_add_address_6( l3cd, NM_PLATFORM_IP6_ADDRESS_INIT(.address = *nmtst_inet6_from_string("1:2:3:4::45"), .plen = 64, )); - if (nmtst_get_rand_bool()) + if (nmtst_get_rand_one_case_in(2)) nm_l3_config_data_seal(l3cd); l3cd_a = g_steal_pointer(&l3cd); break; } } - acd_timeout_msec = (f->test_idx == 3) ? 2000u : 0u; + nm_l3_config_data_log(l3cd_a, "l3cd_a", "platform-test: l3cd_a: ", LOGL_DEBUG, LOGD_PLATFORM); if (l3cd_a) { nm_l3cfg_add_config(l3cfg0, @@ -286,7 +426,8 @@ test_l3cfg(gconstpointer test_data) NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6, 0, 0, - acd_timeout_msec, + tdata->acd_defend_type_a, + tdata->acd_timeout_msec_a, NM_L3_CONFIG_MERGE_FLAGS_NONE); } @@ -306,24 +447,32 @@ test_l3cfg(gconstpointer test_data) TRUE, TRUE, TRUE, - NM_IN_SET(f->test_idx, 2) ? "192.167.133.45" : NULL, - NM_IN_SET(f->test_idx, 2, 3) ? "1:2:3:4::45" : NULL); + NM_IN_SET(f->test_idx, 2) ? "192.168.133.45" : NULL, + NM_IN_SET(f->test_idx, 2, 3, 4) ? "1:2:3:4::45" : NULL); if (NM_IN_SET(f->test_idx, 1, 2)) { _test_l3cfg_data_set_notify_type(tdata, TEST_L3CFG_NOTIFY_TYPE_IDLE_ASSERT_NO_SIGNAL); _LOGT("poll 1 start"); - nmtst_main_context_iterate_until(NULL, nmtst_get_rand_uint32() % 5000u, FALSE); + nmtst_main_context_iterate_until(NULL, + nmtst_get_rand_uint32() % (ACD_TIMEOUT_BASE_MSEC * 5u), + FALSE); _LOGT("poll 1 end"); _test_l3cfg_data_set_notify_type(tdata, TEST_L3CFG_NOTIFY_TYPE_NONE); } - if (NM_IN_SET(f->test_idx, 3)) { + if (NM_IN_SET(f->test_idx, 3, 4)) { _test_l3cfg_data_set_notify_type(tdata, TEST_L3CFG_NOTIFY_TYPE_WAIT_FOR_ACD_READY_1); - tdata->notify_data.wait_for_acd_ready_1.expected_probe_result = TRUE; + tdata->notify_result.wait_for_acd_ready_1.expected_probe_result = TRUE; _LOGT("poll 2 start"); - nmtst_main_context_iterate_until(NULL, 2500u + (nmtst_get_rand_uint32() % 4000u), FALSE); + nmtst_main_context_iterate_until( + NULL, + ACD_TIMEOUT_BASE_MSEC * 3u / 2u + + (nmtst_get_rand_uint32() % (2u * ACD_TIMEOUT_BASE_MSEC)), + FALSE); _LOGT("poll 2 end"); - g_assert_cmpint(tdata->notify_data.wait_for_acd_ready_1.cb_count, ==, 2); + g_assert_cmpint(tdata->notify_result.wait_for_acd_ready_1.cb_count, + ==, + 1 + 2 + (tdata->add_addr4_101 ? (tdata->has_addr4_101 ? 1 : 3) : 0)); _test_l3cfg_data_set_notify_type(tdata, TEST_L3CFG_NOTIFY_TYPE_NONE); } @@ -332,15 +481,296 @@ test_l3cfg(gconstpointer test_data) nm_l3cfg_commit_type_unregister(l3cfg0, commit_type_1); nm_l3cfg_commit_type_unregister(l3cfg0, commit_type_2); - if ((nmtst_get_rand_uint32() % 3) == 0) + if (nmtst_get_rand_one_case_in(3)) _test_fixture_1_teardown(&test_fixture); nm_l3cfg_remove_config_all(l3cfg0, GINT_TO_POINTER('a'), FALSE); - if ((nmtst_get_rand_uint32() % 3) == 0) + if (nmtst_get_rand_one_case_in(3)) _test_fixture_1_teardown(&test_fixture); - _LOGD("test end (/l3cfg/%d)", f->test_idx); + _LOGD("test end (/l3cfg/%d)", TEST_IDX); +} + +/*****************************************************************************/ + +#define L3IPV4LL_ACD_TIMEOUT_MSEC 1500u + +typedef struct { + const TestFixture1 * f; + NML3CfgCommitTypeHandle *l3cfg_commit_type_1; + guint acd_timeout_msec; + NML3IPv4LL * l3ipv4ll; + bool has_addr4_101; + gint8 ready_seen; + gint8 addr_commit; + in_addr_t addr_commit_addr; + bool add_conflict_checked : 1; + bool add_conflict_done; +} TestL3IPv4LLData; + +static gconstpointer +TEST_L3_IPV4LL_TAG(const TestL3IPv4LLData *tdata, guint offset) +{ + return (&(((const char *) tdata)[offset])); +} + +static void +_test_l3_ipv4ll_maybe_add_addr_4(const TestL3IPv4LLData *tdata, + int ifindex, + guint one_case_in_num, + bool * has_addr, + const char * addr) +{ + if (has_addr) { + if (*has_addr || !nmtst_get_rand_one_case_in(one_case_in_num)) + return; + *has_addr = TRUE; + } + + if (ifindex == 0) + ifindex = tdata->f->ifindex0; + + g_assert_cmpint(ifindex, >, 0); + + _LOGT("add test address: %s on ifindex=%d", addr, ifindex); + + nmtstp_ip4_address_add(tdata->f->platform, + -1, + ifindex, + nmtst_inet4_from_string(addr), + 24, + nmtst_inet4_from_string(addr), + 100000, + 0, + 0, + NULL); +} + +static void +_test_l3_ipv4ll_signal_notify(NML3Cfg * l3cfg, + const NML3ConfigNotifyData *notify_data, + TestL3IPv4LLData * tdata) +{ + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + + g_assert(NM_IS_L3CFG(l3cfg)); + g_assert(tdata); + g_assert(notify_data); + g_assert(_NM_INT_NOT_NEGATIVE(notify_data->notify_type)); + g_assert(notify_data->notify_type < _NM_L3_CONFIG_NOTIFY_TYPE_NUM); + + if (notify_data->notify_type == NM_L3_CONFIG_NOTIFY_TYPE_IPV4LL_EVENT) { + g_assert(tdata->l3ipv4ll == notify_data->ipv4ll_event.ipv4ll); + g_assert(NM_IN_SET(tdata->ready_seen, 0, 1)); + g_assert(NM_IN_SET(tdata->addr_commit, 0, 1)); + + if (nm_l3_ipv4ll_get_state(tdata->l3ipv4ll) == NM_L3_IPV4LL_STATE_READY) { + g_assert_cmpint(tdata->ready_seen, ==, 0); + g_assert_cmpint(tdata->addr_commit, ==, 0); + tdata->ready_seen++; + + if (tdata->f->test_idx == 2 && nmtst_get_rand_bool()) { + tdata->addr_commit++; + tdata->addr_commit_addr = nm_l3_ipv4ll_get_addr(tdata->l3ipv4ll); + g_assert(nm_utils_ip4_address_is_link_local(tdata->addr_commit_addr)); + _LOGT("add address %s that passed ACD", + _nm_utils_inet4_ntop(tdata->addr_commit_addr, sbuf_addr)); + if (!nm_l3cfg_add_config(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll), + TEST_L3_IPV4LL_TAG(tdata, 1), + nmtst_get_rand_bool(), + nm_l3_ipv4ll_get_l3cd(tdata->l3ipv4ll), + NM_L3CFG_CONFIG_PRIORITY_IPV4LL, + 0, + 0, + 104, + 105, + 0, + 0, + NM_L3_ACD_DEFEND_TYPE_ONCE, + nmtst_get_rand_bool() ? tdata->acd_timeout_msec : 0u, + NM_L3_CONFIG_MERGE_FLAGS_NONE)) + g_assert_not_reached(); + nm_l3cfg_commit_on_idle_schedule(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll)); + + tdata->l3cfg_commit_type_1 = + nm_l3cfg_commit_type_register(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll), + NM_L3_CFG_COMMIT_TYPE_UPDATE, + tdata->l3cfg_commit_type_1); + } + } else if (nm_l3_ipv4ll_get_state(tdata->l3ipv4ll) != NM_L3_IPV4LL_STATE_DEFENDING + && tdata->ready_seen > 0) { + g_assert_cmpint(tdata->ready_seen, ==, 1); + tdata->ready_seen--; + if (tdata->addr_commit > 0) { + g_assert_cmpint(tdata->addr_commit, ==, 1); + tdata->addr_commit--; + g_assert(nm_utils_ip4_address_is_link_local(tdata->addr_commit_addr)); + _LOGT("remove address %s that previously passed ACD", + _nm_utils_inet4_ntop(tdata->addr_commit_addr, sbuf_addr)); + if (!nm_l3cfg_remove_config_all(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll), + TEST_L3_IPV4LL_TAG(tdata, 1), + FALSE)) + g_assert_not_reached(); + nm_l3cfg_commit_on_idle_schedule(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll)); + nm_l3cfg_commit_type_unregister(nm_l3_ipv4ll_get_l3cfg(tdata->l3ipv4ll), + g_steal_pointer(&tdata->l3cfg_commit_type_1)); + } + } + return; + } +} + +static void +test_l3_ipv4ll(gconstpointer test_data) +{ + const int TEST_IDX = GPOINTER_TO_INT(test_data); + nm_auto(_test_fixture_1_teardown) TestFixture1 test_fixture = {}; + const TestFixture1 * f; + gs_unref_object NML3Cfg *l3cfg0 = NULL; + TestL3IPv4LLData tdata_stack = { + .f = NULL, + }; + TestL3IPv4LLData *const tdata = &tdata_stack; + NMTstpAcdDefender * acd_defender_1 = NULL; + NMTstpAcdDefender * acd_defender_2 = NULL; + nm_auto_unref_l3ipv4ll NML3IPv4LL * l3ipv4ll = NULL; + gint64 start_time_msec; + gint64 total_poll_time_msec; + nm_auto_remove_l3ipv4ll_registration NML3IPv4LLRegistration *l3ipv4ll_reg = NULL; + char sbuf_addr[NM_UTILS_INET_ADDRSTRLEN]; + + _LOGD("test start (/l3-ipv4ll/%d)", TEST_IDX); + + if (nmtst_test_quick()) { + gs_free char *msg = + g_strdup_printf("Skipping test: don't run long running test %s (NMTST_DEBUG=slow)\n", + g_get_prgname() ?: "test-l3-ipv4ll"); + + g_test_skip(msg); + return; + } + + f = _test_fixture_1_setup(&test_fixture, TEST_IDX); + + tdata->f = f; + + if (tdata->f->test_idx == 1) + tdata->acd_timeout_msec = 0; + else + tdata->acd_timeout_msec = L3IPV4LL_ACD_TIMEOUT_MSEC; + + _test_l3_ipv4ll_maybe_add_addr_4(tdata, 0, 4, &tdata->has_addr4_101, "192.168.133.101"); + + l3cfg0 = _netns_access_l3cfg(f->netns, f->ifindex0); + + g_signal_connect(l3cfg0, + NM_L3CFG_SIGNAL_NOTIFY, + G_CALLBACK(_test_l3_ipv4ll_signal_notify), + tdata); + + l3ipv4ll = nm_l3_ipv4ll_new(l3cfg0); + + tdata->l3ipv4ll = l3ipv4ll; + + g_assert_cmpint(nm_l3_ipv4ll_get_ifindex(l3ipv4ll), ==, f->ifindex0); + g_assert_cmpint(nm_l3_ipv4ll_get_state(l3ipv4ll), ==, NM_L3_IPV4LL_STATE_DISABLED); + g_assert_cmpint(nm_l3_ipv4ll_get_addr(l3ipv4ll), ==, 0u); + + if (tdata->f->test_idx == 1) { + if (nmtst_get_rand_one_case_in(2)) + l3ipv4ll_reg = nm_l3_ipv4ll_register_new(l3ipv4ll, tdata->acd_timeout_msec); + } else + l3ipv4ll_reg = nm_l3_ipv4ll_register_new(l3ipv4ll, tdata->acd_timeout_msec); + + g_assert(tdata->acd_timeout_msec == 0 || l3ipv4ll_reg); + g_assert(!l3ipv4ll_reg || l3ipv4ll == nm_l3_ipv4ll_register_get_instance(l3ipv4ll_reg)); + + if (tdata->acd_timeout_msec == 0) { + g_assert_cmpint(nm_l3_ipv4ll_get_state(l3ipv4ll), ==, NM_L3_IPV4LL_STATE_DISABLED); + g_assert_cmpint(nm_l3_ipv4ll_get_addr(l3ipv4ll), ==, 0u); + } else { + g_assert_cmpint(nm_l3_ipv4ll_get_state(l3ipv4ll), ==, NM_L3_IPV4LL_STATE_PROBING); + if (f->test_idx == 1) { + g_assert_cmpint(nm_l3_ipv4ll_get_addr(l3ipv4ll), + ==, + nmtst_inet4_from_string("169.254.30.158")); + } else { + g_assert_cmpint(nm_l3_ipv4ll_get_addr(l3ipv4ll), + ==, + nmtst_inet4_from_string("169.254.17.45")); + } + g_assert(nm_l3_ipv4ll_get_l3cd(l3ipv4ll)); + } + + _test_l3_ipv4ll_maybe_add_addr_4(tdata, 0, 4, &tdata->has_addr4_101, "192.168.133.101"); + + if (tdata->f->test_idx == 2 && nmtst_get_rand_one_case_in(3)) { + in_addr_t a = nm_l3_ipv4ll_get_addr(l3ipv4ll); + + g_assert(nm_utils_ip4_address_is_link_local(a)); + _test_l3_ipv4ll_maybe_add_addr_4(tdata, + tdata->f->ifindex1, + 2, + &tdata->add_conflict_done, + _nm_utils_inet4_ntop(a, sbuf_addr)); + g_assert_cmpint(tdata->f->hwaddr1.len, ==, sizeof(NMEtherAddr)); + acd_defender_2 = + nmtstp_acd_defender_new(tdata->f->ifindex1, a, &tdata->f->hwaddr1.ether_addr); + } + + start_time_msec = nm_utils_get_monotonic_timestamp_msec(); + total_poll_time_msec = + (L3IPV4LL_ACD_TIMEOUT_MSEC * 3 / 2) + (nmtst_get_rand_uint32() % L3IPV4LL_ACD_TIMEOUT_MSEC); + _LOGT("poll 1 start (wait %" G_GINT64_FORMAT " msec)", total_poll_time_msec); + while (TRUE) { + gint64 next_timeout_msec; + + next_timeout_msec = + start_time_msec + total_poll_time_msec - nm_utils_get_monotonic_timestamp_msec(); + if (next_timeout_msec <= 0) + break; + + next_timeout_msec = NM_MIN(next_timeout_msec, nmtst_get_rand_uint32() % 1000u); + nmtst_main_context_iterate_until(NULL, next_timeout_msec, FALSE); + _LOGT("poll 1 intermezzo"); + + _test_l3_ipv4ll_maybe_add_addr_4(tdata, + 0, + 1 + total_poll_time_msec / 1000, + &tdata->has_addr4_101, + "192.168.133.101"); + + if (tdata->addr_commit == 1 && !tdata->add_conflict_checked) { + tdata->add_conflict_checked = TRUE; + _test_l3_ipv4ll_maybe_add_addr_4( + tdata, + tdata->f->ifindex1, + 2, + &tdata->add_conflict_done, + _nm_utils_inet4_ntop(tdata->addr_commit_addr, sbuf_addr)); + if (tdata->add_conflict_done) + total_poll_time_msec += L3IPV4LL_ACD_TIMEOUT_MSEC / 2; + g_assert_cmpint(tdata->f->hwaddr1.len, ==, sizeof(NMEtherAddr)); + acd_defender_2 = nmtstp_acd_defender_new(tdata->f->ifindex1, + tdata->addr_commit_addr, + &tdata->f->hwaddr1.ether_addr); + } + } + _LOGT("poll 1 end"); + + if (tdata->addr_commit || nmtst_get_rand_bool()) { + nm_l3cfg_remove_config_all(nm_l3_ipv4ll_get_l3cfg(l3ipv4ll), + TEST_L3_IPV4LL_TAG(tdata, 1), + FALSE); + } + + nmtstp_acd_defender_destroy(g_steal_pointer(&acd_defender_1)); + nmtstp_acd_defender_destroy(g_steal_pointer(&acd_defender_2)); + + nm_l3cfg_commit_type_unregister(l3cfg0, g_steal_pointer(&tdata->l3cfg_commit_type_1)); + + g_signal_handlers_disconnect_by_func(l3cfg0, G_CALLBACK(_test_l3_ipv4ll_signal_notify), tdata); } /*****************************************************************************/ @@ -350,7 +780,7 @@ NMTstpSetupFunc const _nmtstp_setup_platform_func = nm_linux_platform_setup; void _nmtstp_init_tests(int *argc, char ***argv) { - nmtst_init_with_logging(argc, argv, NULL, "ALL"); + nmtst_init_with_logging(argc, argv, "ERR", "ALL"); } void @@ -359,4 +789,7 @@ _nmtstp_setup_tests(void) g_test_add_data_func("/l3cfg/1", GINT_TO_POINTER(1), test_l3cfg); g_test_add_data_func("/l3cfg/2", GINT_TO_POINTER(2), test_l3cfg); g_test_add_data_func("/l3cfg/3", GINT_TO_POINTER(3), test_l3cfg); + g_test_add_data_func("/l3cfg/4", GINT_TO_POINTER(4), test_l3cfg); + g_test_add_data_func("/l3-ipv4ll/1", GINT_TO_POINTER(1), test_l3_ipv4ll); + g_test_add_data_func("/l3-ipv4ll/2", GINT_TO_POINTER(2), test_l3_ipv4ll); } diff --git a/src/vpn/nm-vpn-connection.c b/src/vpn/nm-vpn-connection.c index 68c66af7d7..0d4b12bc12 100644 --- a/src/vpn/nm-vpn-connection.c +++ b/src/vpn/nm-vpn-connection.c @@ -862,22 +862,22 @@ nm_vpn_connection_new(NMSettingsConnection * settings_connection, g_return_val_if_fail(NM_IS_DEVICE(parent_device), NULL); g_return_val_if_fail(specific_object, NULL); - return (NMVpnConnection *) g_object_new(NM_TYPE_VPN_CONNECTION, - NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, - settings_connection, - NM_ACTIVE_CONNECTION_INT_DEVICE, - parent_device, - NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, - specific_object, - NM_ACTIVE_CONNECTION_INT_SUBJECT, - subject, - NM_ACTIVE_CONNECTION_INT_ACTIVATION_REASON, - activation_reason, - NM_ACTIVE_CONNECTION_VPN, - TRUE, - NM_ACTIVE_CONNECTION_STATE_FLAGS, - (guint) initial_state_flags, - NULL); + return g_object_new(NM_TYPE_VPN_CONNECTION, + NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, + settings_connection, + NM_ACTIVE_CONNECTION_INT_DEVICE, + parent_device, + NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, + specific_object, + NM_ACTIVE_CONNECTION_INT_SUBJECT, + subject, + NM_ACTIVE_CONNECTION_INT_ACTIVATION_REASON, + activation_reason, + NM_ACTIVE_CONNECTION_VPN, + TRUE, + NM_ACTIVE_CONNECTION_STATE_FLAGS, + (guint) initial_state_flags, + NULL); } const char * diff --git a/tools/check-compare-generated.sh b/tools/check-compare-generated.sh new file mode 100755 index 0000000000..44b70f95c6 --- /dev/null +++ b/tools/check-compare-generated.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +srcdir="$1" +builddir="$2" +doc_h="$3" + +[ -n "$NMTST_NO_CHECK_SETTINGS_DOCS" ] && exit 0 + +cmp -s "${srcdir}/${doc_h}.in" "${builddir}/${doc_h}" && exit 0 + +if [ "$NM_TEST_REGENERATE" = 1 ] ; then + cp -f "${builddir}/${doc_h}" "${srcdir}/${doc_h}.in" +else + echo "*** Error: the generated file '${builddir}/${doc_h}' differs from the source file '${srcdir}/${doc_h}.in'. You probably should copy the generated file over to the source file. You can skip this test by setting NMTST_NO_CHECK_SETTINGS_DOCS=yes. You can also automatically copy the file by rerunning the test with NM_TEST_REGENERATE=1" + exit 1 +fi diff --git a/tools/check-config-options.sh b/tools/check-config-options.sh index 7a775955bb..d9d4431ee8 100755 --- a/tools/check-config-options.sh +++ b/tools/check-config-options.sh @@ -18,8 +18,8 @@ get_missing_options() get_src_con_defaults() { - sed -ne 's/.*\<NM_CON_DEFAULT\s*("\([^"]*\)").*/\1/p' $(find "$srcdir/src/" -name \*.c ! -name test\*.c) - sed -ne 's/.*\<NM_CON_DEFAULT_NOP\s*("\([^"]*\)").*/\1/p' $(find "$srcdir/src/" -name \*.c ! -name test\*.c) + sed -n 's/\<NM_CON_DEFAULT/\n\0/gp' $(find "$srcdir/src/" -name \*.c ! -name test\*.c) | + sed -n 's/.*\<NM_CON_DEFAULT\(_NOP\)\?\s*("\([^"]*\)").*/\2/p' } get_man_con_defaults() diff --git a/tools/check-gitlab-ci.sh b/tools/check-gitlab-ci.sh new file mode 100755 index 0000000000..da5fcc597b --- /dev/null +++ b/tools/check-gitlab-ci.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +if [ $# -eq 0 ] ; then + BASEDIR="$(dirname "$(readlink -f "$0")")/.." +elif [ $# -eq 1 ] ; then + BASEDIR="$1" +else + echo "invalid arguments" + exit 1 +fi + +cd "$BASEDIR" + +if ! [ -f ./.gitlab-ci.yml ] ; then + # we have no gitlab-ci. Probably this is not a git-checkout + # but a dist'ed source-tree. Nothing to check. + exit 0 +fi + +if ! ci-fairy --help 2>&1 >/dev/null ; then + # ci-fairy not available. Cannot check. + exit 0 +fi + + +if [ "$NM_TEST_REGENERATE" == 1 ] ; then + ci-fairy generate-template + exit 0 +fi + +diff "./.gitlab-ci.yml" <(ci-fairy generate-template -o /dev/stdout) diff --git a/tools/check-settings-docs.sh b/tools/check-settings-docs.sh deleted file mode 100755 index 8695ccc030..0000000000 --- a/tools/check-settings-docs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -srcdir=$1 -builddir=$2 -doc_h=$3 - -if [ -z "$NMTST_NO_CHECK_SETTINGS_DOCS" ] ; then - if ! cmp -s "${srcdir}/${doc_h}.in" "${builddir}/${doc_h}"; then - if [ "$NM_TEST_REGENERATE" = 1 ] ; then - cp -f "${builddir}/${doc_h}" "${srcdir}/${doc_h}.in" - else - echo "*** Error: the generated file '${builddir}/${doc_h}' differs from the source file '${srcdir}/${doc_h}.in'. You probably should copy the generated file over to the source file. You can skip this test by setting NMTST_NO_CHECK_SETTINGS_DOCS=yes. You can also automatically copy the file by rerunning the test with NM_TEST_REGENERATE=1" - exit 1 - fi - fi -fi - -exit 0 - diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py index 359c5e5ded..6d85a02dae 100755 --- a/tools/test-networkmanager-service.py +++ b/tools/test-networkmanager-service.py @@ -299,6 +299,8 @@ class Util: return GLib.Variant("u", int(val)) if isinstance(val, dbus.UInt64): return GLib.Variant("t", int(val)) + if isinstance(val, dbus.Int32): + return GLib.Variant("i", int(val)) if isinstance(val, dbus.Boolean): return GLib.Variant("b", bool(val)) if isinstance(val, dbus.Byte): @@ -389,6 +391,7 @@ IFACE_SETTINGS = "org.freedesktop.NetworkManager.Settings" IFACE_AGENT_MANAGER = "org.freedesktop.NetworkManager.AgentManager" IFACE_AGENT = "org.freedesktop.NetworkManager.SecretAgent" IFACE_WIRED = "org.freedesktop.NetworkManager.Device.Wired" +IFACE_MODEM = "org.freedesktop.NetworkManager.Device.Modem" IFACE_VLAN = "org.freedesktop.NetworkManager.Device.Vlan" IFACE_WIFI_AP = "org.freedesktop.NetworkManager.AccessPoint" IFACE_ACTIVE_CONNECTION = "org.freedesktop.NetworkManager.Connection.Active" @@ -404,46 +407,74 @@ IFACE_DHCP6_CONFIG = "org.freedesktop.NetworkManager.DHCP6Config" class BusErr: class UnknownInterfaceException(dbus.DBusException): - _dbus_error_name = IFACE_DBUS + ".UnknownInterface" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.UnknownInterface".format(IFACE_DBUS) + dbus.DBusException.__init__(self, *args, **kwargs) class UnknownPropertyException(dbus.DBusException): - _dbus_error_name = IFACE_DBUS + ".UnknownProperty" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.UnknownProperty".format(IFACE_DBUS) + dbus.DBusException.__init__(self, *args, **kwargs) class InvalidPropertyException(dbus.DBusException): - _dbus_error_name = IFACE_CONNECTION + ".InvalidProperty" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.InvalidProperty".format(IFACE_CONNECTION) + dbus.DBusException.__init__(self, *args, **kwargs) class MissingPropertyException(dbus.DBusException): - _dbus_error_name = IFACE_CONNECTION + ".MissingProperty" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.MissingProperty".format(IFACE_CONNECTION) + dbus.DBusException.__init__(self, *args, **kwargs) class InvalidSettingException(dbus.DBusException): - _dbus_error_name = IFACE_CONNECTION + ".InvalidSetting" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.InvalidSetting".format(IFACE_CONNECTION) + dbus.DBusException.__init__(self, *args, **kwargs) class MissingSettingException(dbus.DBusException): - _dbus_error_name = IFACE_CONNECTION + ".MissingSetting" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.MissingSetting".format(IFACE_CONNECTION) + dbus.DBusException.__init__(self, *args, **kwargs) class NotSoftwareException(dbus.DBusException): - _dbus_error_name = IFACE_DEVICE + ".NotSoftware" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.NotSoftware".format(IFACE_DEVICE) + dbus.DBusException.__init__(self, *args, **kwargs) class ApNotFoundException(dbus.DBusException): - _dbus_error_name = IFACE_WIFI + ".AccessPointNotFound" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.AccessPointNotFound".format(IFACE_WIFI) + dbus.DBusException.__init__(self, *args, **kwargs) class PermissionDeniedException(dbus.DBusException): - _dbus_error_name = IFACE_NM + ".PermissionDenied" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.PermissionDenied".format(IFACE_NM) + dbus.DBusException.__init__(self, *args, **kwargs) class UnknownDeviceException(dbus.DBusException): - _dbus_error_name = IFACE_NM + ".UnknownDevice" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.UnknownDevice".format(IFACE_NM) + dbus.DBusException.__init__(self, *args, **kwargs) class UnknownConnectionException(dbus.DBusException): - _dbus_error_name = IFACE_NM + ".UnknownConnection" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.UnknownConnection".format(IFACE_NM) + dbus.DBusException.__init__(self, *args, **kwargs) class InvalidHostnameException(dbus.DBusException): - _dbus_error_name = IFACE_SETTINGS + ".InvalidHostname" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.InvalidHostname".format(IFACE_SETTINGS) + dbus.DBusException.__init__(self, *args, **kwargs) class NoSecretsException(dbus.DBusException): - _dbus_error_name = IFACE_AGENT_MANAGER + ".NoSecrets" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.NoSecrets".format(IFACE_AGENT_MANAGER) + dbus.DBusException.__init__(self, *args, **kwargs) class UserCanceledException(dbus.DBusException): - _dbus_error_name = IFACE_AGENT_MANAGER + ".UserCanceled" + def __init__(self, *args, **kwargs): + self._dbus_error_name = "{}.UserCanceled".format(IFACE_AGENT_MANAGER) + dbus.DBusException.__init__(self, *args, **kwargs) @staticmethod def from_nmerror(e): @@ -778,6 +809,7 @@ class ExportedObj(dbus.service.Object): PRP_DEVICE_UDI = "Udi" PRP_DEVICE_IFACE = "Interface" +PRP_DEVICE_IPIFACE = "IpInterface" PRP_DEVICE_DRIVER = "Driver" PRP_DEVICE_STATE = "State" PRP_DEVICE_STATE_REASON = "StateReason" @@ -813,9 +845,15 @@ class Device(ExportedObj): self.prp_state = NM.DeviceState.UNAVAILABLE + if devtype == NM.DeviceType.MODEM: + udi = "/org/freedesktop/ModemManager1/Modem/0" + else: + udi = "/sys/devices/virtual/%s" % iface + props = { - PRP_DEVICE_UDI: "/sys/devices/virtual/%s" % (iface), + PRP_DEVICE_UDI: udi, PRP_DEVICE_IFACE: iface, + PRP_DEVICE_IPIFACE: iface, PRP_DEVICE_DRIVER: "virtual", PRP_DEVICE_STATE: dbus.UInt32(self.prp_state), PRP_DEVICE_STATE_REASON: dbus.Struct( @@ -1018,10 +1056,32 @@ class Device(ExportedObj): raise BusErr.NotSoftwareException() pass + @dbus.service.signal(IFACE_DEVICE, signature="uuu") + def StateChanged(self, new_state, old_state, reason): + pass + @dbus.service.signal(IFACE_DEVICE, signature="a{sv}") def PropertiesChanged(self, changed): pass + def set_state(self, state, reason): + # libnm is plugged on notify::state-reason and not on state-changed dbus signal + # so we must simulate the change of property to emit a state-changed signal on libnm + self._dbus_property_set(IFACE_DEVICE, PRP_NM_STATE, dbus.UInt32(state)) + self._dbus_property_set( + IFACE_DEVICE, + PRP_DEVICE_STATE_REASON, + (dbus.UInt32(state), dbus.UInt32(reason)), + ) + old_state = self.prp_state + self.prp_state = state + self.StateChanged( + dbus.UInt32(self.prp_state), dbus.UInt32(old_state), dbus.UInt32(reason) + ) + + def set_carrier_status(self, carrier_status): + self._dbus_property_set(IFACE_WIRED, PRP_WIRED_CARRIER, carrier_status) + def set_active_connection(self, ac): self._dbus_property_set(IFACE_DEVICE, PRP_DEVICE_ACTIVE_CONNECTION, ac) @@ -1048,6 +1108,14 @@ class Device(ExportedObj): ExportedObj.to_path_array(self.available_connections_get()), ) + @dbus.service.method(IFACE_TEST, in_signature="", out_signature="") + def Start(self): + self.start() + + @dbus.service.method(IFACE_TEST, in_signature="", out_signature="") + def Stop(self): + self.stop() + ############################################################################### @@ -1071,7 +1139,7 @@ class WiredDevice(Device): PRP_WIRED_HW_ADDRESS: mac, PRP_WIRED_PERM_HW_ADDRESS: mac, PRP_WIRED_SPEED: dbus.UInt32(100), - PRP_WIRED_CARRIER: False, + PRP_WIRED_CARRIER: True, PRP_WIRED_S390_SUBCHANNELS: subchannels, } @@ -1083,6 +1151,30 @@ class WiredDevice(Device): ############################################################################### +PM_CURRENT_CAPABILITIES = "CurrentCapabilities" +PM_MODEM_CAPABILITIES = "ModemCapabilities" + +# capability to make device seen compatible with GSM connection +NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004 + + +class ModemDevice(Device): + def __init__(self, iface): + Device.__init__(self, iface, NM.DeviceType.MODEM) + + props = { + PM_CURRENT_CAPABILITIES: dbus.UInt32(NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS), + PM_MODEM_CAPABILITIES: dbus.UInt32(0), + } + + self.dbus_interface_add(IFACE_MODEM, props, ModemDevice.PropertiesChanged) + + @dbus.service.signal(IFACE_MODEM, signature="a{sv}") + def PropertiesChanged(self, changed): + pass + + +############################################################################### PRP_VLAN_HW_ADDRESS = "HwAddress" PRP_VLAN_CARRIER = "Carrier" @@ -1331,6 +1423,7 @@ class ActiveConnection(ExportedObj): self.is_vpn = con_inst.is_vpn() self._activation_id = None + self._deactivation_id = None s_con = con_inst.con_hash[NM.SETTING_CONNECTION_SETTING_NAME] @@ -1382,24 +1475,69 @@ class ActiveConnection(ExportedObj): def _activation_step2(self): assert self._activation_id is not None self._activation_id = None - self._set_state( - NM.ActiveConnectionState.ACTIVATED, NM.ActiveConnectionStateReason.UNKNOWN - ) + + s_con = self.con_inst.con_hash[NM.SETTING_CONNECTION_SETTING_NAME] + conn_id = s_con[NM.SETTING_CONNECTION_ID] + + if gl.force_activation_failure.get(conn_id, False): + self._set_state( + NM.ActiveConnectionState.DEACTIVATED, + NM.ActiveConnectionStateReason.UNKNOWN, + ) + self.device.set_state(NM.DeviceState.FAILED, NM.DeviceStateReason.UNKNOWN) + else: + self._set_state( + NM.ActiveConnectionState.ACTIVATED, + NM.ActiveConnectionStateReason.UNKNOWN, + ) + self.device.set_state(NM.DeviceState.ACTIVATED, NM.DeviceStateReason.NONE) return False def _activation_step1(self): assert self._activation_id is not None self._activation_id = GLib.timeout_add(50, self._activation_step2) self.device.set_active_connection(self) + self.device.set_state(NM.DeviceState.PREPARE, NM.DeviceStateReason.NONE) self._set_state( NM.ActiveConnectionState.ACTIVATING, NM.ActiveConnectionStateReason.UNKNOWN ) return False + def _deactivation_step1(self): + assert self._deactivation_id is not None + self._deactivation_id = None + self.device.set_state( + NM.DeviceState.DISCONNECTED, NM.DeviceStateReason.USER_REQUESTED + ) + self._set_state( + NM.ActiveConnectionState.DEACTIVATED, + NM.ActiveConnectionStateReason.USER_DISCONNECTED, + ) + + return False + + def set_state(self, state, reason): + self._set_state(state, reason) + def start_activation(self): assert self._activation_id is None self._activation_id = GLib.timeout_add(50, self._activation_step1) + def start_deactivation(self): + assert self._deactivation_id is None + self._set_state( + NM.ActiveConnectionState.DEACTIVATING, + NM.ActiveConnectionStateReason.USER_DISCONNECTED, + ) + self.device.set_state( + NM.DeviceState.DEACTIVATING, NM.DeviceStateReason.USER_REQUESTED + ) + self._set_state( + NM.ActiveConnectionState.DEACTIVATING, + NM.ActiveConnectionStateReason.USER_DISCONNECTED, + ) + self._deactivation_id = GLib.timeout_add(50, self._deactivation_step1) + @dbus.service.signal(IFACE_VPN_CONNECTION, signature="a{sv}") def PropertiesChanged(self, changed): pass @@ -1587,7 +1725,16 @@ class NetworkManager(ExportedObj): @dbus.service.method(dbus_interface=IFACE_NM, in_signature="o", out_signature="") def DeactivateConnection(self, active_connection): - pass + # Look for an active connection with the same object path + for ac in self.active_connections: + if ac.path == str(active_connection): + ac.activation_cancel() + ac.start_deactivation() + return + + raise BusErr.UnknownConnectionException( + "Connection not found: %s" % str(active_connection) + ) @dbus.service.method(dbus_interface=IFACE_NM, in_signature="b", out_signature="") def Sleep(self, do_sleep): @@ -1778,6 +1925,11 @@ class NetworkManager(ExportedObj): return ExportedObj.to_path(self.add_device(dev)) @dbus.service.method(IFACE_TEST, in_signature="s", out_signature="o") + def AddModemDevice(self, ifname): + dev = ModemDevice(ifname) + return ExportedObj.to_path(self.add_device(dev)) + + @dbus.service.method(IFACE_TEST, in_signature="s", out_signature="o") def AddWifiDevice(self, ifname): dev = WifiDevice(ifname) return ExportedObj.to_path(self.add_device(dev)) @@ -1808,6 +1960,54 @@ class NetworkManager(ExportedObj): def AddConnection(self, con_hash, do_verify_strict): return gl.settings.add_connection(con_hash, do_verify_strict) + @dbus.service.method(dbus_interface=IFACE_TEST, in_signature="sb", out_signature="") + def SetActiveConnectionFailure(self, connection_id, failure): + gl.force_activation_failure[connection_id] = failure + + @dbus.service.method( + dbus_interface=IFACE_TEST, in_signature="ouu", out_signature="" + ) + def SetActiveConnectionState(self, devpath, state, reason): + for ac in reversed(self.active_connections): + if ac.device.path == devpath: + ac.set_state(state, reason) + return + raise BusErr.UnknownDeviceException( + "Device with iface '%s' not found" % devpath + ) + + @dbus.service.method( + dbus_interface=IFACE_TEST, in_signature="ouu", out_signature="" + ) + def SetDeviceState(self, devpath, state, reason): + try: + nmstate = NM.DeviceState(state) + except ValueError as e: + raise BusErr.InvalidPropertyException("Invalid device state: " % e) + + try: + nmreason = NM.DeviceStateReason(reason) + except ValueError as e: + raise BusErr.InvalidPropertyException("Invalid device state reason: " % e) + + for d in self.devices: + if d.path == devpath: + d.set_state(nmstate, nmreason) + return + raise BusErr.UnknownDeviceException( + "Device with iface '%s' not found" % devpath + ) + + @dbus.service.method(dbus_interface=IFACE_TEST, in_signature="ob", out_signature="") + def SetCarrierStatus(self, devpath, status): + for d in self.devices: + if d.path == devpath: + d.set_carrier_status(status) + return + raise BusErr.UnknownDeviceException( + "Device with iface '%s' not found" % devpath + ) + @dbus.service.method( dbus_interface=IFACE_TEST, in_signature="sa{sa{sv}}b", out_signature="" ) @@ -2007,6 +2207,12 @@ class Settings(ExportedObj): def AddConnection(self, con_hash): return self.add_connection(con_hash) + @dbus.service.method( + dbus_interface=IFACE_SETTINGS, in_signature="", out_signature="b" + ) + def ReloadConnections(self): + return True + def add_connection(self, con_hash, do_verify_strict=True): self.c_counter += 1 con_inst = Connection(self.c_counter, con_hash, do_verify_strict) @@ -2280,6 +2486,10 @@ class IP4Config(ExportedObj): for k, v in props.items(): self._dbus_property_set(IFACE_IP4_CONFIG, k, v) + @dbus.service.method(IFACE_TEST, in_signature="s", out_signature="") + def SetGateway(self, gateway): + self._dbus_property_set(IFACE_IP4_CONFIG, PRP_IP4_CONFIG_GATEWAY, gateway) + @dbus.service.signal(IFACE_IP4_CONFIG, signature="a{sv}") def PropertiesChanged(self, path): pass @@ -2721,6 +2931,7 @@ def main(): gl.mainloop = GLib.MainLoop() gl.bus = dbus.SessionBus() + gl.force_activation_failure = {} gl.object_manager = ObjectManager("/org/freedesktop") gl.manager = NetworkManager() |