From 8c623dddbdebe354cb94bfc559a5371a14865317 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 23 Mar 2022 11:51:40 +0100 Subject: New upstream version 1.36.4 --- NEWS | 12 ++++++++ configure | 26 ++++++++-------- configure.ac | 2 +- docs/api/html/index.html | 2 +- docs/api/html/nmcli.html | 8 +++++ docs/api/version.xml | 2 +- docs/libnm/html/index.html | 2 +- docs/libnm/html/usage.html | 2 +- docs/libnm/version.xml | 2 +- man/NetworkManager-dispatcher.8 | 4 +-- man/NetworkManager.8 | 6 ++-- man/NetworkManager.conf.5 | 6 ++-- man/nm-cloud-setup.8 | 6 ++-- man/nm-initrd-generator.8 | 6 ++-- man/nm-online.1 | 6 ++-- man/nm-openvswitch.7 | 6 ++-- man/nm-settings-dbus.5 | 6 ++-- man/nm-settings-dbus.xml | 2 +- man/nm-settings-ifcfg-rh.5 | 6 ++-- man/nm-settings-ifcfg-rh.xml | 2 +- man/nm-settings-keyfile.5 | 6 ++-- man/nm-settings-keyfile.xml | 2 +- man/nm-settings-nmcli.5 | 6 ++-- man/nm-settings-nmcli.xml | 2 +- man/nmcli-examples.7 | 6 ++-- man/nmcli.1 | 16 ++++++++-- man/nmcli.xml | 14 +++++++++ man/nmtui.1 | 6 ++-- meson.build | 2 +- src/core/devices/nm-device-ethernet.c | 37 +++++++++++++++++++---- src/core/devices/nm-device-ppp.c | 7 ++--- src/core/devices/team/nm-device-team.c | 2 +- src/core/dhcp/nm-dhcp-client.c | 1 + src/core/dhcp/nm-dhcp-dhcpcd.c | 2 +- src/core/nm-connectivity.c | 47 ++++++++++++++++++----------- src/core/supplicant/nm-supplicant-manager.c | 4 ++- src/libnm-client-impl/nm-client.c | 15 +++++---- src/libnm-core-public/nm-version-macros.h | 2 +- src/libnm-glib-aux/nm-shared-utils.c | 20 ++++++++++++ src/libnm-glib-aux/nm-shared-utils.h | 4 ++- src/n-dhcp4/src/n-dhcp4-c-connection.c | 19 ++++++++++++ src/n-dhcp4/src/n-dhcp4-private.h | 1 + src/nm-cloud-setup/nm-http-client.c | 1 + src/nmcli/connections.c | 20 ++++++------ 44 files changed, 241 insertions(+), 115 deletions(-) diff --git a/NEWS b/NEWS index 84c6c044..4ed50b5a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +=============================================== +NetworkManager-1.36.4 +Overview of changes since NetworkManager-1.36.2 +=============================================== + +* The internal DHCPv4 client now discards NAKs packets coming + from servers different from the one that sent the offer. +* Fix activation of PPPoE connections with "pppoe.parent" unset. +* Fix potential libnm crash when the client object initialization gets + canceled. +* Other various fixes and improvements. + ============================================= NetworkManager-1.36.2 Overview of changes since NetworkManager-1.36 diff --git a/configure b/configure index b41d9e55..08f511a1 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for NetworkManager 1.36.2. +# Generated by GNU Autoconf 2.69 for NetworkManager 1.36.4. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='1.36.2' -PACKAGE_STRING='NetworkManager 1.36.2' +PACKAGE_VERSION='1.36.4' +PACKAGE_STRING='NetworkManager 1.36.4' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -1747,7 +1747,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures NetworkManager 1.36.2 to adapt to many kinds of systems. +\`configure' configures NetworkManager 1.36.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1819,7 +1819,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 1.36.2:";; + short | recursive ) echo "Configuration of NetworkManager 1.36.4:";; esac cat <<\_ACEOF @@ -2170,7 +2170,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 1.36.2 +NetworkManager configure 1.36.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2943,7 +2943,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by NetworkManager $as_me 1.36.2, which was +It was created by NetworkManager $as_me 1.36.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3813,7 +3813,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='1.36.2' + VERSION='1.36.4' cat >>confdefs.h <<_ACEOF @@ -17997,8 +17997,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu NM_MAJOR_VERSION=1 NM_MINOR_VERSION=36 -NM_MICRO_VERSION=2 -NM_VERSION=1.36.2 +NM_MICRO_VERSION=4 +NM_VERSION=1.36.4 @@ -18006,7 +18006,7 @@ NM_VERSION=1.36.2 -NM_GIT_SHA=ae06ec5207cec126ca767020238c32598b8bfc5d +NM_GIT_SHA=4e8e5bdfc2ab6b51b9f8626512089a1f0c94cce6 if test """" != "no-config-h" ; then @@ -30512,7 +30512,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by NetworkManager $as_me 1.36.2, which was +This file was extended by NetworkManager $as_me 1.36.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30578,7 +30578,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -NetworkManager config.status 1.36.2 +NetworkManager config.status 1.36.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f6429cb2..60d3bc5c 100644 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ dnl "shared/nm-version-macros.h.in" dnl - update number in meson.build m4_define([nm_major_version], [1]) m4_define([nm_minor_version], [36]) -m4_define([nm_micro_version], [2]) +m4_define([nm_micro_version], [4]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) diff --git a/docs/api/html/index.html b/docs/api/html/index.html index 32de3f6d..e215b5e9 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -16,7 +16,7 @@

- for NetworkManager 1.36.2 + for NetworkManager 1.36.4 The latest version of this documentation can be found on-line at https://networkmanager.dev/docs/api/latest/. diff --git a/docs/api/html/nmcli.html b/docs/api/html/nmcli.html index d33f9424..2c63c69b 100644 --- a/docs/api/html/nmcli.html +++ b/docs/api/html/nmcli.html @@ -1349,6 +1349,10 @@

Connection that is being disconnected.

+

connection-external

+

Connection representing configuration created externally to NetworkManager.

+ +

connection-invisible

Connection whose details is the user not permitted to see.

@@ -1385,6 +1389,10 @@

Device that is not connected.

+

device-external

+

Device configured externally to NetworkManager.

+ +

device-firmware-missing

Warning of a missing device firmware.

diff --git a/docs/api/version.xml b/docs/api/version.xml index c6a567b8..08a6a38d 100644 --- a/docs/api/version.xml +++ b/docs/api/version.xml @@ -1 +1 @@ -1.36.2 +1.36.4 diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html index 2f3aa6c0..fef68d26 100644 --- a/docs/libnm/html/index.html +++ b/docs/libnm/html/index.html @@ -15,7 +15,7 @@

- for libnm 1.36.2 + for libnm 1.36.4 The latest version of this documentation can be found on-line at https://networkmanager.dev/docs/libnm/latest/. diff --git a/docs/libnm/html/usage.html b/docs/libnm/html/usage.html index 0bddc793..6d2c0654 100644 --- a/docs/libnm/html/usage.html +++ b/docs/libnm/html/usage.html @@ -96,7 +96,7 @@

$ cc $(pkg-config --libs --cflags libnm) -o hello-nm hello-nm.c
   $ ./hello-nm
-  NetworkManager version: 1.36.2
+  NetworkManager version: 1.36.4
 
   $ 

diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml index c6a567b8..08a6a38d 100644 --- a/docs/libnm/version.xml +++ b/docs/libnm/version.xml @@ -1 +1 @@ -1.36.2 +1.36.4 diff --git a/man/NetworkManager-dispatcher.8 b/man/NetworkManager-dispatcher.8 index e96d6f7a..e5d23832 100644 --- a/man/NetworkManager-dispatcher.8 +++ b/man/NetworkManager-dispatcher.8 @@ -2,9 +2,9 @@ .\" Title: NetworkManager-dispatcher .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager-dispatcher 1.36.2 +.\" Source: NetworkManager-dispatcher 1.36.4 .\" Language: English .\" .TH "NETWORKMANAGER\-DISPATCHER" "8" "" "NetworkManager\-dispatcher 1\&" "Network management daemons" diff --git a/man/NetworkManager.8 b/man/NetworkManager.8 index e905b383..78e6c26d 100644 --- a/man/NetworkManager.8 +++ b/man/NetworkManager.8 @@ -2,12 +2,12 @@ .\" Title: NetworkManager .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.36\&.2" "Network management daemons" +.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.36\&.4" "Network management daemons" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 index 30eb544f..3bb3593e 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 @@ -2,12 +2,12 @@ .\" Title: NetworkManager.conf .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.36\&.2" "Configuration" +.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-cloud-setup.8 b/man/nm-cloud-setup.8 index 4f563207..5e223431 100644 --- a/man/nm-cloud-setup.8 +++ b/man/nm-cloud-setup.8 @@ -2,12 +2,12 @@ .\" Title: nm-cloud-setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Automatic Network Configuration in Cloud with NetworkManager -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.36\&.2" "Automatic Network Configuratio" +.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.36\&.4" "Automatic Network Configuratio" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-initrd-generator.8 b/man/nm-initrd-generator.8 index 7d2e0b93..0e74d95a 100644 --- a/man/nm-initrd-generator.8 +++ b/man/nm-initrd-generator.8 @@ -2,12 +2,12 @@ .\" Title: nm-initrd-generator .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: System Administration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.36\&.2" "System Administration" +.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.36\&.4" "System Administration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-online.1 b/man/nm-online.1 index 46f5ef6b..63eb50e9 100644 --- a/man/nm-online.1 +++ b/man/nm-online.1 @@ -2,12 +2,12 @@ .\" Title: nm-online .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.36\&.2" "General Commands Manual" +.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-openvswitch.7 b/man/nm-openvswitch.7 index 35a9c5d0..7d4e4ddc 100644 --- a/man/nm-openvswitch.7 +++ b/man/nm-openvswitch.7 @@ -2,12 +2,12 @@ .\" Title: nm-openvswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Open vSwitch support overview -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.36\&.2" "Open vSwitch support overview" +.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.36\&.4" "Open vSwitch support overview" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.5 b/man/nm-settings-dbus.5 index 789c7ad6..48f7b30a 100644 --- a/man/nm-settings-dbus.5 +++ b/man/nm-settings-dbus.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-dbus .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.36\&.2" "Configuration" +.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.xml b/man/nm-settings-dbus.xml index 8226ca58..6602acc1 100644 --- a/man/nm-settings-dbus.xml +++ b/man/nm-settings-dbus.xml @@ -1,6 +1,6 @@ -nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.36.2nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription +nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.36.4nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5 index 26ebfd6d..5b5f1592 100644 --- a/man/nm-settings-ifcfg-rh.5 +++ b/man/nm-settings-ifcfg-rh.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-ifcfg-rh .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.36\&.2" "Configuration" +.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml index 397c53da..07372617 100644 --- a/man/nm-settings-ifcfg-rh.xml +++ b/man/nm-settings-ifcfg-rh.xml @@ -1,6 +1,6 @@ -nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.36.2nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription +nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.36.4nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-keyfile.5 b/man/nm-settings-keyfile.5 index 6ffd9ea3..cd40469b 100644 --- a/man/nm-settings-keyfile.5 +++ b/man/nm-settings-keyfile.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-keyfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.36\&.2" "Configuration" +.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml index 3b831651..90a99b3f 100644 --- a/man/nm-settings-keyfile.xml +++ b/man/nm-settings-keyfile.xml @@ -1,6 +1,6 @@ -nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.36.2nm-settings-keyfileDescription of keyfile settings pluginDescription +nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.36.4nm-settings-keyfileDescription of keyfile settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-nmcli.5 b/man/nm-settings-nmcli.5 index b04b0817..d512ae8f 100644 --- a/man/nm-settings-nmcli.5 +++ b/man/nm-settings-nmcli.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.36\&.2" "Configuration" +.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-nmcli.xml b/man/nm-settings-nmcli.xml index 3d1e76d5..b14d4eee 100644 --- a/man/nm-settings-nmcli.xml +++ b/man/nm-settings-nmcli.xml @@ -1,6 +1,6 @@ -nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.36.2nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription +nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.36.4nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will diff --git a/man/nmcli-examples.7 b/man/nmcli-examples.7 index 23bccee0..f3786a94 100644 --- a/man/nmcli-examples.7 +++ b/man/nmcli-examples.7 @@ -2,12 +2,12 @@ .\" Title: nmcli-examples .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: Examples -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.36\&.2" "Examples" +.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.36\&.4" "Examples" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmcli.1 b/man/nmcli.1 index d96d9e7b..217f8e41 100644 --- a/man/nmcli.1 +++ b/man/nmcli.1 @@ -2,12 +2,12 @@ .\" Title: nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NMCLI" "1" "" "NetworkManager 1\&.36\&.2" "General Commands Manual" +.TH "NMCLI" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -1551,6 +1551,11 @@ Connection that is being activated\&. Connection that is being disconnected\&. .RE .PP +\fBconnection\-external\fR +.RS 4 +Connection representing configuration created externally to NetworkManager\&. +.RE +.PP \fBconnection\-invisible\fR .RS 4 Connection whose details is the user not permitted to see\&. @@ -1596,6 +1601,11 @@ Device that is being configured\&. Device that is not connected\&. .RE .PP +\fBdevice\-external\fR +.RS 4 +Device configured externally to NetworkManager\&. +.RE +.PP \fBdevice\-firmware\-missing\fR .RS 4 Warning of a missing device firmware\&. diff --git a/man/nmcli.xml b/man/nmcli.xml index c2b867dd..fad874f6 100644 --- a/man/nmcli.xml +++ b/man/nmcli.xml @@ -1866,6 +1866,13 @@ + + + + Connection representing configuration created externally to NetworkManager. + + + @@ -1929,6 +1936,13 @@ + + + + Device configured externally to NetworkManager. + + + diff --git a/man/nmtui.1 b/man/nmtui.1 index fd227960..9c963f45 100644 --- a/man/nmtui.1 +++ b/man/nmtui.1 @@ -2,12 +2,12 @@ .\" Title: nmtui .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/07/2022 +.\" Date: 03/22/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.2 +.\" Source: NetworkManager 1.36.4 .\" Language: English .\" -.TH "NMTUI" "1" "" "NetworkManager 1\&.36\&.2" "General Commands Manual" +.TH "NMTUI" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/meson.build b/meson.build index d0cec83d..f14aa62c 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( # - add corresponding NM_VERSION_x_y_z macros in # "src/libnm-core-public/nm-version-macros.h.in" # - update number in configure.ac - version: '1.36.2', + version: '1.36.4', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c index 6e18d119..407f8ab8 100644 --- a/src/core/devices/nm-device-ethernet.c +++ b/src/core/devices/nm-device-ethernet.c @@ -1160,14 +1160,12 @@ _ppp_mgr_callback(NMPppMgr *ppp_mgr, const NMPppMgrCallbackData *callback_data, if (device_state < NM_DEVICE_STATE_IP_CONFIG) { if (callback_data->data.state >= NM_PPP_MGR_STATE_HAVE_IFINDEX) { - gs_free char *old_name = NULL; - gs_free_error GError *error = NULL; + gs_free char *old_name = NULL; - if (!nm_device_take_over_link(device, callback_data->data.ifindex, &old_name, &error)) { + if (!nm_device_set_ip_ifindex(device, callback_data->data.ifindex)) { _LOGW(LOGD_DEVICE | LOGD_PPP, - "could not take control of link %d: %s", - callback_data->data.ifindex, - error->message); + "could not set ip-ifindex %d", + callback_data->data.ifindex); _ppp_mgr_cleanup(self); nm_device_state_changed(device, NM_DEVICE_STATE_FAILED, @@ -1892,6 +1890,32 @@ is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags) return !!nm_device_get_initial_hw_address(device); } +static const char * +get_ip_method_auto(NMDevice *device, int addr_family) +{ + NMSettingConnection *s_con; + + s_con = nm_device_get_applied_setting(device, NM_TYPE_SETTING_CONNECTION); + g_return_val_if_fail(s_con, + NM_IS_IPv4(addr_family) ? NM_SETTING_IP4_CONFIG_METHOD_AUTO + : NM_SETTING_IP6_CONFIG_METHOD_AUTO); + + if (!nm_streq(nm_setting_connection_get_connection_type(s_con), + NM_SETTING_PPPOE_SETTING_NAME)) { + return NM_DEVICE_CLASS(nm_device_ethernet_parent_class) + ->get_ip_method_auto(device, addr_family); + } + + if (NM_IS_IPv4(addr_family)) { + /* We cannot do DHCPv4 on a PPP link, instead we get "auto" IP addresses + * by pppd. Return "manual" here, which has the suitable effect to a + * (zero) manual addresses in addition. */ + return NM_SETTING_IP6_CONFIG_METHOD_MANUAL; + } + + return NM_SETTING_IP6_CONFIG_METHOD_AUTO; +} + static gboolean can_reapply_change(NMDevice *device, const char *setting_name, @@ -2047,6 +2071,7 @@ nm_device_ethernet_class_init(NMDeviceEthernetClass *klass) device_class->act_stage2_config = act_stage2_config; device_class->act_stage3_ip_config = act_stage3_ip_config; device_class->get_configured_mtu = get_configured_mtu; + device_class->get_ip_method_auto = get_ip_method_auto; device_class->deactivate = deactivate; device_class->get_s390_subchannels = get_s390_subchannels; device_class->update_connection = update_connection; diff --git a/src/core/devices/nm-device-ppp.c b/src/core/devices/nm-device-ppp.c index 5ff32401..61e32348 100644 --- a/src/core/devices/nm-device-ppp.c +++ b/src/core/devices/nm-device-ppp.c @@ -222,10 +222,9 @@ get_ip_method_auto(NMDevice *device, int addr_family) return NM_SETTING_IP6_CONFIG_METHOD_MANUAL; } - /* We can do autoconf6 on an PPP link, but we should already get an IPv6 - * address from pppd. Use that instead. We however do want to generate our - * (own) IPv6 link local address, so return "link-local". */ - return NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL; + /* We get a interface identifier via IPV6CP, used to construct a link-local + * address. Method auto means autoconf6 as usual.*/ + return NM_SETTING_IP6_CONFIG_METHOD_AUTO; } static gboolean diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c index 16cd2e87..b67c7100 100644 --- a/src/core/devices/team/nm-device-team.c +++ b/src/core/devices/team/nm-device-team.c @@ -957,7 +957,7 @@ constructed(GObject *object) NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE(device); gs_free char *tmp_str = NULL; gs_unref_object GFile *file = NULL; - GError *error; + gs_free_error GError *error = NULL; G_OBJECT_CLASS(nm_device_team_parent_class)->constructed(object); diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c index ec910389..85e48ff7 100644 --- a/src/core/dhcp/nm-dhcp-client.c +++ b/src/core/dhcp/nm-dhcp-client.c @@ -1209,6 +1209,7 @@ dispose(GObject *object) nm_clear_g_source_inst(&priv->no_lease_timeout_source); nm_clear_g_source_inst(&priv->ipv6_lladdr_timeout_source); + nm_clear_pointer(&priv->effective_client_id, g_bytes_unref); G_OBJECT_CLASS(nm_dhcp_client_parent_class)->dispose(object); } diff --git a/src/core/dhcp/nm-dhcp-dhcpcd.c b/src/core/dhcp/nm-dhcp-dhcpcd.c index 45f96ec9..4b3429ef 100644 --- a/src/core/dhcp/nm-dhcp-dhcpcd.c +++ b/src/core/dhcp/nm-dhcp-dhcpcd.c @@ -70,7 +70,7 @@ ip4_start(NMDhcpClient *client, GError **error) const NMDhcpClientConfig *client_config; gs_unref_ptrarray GPtrArray *argv = NULL; pid_t pid; - GError *local; + GError *local = NULL; gs_free char *cmd_str = NULL; const char *dhcpcd_path; diff --git a/src/core/nm-connectivity.c b/src/core/nm-connectivity.c index 7199c9a2..c84d8a56 100644 --- a/src/core/nm-connectivity.c +++ b/src/core/nm-connectivity.c @@ -15,6 +15,7 @@ #include #include "c-list/src/c-list.h" +#include "libnm-glib-aux/nm-str-buf.h" #include "libnm-platform/nmp-object.h" #include "libnm-core-intern/nm-core-internal.h" #include "nm-config.h" @@ -89,7 +90,7 @@ struct _NMConnectivityCheckHandle { int addr_family; - guint timeout_id; + GSource *timeout_source; NMConnectivityState completed_state; const char *completed_reason; @@ -245,7 +246,7 @@ cb_data_complete(NMConnectivityCheckHandle *cb_data, nm_clear_g_cancellable(&cb_data->concheck.resolve_cancellable); #endif - nm_clear_g_source(&cb_data->timeout_id); + nm_clear_g_source_inst(&cb_data->timeout_source); _LOG2D("check completed: %s; %s", nm_connectivity_state_to_string(state), log_message); @@ -633,9 +634,9 @@ _idle_cb(gpointer user_data) &cb_data->handles_lst)); nm_assert(cb_data->completed_reason); - cb_data->timeout_id = 0; + nm_clear_g_source_inst(&cb_data->timeout_source); cb_data_complete(cb_data, cb_data->completed_state, cb_data->completed_reason); - return G_SOURCE_REMOVE; + return G_SOURCE_CONTINUE; } #if WITH_CONCHECK @@ -662,7 +663,7 @@ do_curl_request(NMConnectivityCheckHandle *cb_data) cb_data->concheck.curl_mhandle = mhandle; cb_data->concheck.curl_ehandle = ehandle; cb_data->concheck.request_headers = curl_slist_append(NULL, "Connection: close"); - cb_data->timeout_id = g_timeout_add_seconds(20, _timeout_cb, cb_data); + cb_data->timeout_source = nm_g_timeout_add_seconds_source(20, _timeout_cb, cb_data); curl_multi_setopt(mhandle, CURLMOPT_SOCKETFUNCTION, multi_socket_cb); curl_multi_setopt(mhandle, CURLMOPT_SOCKETDATA, cb_data); @@ -694,6 +695,7 @@ do_curl_request(NMConnectivityCheckHandle *cb_data) curl_easy_setopt(ehandle, CURLOPT_INTERFACE, cb_data->ifspec); curl_easy_setopt(ehandle, CURLOPT_RESOLVE, cb_data->concheck.hosts); curl_easy_setopt(ehandle, CURLOPT_IPRESOLVE, resolve); + curl_easy_setopt(ehandle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_multi_add_handle(mhandle, ehandle); } @@ -709,7 +711,8 @@ resolve_cb(GObject *object, GAsyncResult *res, gpointer user_data) int addr_family; gsize len = 0; gsize i; - gs_free_error GError *error = NULL; + gs_free_error GError *error = NULL; + nm_auto_str_buf NMStrBuf strbuf_hosts = NM_STR_BUF_INIT(0, FALSE); result = g_dbus_connection_call_finish(G_DBUS_CONNECTION(object), res, &error); if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) @@ -732,25 +735,35 @@ resolve_cb(GObject *object, GAsyncResult *res, gpointer user_data) for (i = 0; i < no_addresses; i++) { gs_unref_variant GVariant *address = NULL; char str_addr[NM_UTILS_INET_ADDRSTRLEN]; - gs_free char *host_entry = NULL; const guchar *address_buf; g_variant_get_child(addresses, i, "(ii@ay)", &ifindex, &addr_family, &address); + if (!NM_IN_SET(addr_family, AF_INET, AF_INET6)) + continue; + if (cb_data->addr_family != AF_UNSPEC && cb_data->addr_family != addr_family) continue; address_buf = g_variant_get_fixed_array(address, &len, 1); - if ((addr_family == AF_INET && len != sizeof(struct in_addr)) - || (addr_family == AF_INET6 && len != sizeof(struct in6_addr))) + if (len != nm_utils_addr_family_to_size(addr_family)) continue; - host_entry = g_strdup_printf("%s:%s:%s", + if (strbuf_hosts.len == 0) { + nm_str_buf_append_printf(&strbuf_hosts, + "%s:%s:", cb_data->concheck.con_config->host, - cb_data->concheck.con_config->port ?: "80", - nm_utils_inet_ntop(addr_family, address_buf, str_addr)); - cb_data->concheck.hosts = curl_slist_append(cb_data->concheck.hosts, host_entry); - _LOG2T("adding '%s' to curl resolve list", host_entry); + cb_data->concheck.con_config->port ?: "80"); + } else + nm_str_buf_append_c(&strbuf_hosts, ','); + + nm_str_buf_append(&strbuf_hosts, nm_utils_inet_ntop(addr_family, address_buf, str_addr)); + } + if (strbuf_hosts.len > 0) { + const char *s = nm_str_buf_get_str(&strbuf_hosts); + + cb_data->concheck.hosts = curl_slist_append(NULL, s); + _LOG2T("set curl resolve list to '%s'", s); } do_curl_request(cb_data); @@ -874,7 +887,7 @@ nm_connectivity_check_start(NMConnectivity *self, _LOG2D("skip connectivity check due to %s", reason); cb_data->completed_state = state; cb_data->completed_reason = reason; - cb_data->timeout_id = g_idle_add(_idle_cb, cb_data); + cb_data->timeout_source = nm_g_idle_add_source(_idle_cb, cb_data); return cb_data; } } @@ -910,7 +923,7 @@ nm_connectivity_check_start(NMConnectivity *self, _LOG2D("start fake request (fail due to no D-Bus connection)"); cb_data->completed_state = NM_CONNECTIVITY_ERROR; cb_data->completed_reason = "no D-Bus connection"; - cb_data->timeout_id = g_idle_add(_idle_cb, cb_data); + cb_data->timeout_source = nm_g_idle_add_source(_idle_cb, cb_data); return cb_data; } @@ -953,7 +966,7 @@ nm_connectivity_check_start(NMConnectivity *self, cb_data->completed_reason = "fake result"; } _LOG2D("start fake request (%s)", cb_data->completed_reason); - cb_data->timeout_id = g_idle_add(_idle_cb, cb_data); + cb_data->timeout_source = nm_g_idle_add_source(_idle_cb, cb_data); return cb_data; } diff --git a/src/core/supplicant/nm-supplicant-manager.c b/src/core/supplicant/nm-supplicant-manager.c index 1f8f0105..9de845f0 100644 --- a/src/core/supplicant/nm-supplicant-manager.c +++ b/src/core/supplicant/nm-supplicant-manager.c @@ -993,6 +993,7 @@ _dbus_get_capabilities_cb(GVariant *res, GError *error, gpointer user_data) " MESH%c" " FAST%c" " WFD%c" + " SUITEB192%c" "", NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_AP), NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_PMF), @@ -1002,7 +1003,8 @@ _dbus_get_capabilities_cb(GVariant *res, GError *error, gpointer user_data) NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_SHA384), NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_MESH), NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_FAST), - NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_WFD)); + NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_WFD), + NM_SUPPL_CAP_TO_CHAR(priv->capabilities, NM_SUPPL_CAP_TYPE_SUITEB192)); nm_assert(g_hash_table_size(priv->supp_ifaces) == 0); nm_assert(c_list_is_empty(&priv->supp_lst_head)); diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c index 2cf12db5..cd2aa730 100644 --- a/src/libnm-client-impl/nm-client.c +++ b/src/libnm-client-impl/nm-client.c @@ -764,7 +764,7 @@ _nm_client_set_property_sync_legacy(NMClient *self, NMClientPrivate *_priv = NM_CLIENT_GET_PRIVATE(self); \ \ nm_assert(g_source_get_context(_source) == _priv->x_context); \ - nm_assert(g_main_context_is_owner(_priv->x_context)); \ + nm_assert(nm_g_main_context_can_acquire(_priv->x_context)); \ } \ } \ } \ @@ -778,7 +778,7 @@ _nm_client_set_property_sync_legacy(NMClient *self, \ nm_assert((g_main_context_get_thread_default() ?: g_main_context_default()) \ == _priv->x_context); \ - nm_assert(g_main_context_is_owner(_priv->x_context)); \ + nm_assert(nm_g_main_context_can_acquire(_priv->x_context)); \ } \ } \ G_STMT_END @@ -6261,7 +6261,6 @@ nm_client_get_capabilities(NMClient *client, gsize *length) NMClientPrivate *priv; g_return_val_if_fail(NM_IS_CLIENT(client), NULL); - g_return_val_if_fail(length, NULL); priv = NM_CLIENT_GET_PRIVATE(client); @@ -7306,9 +7305,9 @@ _init_start_check_complete(NMClient *self) static void _init_start_cancelled_cb(GCancellable *cancellable, gpointer user_data) { - NMClient *self = user_data; - NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE(self); - GError *error; + NMClient *self = user_data; + NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE(self); + GError *error = NULL; nm_assert(NM_IS_CLIENT(self)); nm_assert(priv->init_data); @@ -7328,8 +7327,8 @@ _init_start_cancelled_cb(GCancellable *cancellable, gpointer user_data) static gboolean _init_start_cancel_on_idle_cb(gpointer user_data) { - NMClient *self = user_data; - GError *error; + NMClient *self = user_data; + GError *error = NULL; nm_utils_error_set_cancelled(&error, FALSE, NULL); _init_start_complete(self, error); diff --git a/src/libnm-core-public/nm-version-macros.h b/src/libnm-core-public/nm-version-macros.h index 8cb7ef49..0aff11b9 100644 --- a/src/libnm-core-public/nm-version-macros.h +++ b/src/libnm-core-public/nm-version-macros.h @@ -30,7 +30,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (2) +#define NM_MICRO_VERSION (4) /** * NM_CHECK_VERSION: diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 6e6fed12..563b7cc2 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -6680,3 +6680,23 @@ nm_g_main_context_iterate_for_msec(GMainContext *context, guint timeout_msec) while (source) g_main_context_iteration(context, TRUE); } + +/*****************************************************************************/ + +gboolean +nm_g_main_context_can_acquire(GMainContext *context) +{ + /* Fast path. Usually we don't pass contexts between threads + * and operate while iterating the context. Hence, usually we + * already acquired the context. Check that first. */ + if (g_main_context_is_owner(context)) + return TRUE; + + /* Either the context is not owned, or owned by somebody else. Only + * one way to find out. */ + if (!g_main_context_acquire(context)) + return FALSE; + + g_main_context_release(context); + return TRUE; +} diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 54550f27..a953140b 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -1789,7 +1789,7 @@ nm_g_idle_add_source(GSourceFunc func, gpointer user_data) /* A convenience function to attach a new timeout source to the default GMainContext. * In that sense it's very similar to g_idle_add() except that it returns a * reference to the new source. */ - return nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT, func, user_data, NULL), + return nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT_IDLE, func, user_data, NULL), NULL); } @@ -1931,6 +1931,8 @@ nm_g_main_context_iterate_ready(GMainContext *context) void nm_g_main_context_iterate_for_msec(GMainContext *context, guint timeout_msec); +gboolean nm_g_main_context_can_acquire(GMainContext *context); + /*****************************************************************************/ static inline int diff --git a/src/n-dhcp4/src/n-dhcp4-c-connection.c b/src/n-dhcp4/src/n-dhcp4-c-connection.c index 4aba9739..2f660e3b 100644 --- a/src/n-dhcp4/src/n-dhcp4-c-connection.c +++ b/src/n-dhcp4/src/n-dhcp4-c-connection.c @@ -705,6 +705,7 @@ int n_dhcp4_c_connection_select_new(NDhcp4CConnection *connection, message->userdata.start_time = offer->userdata.start_time; message->userdata.base_time = offer->userdata.base_time; message->userdata.client_addr = client.s_addr; + message->userdata.server_id = server.s_addr; n_dhcp4_incoming_get_xid(offer, &xid); n_dhcp4_outgoing_set_xid(message, xid); @@ -1224,6 +1225,24 @@ int n_dhcp4_c_connection_dispatch_io(NDhcp4CConnection *connection, serv_addr, sizeof(serv_addr))); } + if (type == N_DHCP4_MESSAGE_NAK && + connection->request->userdata.server_id != INADDR_ANY) { + struct in_addr server; + + r = n_dhcp4_incoming_query_server_identifier(message, &server); + if (r) + return N_DHCP4_E_AGAIN; + + if (connection->request->userdata.server_id != server.s_addr) { + n_dhcp4_log(connection->log_queue, + LOG_DEBUG, + "discarded NAK with wrong server-id %s", + inet_ntop(AF_INET, &server, + serv_addr, sizeof(serv_addr))); + return N_DHCP4_E_AGAIN; + } + } + switch (type) { case N_DHCP4_MESSAGE_OFFER: case N_DHCP4_MESSAGE_ACK: diff --git a/src/n-dhcp4/src/n-dhcp4-private.h b/src/n-dhcp4/src/n-dhcp4-private.h index db7b24ff..191e946e 100644 --- a/src/n-dhcp4/src/n-dhcp4-private.h +++ b/src/n-dhcp4/src/n-dhcp4-private.h @@ -202,6 +202,7 @@ struct NDhcp4Outgoing { uint8_t type; uint8_t message_type; uint32_t client_addr; + uint32_t server_id; uint64_t start_time; uint64_t base_time; uint64_t send_time; diff --git a/src/nm-cloud-setup/nm-http-client.c b/src/nm-cloud-setup/nm-http-client.c index 2f71cefa..7ef9f38d 100644 --- a/src/nm-cloud-setup/nm-http-client.c +++ b/src/nm-cloud-setup/nm-http-client.c @@ -305,6 +305,7 @@ nm_http_client_get(NMHttpClient *self, curl_easy_setopt(edata->ehandle, CURLOPT_WRITEFUNCTION, _get_writefunction_cb); curl_easy_setopt(edata->ehandle, CURLOPT_WRITEDATA, edata); curl_easy_setopt(edata->ehandle, CURLOPT_PRIVATE, edata); + curl_easy_setopt(edata->ehandle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); if (http_headers) { for (i = 0; http_headers[i]; ++i) { diff --git a/src/nmcli/connections.c b/src/nmcli/connections.c index 559dc7db..025f96a1 100644 --- a/src/nmcli/connections.c +++ b/src/nmcli/connections.c @@ -4211,16 +4211,16 @@ set_option(NmCli *nmc, if (option && option->check_and_set) { return option->check_and_set(nmc, connection, option, value, error); } else if (value || allow_reset) { - set_property(nmc->client, - connection, - setting_name, - property_name, - value, - !value ? NM_META_ACCESSOR_MODIFIER_DEL - : (inf_flags & NM_META_PROPERTY_INF_FLAG_MULTI - ? NM_META_ACCESSOR_MODIFIER_ADD - : NM_META_ACCESSOR_MODIFIER_SET), - error); + return set_property(nmc->client, + connection, + setting_name, + property_name, + value, + !value ? NM_META_ACCESSOR_MODIFIER_DEL + : (inf_flags & NM_META_PROPERTY_INF_FLAG_MULTI + ? NM_META_ACCESSOR_MODIFIER_ADD + : NM_META_ACCESSOR_MODIFIER_SET), + error); } return TRUE; -- cgit 1.3.0-6-gf8a5 From 4d51047957f22aa1313dbac3a59177bfd0ffaf17 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 23 Mar 2022 11:56:45 +0100 Subject: New upstream version 1.36.4 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 80aec69c..2b3ca491 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +network-manager (1.36.4-1) UNRELEASED; urgency=medium + + * New upstream version 1.36.4 + + -- Michael Biebl Wed, 23 Mar 2022 11:56:43 +0100 + network-manager (1.36.2-1) unstable; urgency=medium * New upstream version 1.36.2 -- cgit 1.3.0-6-gf8a5 From 6682a2c089e8653d7d4e958b49ebb6b7801c4e49 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 23 Mar 2022 20:39:32 +0100 Subject: Release version 1.36.4-1 to unstable --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2b3ca491..f319ac30 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -network-manager (1.36.4-1) UNRELEASED; urgency=medium +network-manager (1.36.4-1) unstable; urgency=medium * New upstream version 1.36.4 - -- Michael Biebl Wed, 23 Mar 2022 11:56:43 +0100 + -- Michael Biebl Wed, 23 Mar 2022 20:39:16 +0100 network-manager (1.36.2-1) unstable; urgency=medium -- cgit 1.3.0-6-gf8a5 From 957c3298dd5b76319db7958e9afdb56a010d4e68 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Mon, 4 Apr 2022 11:28:20 +0200 Subject: supplicant: enable WPA3 transition mode only when interface supports PMF See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003907 --- debian/patches/series | 2 + .../supplicant-add-BIP-interface-capability.patch | 117 +++++++++++++++++++++ ...e-WPA3-transition-mode-only-when-interfac.patch | 58 ++++++++++ 3 files changed, 177 insertions(+) create mode 100644 debian/patches/supplicant-add-BIP-interface-capability.patch create mode 100644 debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch diff --git a/debian/patches/series b/debian/patches/series index a2d7e06d..c61b47cb 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,3 @@ Force-online-state-with-unmanaged-devices.patch +supplicant-add-BIP-interface-capability.patch +supplicant-enable-WPA3-transition-mode-only-when-interfac.patch diff --git a/debian/patches/supplicant-add-BIP-interface-capability.patch b/debian/patches/supplicant-add-BIP-interface-capability.patch new file mode 100644 index 00000000..e1cc05e2 --- /dev/null +++ b/debian/patches/supplicant-add-BIP-interface-capability.patch @@ -0,0 +1,117 @@ +From: Beniamino Galvani +Date: Fri, 1 Apr 2022 15:32:34 +0200 +Subject: supplicant: add BIP interface capability + +Introduce a new capability indicating whether the interface supports +any of the BIP ciphers that can be used for 802.11w (PMF). + +(cherry picked from commit cd1e0193abcf26f523bd52d83af5aab086ceaa92) +(cherry picked from commit 55ee796c3b14cb6bb7ff4916d6580202a95a00d1) +--- + src/core/supplicant/nm-supplicant-interface.c | 28 +++++++++++++++++++++++++-- + src/core/supplicant/nm-supplicant-types.h | 4 ++++ + 2 files changed, 30 insertions(+), 2 deletions(-) + +diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c +index d827614..e502ae8 100644 +--- a/src/core/supplicant/nm-supplicant-interface.c ++++ b/src/core/supplicant/nm-supplicant-interface.c +@@ -1225,8 +1225,10 @@ parse_capabilities(NMSupplicantInterface *self, GVariant *capabilities) + const guint32 old_max_scan_ssids = priv->max_scan_ssids; + gboolean have_ft = FALSE; + gboolean have_sae = FALSE; ++ gboolean have_bip = FALSE; + gint32 max_scan_ssids; + const char **array; ++ guint i; + + nm_assert(capabilities && g_variant_is_of_type(capabilities, G_VARIANT_TYPE_VARDICT)); + +@@ -1236,12 +1238,28 @@ parse_capabilities(NMSupplicantInterface *self, GVariant *capabilities) + g_free(array); + } + ++ if (g_variant_lookup(capabilities, "GroupMgmt", "^a&s", &array)) { ++ for (i = 0; array[i]; i++) { ++ if (NM_IN_STRSET(array[i], ++ "aes-128-cmac", ++ "bip-gmac-128", ++ "bip-gmac-256", ++ "bip-cmac-256")) { ++ have_bip = TRUE; ++ break; ++ } ++ } ++ } ++ + priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, + NM_SUPPL_CAP_TYPE_FT, + have_ft ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); + priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, + NM_SUPPL_CAP_TYPE_SAE, + have_sae ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); ++ priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, ++ NM_SUPPL_CAP_TYPE_BIP, ++ have_bip ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); + + if (g_variant_lookup(capabilities, "Modes", "^a&s", &array)) { + /* Setting p2p_capable might toggle _prop_p2p_available_get(). However, +@@ -1317,10 +1335,12 @@ _starting_check_ready(NMSupplicantInterface *self) + " AP%c" + " FT%c" + " SAE%c" ++ " BIP%c" + "", + NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_AP), + NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_FT), +- NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_SAE)); ++ NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_SAE), ++ NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_BIP)); + + /* Other global properties are set in constructed() because they don't + * depend on interface capabilities. */ +@@ -1362,6 +1382,7 @@ _get_capability(NMSupplicantInterfacePrivate *priv, NMSupplCapType type) + } + break; + case NM_SUPPL_CAP_TYPE_SAE: ++ case NM_SUPPL_CAP_TYPE_BIP: + nm_assert(NM_SUPPL_CAP_MASK_GET(priv->global_capabilities, type) == NM_TERNARY_DEFAULT); + value = NM_SUPPL_CAP_MASK_GET(priv->iface_capabilities, type); + break; +@@ -1395,10 +1416,13 @@ nm_supplicant_interface_get_capabilities(NMSupplicantInterface *self) + caps = NM_SUPPL_CAP_MASK_SET(caps, + NM_SUPPL_CAP_TYPE_SAE, + _get_capability(priv, NM_SUPPL_CAP_TYPE_SAE)); ++ caps = NM_SUPPL_CAP_MASK_SET(caps, ++ NM_SUPPL_CAP_TYPE_BIP, ++ _get_capability(priv, NM_SUPPL_CAP_TYPE_BIP)); + + nm_assert(!NM_FLAGS_ANY(priv->iface_capabilities, + ~(NM_SUPPL_CAP_MASK_T_AP_MASK | NM_SUPPL_CAP_MASK_T_FT_MASK +- | NM_SUPPL_CAP_MASK_T_SAE_MASK))); ++ | NM_SUPPL_CAP_MASK_T_SAE_MASK | NM_SUPPL_CAP_MASK_T_BIP_MASK))); + + #if NM_MORE_ASSERTS > 10 + { +diff --git a/src/core/supplicant/nm-supplicant-types.h b/src/core/supplicant/nm-supplicant-types.h +index d5cf1bf..8904372 100644 +--- a/src/core/supplicant/nm-supplicant-types.h ++++ b/src/core/supplicant/nm-supplicant-types.h +@@ -48,6 +48,9 @@ typedef enum { + NM_SUPPL_CAP_TYPE_FAST, + NM_SUPPL_CAP_TYPE_WFD, + NM_SUPPL_CAP_TYPE_SUITEB192, ++ NM_SUPPL_CAP_TYPE_BIP, ++ /* Note: if you're adding a capability here, log its presence at the ++ * bottom of _dbus_get_capabilities_cb(). */ + _NM_SUPPL_CAP_TYPE_NUM, + } NMSupplCapType; + +@@ -75,6 +78,7 @@ typedef enum { + _NM_SUPPL_CAP_MASK_DEFINE(FT), + _NM_SUPPL_CAP_MASK_DEFINE(SAE), + _NM_SUPPL_CAP_MASK_DEFINE(SHA384), ++ _NM_SUPPL_CAP_MASK_DEFINE(BIP), + #undef _NM_SUPPL_CAP_MASK_DEFINE + } NMSupplCapMask; + diff --git a/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch b/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch new file mode 100644 index 00000000..2e79268b --- /dev/null +++ b/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch @@ -0,0 +1,58 @@ +From: Beniamino Galvani +Date: Fri, 1 Apr 2022 15:49:13 +0200 +Subject: supplicant: enable WPA3 transition mode only when interface supports + PMF + +We have some reports of APs that advertise WPA2/WPA3 with +MFP-required=0/MFP-capable=0, and reject the association when the +client doesn't support 802.11w. + +According to WPA3_Specification_v3.0 section 2.3, when operating in +WPA3-Personal transition mode a STA: + +- should allow AKM suite selector: 00-0F-AC:6 (WPA-PSK-SHA256) to be + selected for an association; + +- shall negotiate PMF when associating to an AP using SAE. + +The first is guaranteed by capability PMF; the second by checking that +the interface supports BIP ciphers suitable for PMF. + +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/964 +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003907 +(cherry picked from commit 1a7db1d7f712d7696f64b089011bc45fc86e7924) +(cherry picked from commit 4dbf7778acef65fb7f5258e5b69d321bc79a490e) +--- + src/core/supplicant/nm-supplicant-config.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c +index 96c2357..8626042 100644 +--- a/src/core/supplicant/nm-supplicant-config.c ++++ b/src/core/supplicant/nm-supplicant-config.c +@@ -854,7 +854,24 @@ nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig + g_string_append(key_mgmt_conf, " WPA-PSK-SHA256"); + if (_get_capability(priv, NM_SUPPL_CAP_TYPE_FT)) + g_string_append(key_mgmt_conf, " FT-PSK"); +- if (_get_capability(priv, NM_SUPPL_CAP_TYPE_SAE)) { ++ ++ /* For NM "key-mgmt=wpa-psk" doesn't strictly mean WPA1/wPA2 only, ++ * but also allows WPA3 (SAE), so that existing connections can ++ * benefit from the improved security when the AP gets upgraded. ++ * ++ * According to WPA3_Specification_v3.0 section 2.3, when operating ++ * in WPA3-Personal transition mode a STA: ++ * ++ * - should allow AKM suite selector: 00-0F-AC:6 (WPA-PSK-SHA256) to ++ * be selected for an association; ++ * - shall negotiate PMF when associating to an AP using SAE. ++ * ++ * Those conditions are met when the interface has capabilities ++ * SAE, PMF, BIP. ++ */ ++ if (_get_capability(priv, NM_SUPPL_CAP_TYPE_SAE) ++ && _get_capability(priv, NM_SUPPL_CAP_TYPE_PMF) ++ && _get_capability(priv, NM_SUPPL_CAP_TYPE_BIP)) { + g_string_append(key_mgmt_conf, " SAE"); + if (_get_capability(priv, NM_SUPPL_CAP_TYPE_FT)) + g_string_append(key_mgmt_conf, " FT-SAE"); -- cgit 1.3.0-6-gf8a5 From 16cc38ed3d1761b178512c9a6c291ad366c6fad8 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Mon, 4 Apr 2022 11:39:36 +0200 Subject: Release version 1.36.4-2 to unstable --- debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/debian/changelog b/debian/changelog index f319ac30..80402463 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +network-manager (1.36.4-2) unstable; urgency=medium + + * supplicant: enable WPA3 transition mode only when interface supports PMF. + See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003907 + + -- Michael Biebl Mon, 04 Apr 2022 11:39:20 +0200 + network-manager (1.36.4-1) unstable; urgency=medium * New upstream version 1.36.4 -- cgit 1.3.0-6-gf8a5 From 9959fdb2e8ddd06f2161798ca0a39c77d67c652d Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 15:35:24 +0200 Subject: New upstream version 1.37.92 --- INSTALL | 368 - Makefile.am | 119 +- Makefile.in | 660 +- NEWS | 67 +- README | 88 - README.md | 88 + TODO | 123 +- build-aux/ltmain.sh | 21 +- config.h.in | 3 + configure | 102 +- configure.ac | 23 +- data/85-nm-unmanaged.rules | 6 +- docs/api/Makefile.am | 1 + docs/api/Makefile.in | 7 +- ...-org.freedesktop.NetworkManager.AccessPoint.xml | 2 +- ...org.freedesktop.NetworkManager.AgentManager.xml | 2 +- ...reedesktop.NetworkManager.Connection.Active.xml | 4 +- ...-org.freedesktop.NetworkManager.DHCP4Config.xml | 2 +- ...-org.freedesktop.NetworkManager.DHCP6Config.xml | 2 +- ...-org.freedesktop.NetworkManager.Device.Adsl.xml | 2 +- ...freedesktop.NetworkManager.Device.Bluetooth.xml | 2 +- ...-org.freedesktop.NetworkManager.Device.Bond.xml | 2 +- ...rg.freedesktop.NetworkManager.Device.Bridge.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Dummy.xml | 2 +- ...g.freedesktop.NetworkManager.Device.Generic.xml | 2 +- ....freedesktop.NetworkManager.Device.IPTunnel.xml | 2 +- ...reedesktop.NetworkManager.Device.Infiniband.xml | 2 +- ...rg.freedesktop.NetworkManager.Device.Macsec.xml | 2 +- ...g.freedesktop.NetworkManager.Device.Macvlan.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Modem.xml | 8 +- ....freedesktop.NetworkManager.Device.OlpcMesh.xml | 2 +- ...reedesktop.NetworkManager.Device.Statistics.xml | 2 +- ...-org.freedesktop.NetworkManager.Device.Team.xml | 2 +- ...s-org.freedesktop.NetworkManager.Device.Tun.xml | 2 +- ...-org.freedesktop.NetworkManager.Device.Veth.xml | 2 +- ...-org.freedesktop.NetworkManager.Device.Vlan.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Vxlan.xml | 2 +- ...g.freedesktop.NetworkManager.Device.WifiP2P.xml | 32 +- ...freedesktop.NetworkManager.Device.WireGuard.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Wired.xml | 2 +- ....freedesktop.NetworkManager.Device.Wireless.xml | 4 +- .../dbus-org.freedesktop.NetworkManager.Device.xml | 12 +- ...s-org.freedesktop.NetworkManager.DnsManager.xml | 2 +- ...us-org.freedesktop.NetworkManager.IP4Config.xml | 6 +- ...us-org.freedesktop.NetworkManager.IP6Config.xml | 2 +- .../dbus-org.freedesktop.NetworkManager.PPP.xml | 2 +- ...-org.freedesktop.NetworkManager.SecretAgent.xml | 2 +- ...edesktop.NetworkManager.Settings.Connection.xml | 97 +- ...bus-org.freedesktop.NetworkManager.Settings.xml | 73 +- ...g.freedesktop.NetworkManager.VPN.Connection.xml | 2 +- ...s-org.freedesktop.NetworkManager.VPN.Plugin.xml | 2 +- docs/api/dbus-org.freedesktop.NetworkManager.xml | 45 +- docs/api/html/NetworkManager-dispatcher.html | 8 +- .../html/NetworkManager-wait-online.service.html | 150 + docs/api/html/NetworkManager.conf.html | 79 +- docs/api/html/NetworkManager.devhelp2 | 6 + docs/api/html/NetworkManager.html | 5 +- docs/api/html/ch01.html | 4 +- docs/api/html/dbus-secret-agent.html | 6 +- docs/api/html/dbus-types.html | 4 +- docs/api/html/dbus-vpn-plugin.html | 6 +- docs/api/html/dbus-vpn-types.html | 4 +- ...org.freedesktop.NetworkManager.AccessPoint.html | 6 +- ...rg.freedesktop.NetworkManager.AgentManager.html | 6 +- ...-org.freedesktop.NetworkManager.Checkpoint.html | 6 +- ...eedesktop.NetworkManager.Connection.Active.html | 9 +- ...org.freedesktop.NetworkManager.DHCP4Config.html | 6 +- ...org.freedesktop.NetworkManager.DHCP6Config.html | 6 +- ...org.freedesktop.NetworkManager.Device.Adsl.html | 6 +- ...reedesktop.NetworkManager.Device.Bluetooth.html | 6 +- ...org.freedesktop.NetworkManager.Device.Bond.html | 6 +- ...g.freedesktop.NetworkManager.Device.Bridge.html | 6 +- ...rg.freedesktop.NetworkManager.Device.Dummy.html | 6 +- ....freedesktop.NetworkManager.Device.Generic.html | 6 +- ...freedesktop.NetworkManager.Device.IPTunnel.html | 6 +- ...eedesktop.NetworkManager.Device.Infiniband.html | 6 +- ...g.freedesktop.NetworkManager.Device.Lowpan.html | 6 +- ...g.freedesktop.NetworkManager.Device.Macsec.html | 6 +- ....freedesktop.NetworkManager.Device.Macvlan.html | 6 +- ...rg.freedesktop.NetworkManager.Device.Modem.html | 15 +- ...freedesktop.NetworkManager.Device.OlpcMesh.html | 6 +- ...reedesktop.NetworkManager.Device.OvsBridge.html | 9 +- ...desktop.NetworkManager.Device.OvsInterface.html | 6 +- ....freedesktop.NetworkManager.Device.OvsPort.html | 9 +- ...-org.freedesktop.NetworkManager.Device.Ppp.html | 6 +- ...eedesktop.NetworkManager.Device.Statistics.html | 6 +- ...org.freedesktop.NetworkManager.Device.Team.html | 6 +- ...-org.freedesktop.NetworkManager.Device.Tun.html | 6 +- ...org.freedesktop.NetworkManager.Device.Veth.html | 6 +- ...org.freedesktop.NetworkManager.Device.Vlan.html | 6 +- ...-org.freedesktop.NetworkManager.Device.Vrf.html | 6 +- ...rg.freedesktop.NetworkManager.Device.Vxlan.html | 6 +- ....freedesktop.NetworkManager.Device.WifiP2P.html | 49 +- ...reedesktop.NetworkManager.Device.WireGuard.html | 6 +- ...rg.freedesktop.NetworkManager.Device.Wired.html | 6 +- ...freedesktop.NetworkManager.Device.Wireless.html | 9 +- ...org.freedesktop.NetworkManager.Device.Wpan.html | 6 +- ...dbus-org.freedesktop.NetworkManager.Device.html | 21 +- ...-org.freedesktop.NetworkManager.DnsManager.html | 6 +- ...s-org.freedesktop.NetworkManager.IP4Config.html | 12 +- ...s-org.freedesktop.NetworkManager.IP6Config.html | 6 +- .../gdbus-org.freedesktop.NetworkManager.PPP.html | 6 +- ...org.freedesktop.NetworkManager.SecretAgent.html | 6 +- ...desktop.NetworkManager.Settings.Connection.html | 127 +- ...us-org.freedesktop.NetworkManager.Settings.html | 97 +- ....freedesktop.NetworkManager.VPN.Connection.html | 6 +- ...-org.freedesktop.NetworkManager.VPN.Plugin.html | 6 +- ...org.freedesktop.NetworkManager.WifiP2PPeer.html | 40 +- .../html/gdbus-org.freedesktop.NetworkManager.html | 46 +- docs/api/html/index.html | 103 +- docs/api/html/ix01.html | 36 +- docs/api/html/license.html | 4 +- docs/api/html/manpages.html | 7 +- docs/api/html/nm-cloud-setup.html | 28 +- docs/api/html/nm-dbus-types.html | 71 +- docs/api/html/nm-initrd-generator.html | 4 +- docs/api/html/nm-online.html | 32 +- docs/api/html/nm-openvswitch.html | 26 +- docs/api/html/nm-settings-dbus.html | 114 +- docs/api/html/nm-settings-ifcfg-rh.html | 78 +- docs/api/html/nm-settings-keyfile.html | 24 +- docs/api/html/nm-settings-nmcli.html | 114 +- docs/api/html/nm-vpn-dbus-types.html | 4 +- docs/api/html/nmcli-examples.html | 44 +- docs/api/html/nmcli.html | 43 +- docs/api/html/nmtui.html | 4 +- docs/api/html/ref-dbus-access-points.html | 6 +- docs/api/html/ref-dbus-active-connections.html | 8 +- docs/api/html/ref-dbus-agent-manager.html | 6 +- docs/api/html/ref-dbus-checkpoint.html | 6 +- docs/api/html/ref-dbus-devices.html | 66 +- docs/api/html/ref-dbus-dhcp4-configs.html | 6 +- docs/api/html/ref-dbus-dhcp6-configs.html | 6 +- docs/api/html/ref-dbus-dns-manager.html | 6 +- docs/api/html/ref-dbus-ip4-configs.html | 6 +- docs/api/html/ref-dbus-ip6-configs.html | 6 +- docs/api/html/ref-dbus-manager.html | 6 +- docs/api/html/ref-dbus-settings-manager.html | 6 +- docs/api/html/ref-dbus-settings.html | 6 +- docs/api/html/ref-dbus-wifi-p2p-peers.html | 6 +- docs/api/html/ref-settings.html | 4 +- docs/api/html/secret-agents.html | 6 +- docs/api/html/secrets-flags.html | 4 +- docs/api/html/settings-6lowpan.html | 4 +- docs/api/html/settings-802-11-olpc-mesh.html | 4 +- .../html/settings-802-11-wireless-security.html | 4 +- docs/api/html/settings-802-11-wireless.html | 4 +- docs/api/html/settings-802-1x.html | 4 +- docs/api/html/settings-802-3-ethernet.html | 4 +- docs/api/html/settings-adsl.html | 4 +- docs/api/html/settings-bluetooth.html | 4 +- docs/api/html/settings-bond-port.html | 4 +- docs/api/html/settings-bond.html | 4 +- docs/api/html/settings-bridge-port.html | 4 +- docs/api/html/settings-bridge.html | 4 +- docs/api/html/settings-cdma.html | 4 +- docs/api/html/settings-connection.html | 8 +- docs/api/html/settings-dcb.html | 4 +- docs/api/html/settings-dummy.html | 4 +- docs/api/html/settings-ethtool.html | 4 +- docs/api/html/settings-generic.html | 4 +- docs/api/html/settings-gsm.html | 4 +- docs/api/html/settings-hostname.html | 4 +- docs/api/html/settings-infiniband.html | 4 +- docs/api/html/settings-ip-tunnel.html | 4 +- docs/api/html/settings-ipv4.html | 4 +- docs/api/html/settings-ipv6.html | 4 +- docs/api/html/settings-macsec.html | 4 +- docs/api/html/settings-macvlan.html | 4 +- docs/api/html/settings-match.html | 4 +- docs/api/html/settings-ovs-bridge.html | 4 +- docs/api/html/settings-ovs-dpdk.html | 4 +- docs/api/html/settings-ovs-external-ids.html | 4 +- docs/api/html/settings-ovs-interface.html | 4 +- docs/api/html/settings-ovs-patch.html | 4 +- docs/api/html/settings-ovs-port.html | 4 +- docs/api/html/settings-ppp.html | 4 +- docs/api/html/settings-pppoe.html | 4 +- docs/api/html/settings-proxy.html | 6 +- docs/api/html/settings-serial.html | 4 +- docs/api/html/settings-sriov.html | 4 +- docs/api/html/settings-tc.html | 4 +- docs/api/html/settings-team-port.html | 4 +- docs/api/html/settings-team.html | 4 +- docs/api/html/settings-tun.html | 4 +- docs/api/html/settings-user.html | 4 +- docs/api/html/settings-veth.html | 4 +- docs/api/html/settings-vlan.html | 4 +- docs/api/html/settings-vpn.html | 4 +- docs/api/html/settings-vrf.html | 4 +- docs/api/html/settings-vxlan.html | 4 +- docs/api/html/settings-wifi-p2p.html | 4 +- docs/api/html/settings-wimax.html | 4 +- docs/api/html/settings-wireguard.html | 4 +- docs/api/html/settings-wpan.html | 4 +- docs/api/html/spec.html | 94 +- docs/api/html/vpn-plugins.html | 6 +- docs/api/network-manager-docs.xml | 1 + docs/api/settings-spec.xml | 4 +- docs/api/version.xml | 2 +- docs/libnm/Makefile.in | 6 +- docs/libnm/html/NMAccessPoint.html | 12 +- docs/libnm/html/NMActiveConnection.html | 16 +- docs/libnm/html/NMCheckpoint.html | 4 +- docs/libnm/html/NMClient.html | 244 +- docs/libnm/html/NMConnection.html | 98 +- docs/libnm/html/NMDevice.html | 38 +- docs/libnm/html/NMDevice6Lowpan.html | 6 +- docs/libnm/html/NMDeviceAdsl.html | 4 +- docs/libnm/html/NMDeviceBond.html | 4 +- docs/libnm/html/NMDeviceBridge.html | 4 +- docs/libnm/html/NMDeviceBt.html | 4 +- docs/libnm/html/NMDeviceDummy.html | 4 +- docs/libnm/html/NMDeviceEthernet.html | 6 +- docs/libnm/html/NMDeviceGeneric.html | 4 +- docs/libnm/html/NMDeviceIPTunnel.html | 6 +- docs/libnm/html/NMDeviceInfiniband.html | 4 +- docs/libnm/html/NMDeviceMacsec.html | 6 +- docs/libnm/html/NMDeviceMacvlan.html | 6 +- docs/libnm/html/NMDeviceModem.html | 4 +- docs/libnm/html/NMDeviceOlpcMesh.html | 6 +- docs/libnm/html/NMDeviceOvsBridge.html | 4 +- docs/libnm/html/NMDeviceOvsInterface.html | 4 +- docs/libnm/html/NMDeviceOvsPort.html | 4 +- docs/libnm/html/NMDevicePpp.html | 4 +- docs/libnm/html/NMDeviceTeam.html | 4 +- docs/libnm/html/NMDeviceTun.html | 4 +- docs/libnm/html/NMDeviceVeth.html | 6 +- docs/libnm/html/NMDeviceVlan.html | 6 +- docs/libnm/html/NMDeviceVrf.html | 4 +- docs/libnm/html/NMDeviceVxlan.html | 6 +- docs/libnm/html/NMDeviceWifi.html | 8 +- docs/libnm/html/NMDeviceWifiP2P.html | 6 +- docs/libnm/html/NMDeviceWimax.html | 8 +- docs/libnm/html/NMDeviceWireGuard.html | 6 +- docs/libnm/html/NMDeviceWpan.html | 4 +- docs/libnm/html/NMDhcpConfig.html | 6 +- docs/libnm/html/NMIPConfig.html | 18 +- docs/libnm/html/NMObject.html | 6 +- docs/libnm/html/NMRemoteConnection.html | 10 +- docs/libnm/html/NMSecretAgentOld.html | 16 +- docs/libnm/html/NMSetting.html | 12 +- docs/libnm/html/NMSetting6Lowpan.html | 6 +- docs/libnm/html/NMSetting8021x.html | 100 +- docs/libnm/html/NMSettingAdsl.html | 18 +- docs/libnm/html/NMSettingBluetooth.html | 6 +- docs/libnm/html/NMSettingBond.html | 14 +- docs/libnm/html/NMSettingBondPort.html | 6 +- docs/libnm/html/NMSettingBridge.html | 26 +- docs/libnm/html/NMSettingBridgePort.html | 14 +- docs/libnm/html/NMSettingCdma.html | 12 +- docs/libnm/html/NMSettingConnection.html | 36 +- docs/libnm/html/NMSettingDcb.html | 44 +- docs/libnm/html/NMSettingDummy.html | 6 +- docs/libnm/html/NMSettingEthtool.html | 8 +- docs/libnm/html/NMSettingGeneric.html | 8 +- docs/libnm/html/NMSettingGsm.html | 22 +- docs/libnm/html/NMSettingHostname.html | 6 +- docs/libnm/html/NMSettingIP4Config.html | 8 +- docs/libnm/html/NMSettingIP6Config.html | 8 +- docs/libnm/html/NMSettingIPConfig.html | 54 +- docs/libnm/html/NMSettingIPTunnel.html | 6 +- docs/libnm/html/NMSettingInfiniband.html | 14 +- docs/libnm/html/NMSettingMacsec.html | 6 +- docs/libnm/html/NMSettingMacvlan.html | 6 +- docs/libnm/html/NMSettingMatch.html | 14 +- docs/libnm/html/NMSettingOlpcMesh.html | 6 +- docs/libnm/html/NMSettingOvsBridge.html | 6 +- docs/libnm/html/NMSettingOvsDpdk.html | 6 +- docs/libnm/html/NMSettingOvsExternalIDs.html | 10 +- docs/libnm/html/NMSettingOvsInterface.html | 6 +- docs/libnm/html/NMSettingOvsPatch.html | 6 +- docs/libnm/html/NMSettingOvsPort.html | 6 +- docs/libnm/html/NMSettingPpp.html | 6 +- docs/libnm/html/NMSettingPppoe.html | 6 +- docs/libnm/html/NMSettingProxy.html | 6 +- docs/libnm/html/NMSettingSerial.html | 16 +- docs/libnm/html/NMSettingSriov.html | 20 +- docs/libnm/html/NMSettingTCConfig.html | 34 +- docs/libnm/html/NMSettingTeam.html | 20 +- docs/libnm/html/NMSettingTeamPort.html | 10 +- docs/libnm/html/NMSettingTun.html | 6 +- docs/libnm/html/NMSettingUser.html | 8 +- docs/libnm/html/NMSettingVeth.html | 6 +- docs/libnm/html/NMSettingVlan.html | 40 +- docs/libnm/html/NMSettingVpn.html | 10 +- docs/libnm/html/NMSettingVrf.html | 6 +- docs/libnm/html/NMSettingVxlan.html | 6 +- docs/libnm/html/NMSettingWifiP2P.html | 8 +- docs/libnm/html/NMSettingWimax.html | 4 +- docs/libnm/html/NMSettingWireGuard.html | 28 +- docs/libnm/html/NMSettingWired.html | 32 +- docs/libnm/html/NMSettingWireless.html | 36 +- docs/libnm/html/NMSettingWirelessSecurity.html | 26 +- docs/libnm/html/NMSettingWpan.html | 6 +- docs/libnm/html/NMSimpleConnection.html | 10 +- docs/libnm/html/NMVpnConnection.html | 4 +- docs/libnm/html/NMVpnEditor.html | 6 +- docs/libnm/html/NMVpnEditorPlugin.html | 14 +- docs/libnm/html/NMVpnPluginInfo.html | 36 +- docs/libnm/html/NMVpnPluginOld.html | 10 +- docs/libnm/html/NMVpnServicePlugin.html | 10 +- docs/libnm/html/NMWifiP2PPeer.html | 12 +- docs/libnm/html/NMWimaxNsp.html | 10 +- docs/libnm/html/annotation-glossary.html | 14 +- docs/libnm/html/api-index-full.html | 718 +- docs/libnm/html/ch02.html | 4 +- docs/libnm/html/ch03.html | 4 +- docs/libnm/html/ch04.html | 4 +- docs/libnm/html/ch05.html | 4 +- docs/libnm/html/ch06.html | 4 +- docs/libnm/html/index.html | 6 +- docs/libnm/html/libnm-nm-dbus-interface.html | 54 +- docs/libnm/html/libnm-nm-errors.html | 10 +- docs/libnm/html/libnm-nm-keyfile.html | 26 +- docs/libnm/html/libnm-nm-utils.html | 181 +- docs/libnm/html/libnm-nm-version.html | 36 +- docs/libnm/html/libnm.devhelp2 | 15 +- docs/libnm/html/license.html | 4 +- docs/libnm/html/object-tree.html | 5 +- docs/libnm/html/ref-overview.html | 4 +- docs/libnm/html/usage.html | 6 +- docs/libnm/libnm-sections.txt | 15 +- docs/libnm/libnm.types | 1 + docs/libnm/version.xml | 2 +- gtk-doc.make | 1 + .../org.freedesktop.NetworkManager.AccessPoint.xml | 2 +- ...org.freedesktop.NetworkManager.AgentManager.xml | 2 +- .../org.freedesktop.NetworkManager.Checkpoint.xml | 2 +- ...reedesktop.NetworkManager.Connection.Active.xml | 4 +- .../org.freedesktop.NetworkManager.DHCP4Config.xml | 2 +- .../org.freedesktop.NetworkManager.DHCP6Config.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Adsl.xml | 2 +- ...freedesktop.NetworkManager.Device.Bluetooth.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Bond.xml | 2 +- ...rg.freedesktop.NetworkManager.Device.Bridge.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Dummy.xml | 2 +- ...g.freedesktop.NetworkManager.Device.Generic.xml | 2 +- ....freedesktop.NetworkManager.Device.IPTunnel.xml | 2 +- ...reedesktop.NetworkManager.Device.Infiniband.xml | 2 +- ...rg.freedesktop.NetworkManager.Device.Lowpan.xml | 2 +- ...rg.freedesktop.NetworkManager.Device.Macsec.xml | 2 +- ...g.freedesktop.NetworkManager.Device.Macvlan.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Modem.xml | 8 +- ....freedesktop.NetworkManager.Device.OlpcMesh.xml | 2 +- ...freedesktop.NetworkManager.Device.OvsBridge.xml | 5 +- ...edesktop.NetworkManager.Device.OvsInterface.xml | 2 +- ...g.freedesktop.NetworkManager.Device.OvsPort.xml | 5 +- .../org.freedesktop.NetworkManager.Device.Ppp.xml | 2 +- ...reedesktop.NetworkManager.Device.Statistics.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Team.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Tun.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Veth.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Vlan.xml | 2 +- .../org.freedesktop.NetworkManager.Device.Vrf.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Vxlan.xml | 2 +- ...org.freedesktop.NetworkManager.Device.WiMax.xml | 4 +- ...g.freedesktop.NetworkManager.Device.WifiP2P.xml | 29 +- ...freedesktop.NetworkManager.Device.WireGuard.xml | 2 +- ...org.freedesktop.NetworkManager.Device.Wired.xml | 2 +- ....freedesktop.NetworkManager.Device.Wireless.xml | 5 +- .../org.freedesktop.NetworkManager.Device.Wpan.xml | 2 +- .../org.freedesktop.NetworkManager.Device.xml | 17 +- .../org.freedesktop.NetworkManager.DnsManager.xml | 2 +- .../org.freedesktop.NetworkManager.IP4Config.xml | 8 +- .../org.freedesktop.NetworkManager.IP6Config.xml | 2 +- .../org.freedesktop.NetworkManager.PPP.xml | 2 +- .../org.freedesktop.NetworkManager.SecretAgent.xml | 2 +- ...edesktop.NetworkManager.Settings.Connection.xml | 100 +- .../org.freedesktop.NetworkManager.Settings.xml | 67 +- ...g.freedesktop.NetworkManager.VPN.Connection.xml | 2 +- .../org.freedesktop.NetworkManager.VPN.Plugin.xml | 2 +- .../org.freedesktop.NetworkManager.WiMax.Nsp.xml | 2 +- .../org.freedesktop.NetworkManager.WifiP2PPeer.xml | 25 +- introspection/org.freedesktop.NetworkManager.xml | 37 +- man/NetworkManager-dispatcher.8 | 4 +- man/NetworkManager-wait-online.service.8 | 178 + man/NetworkManager-wait-online.service.xml | 169 + man/NetworkManager.8 | 7 +- man/NetworkManager.conf.5 | 56 +- man/NetworkManager.conf.xml | 77 +- man/NetworkManager.xml | 1 + man/meson.build | 1 + man/nm-cloud-setup.8 | 6 +- man/nm-initrd-generator.8 | 6 +- man/nm-online.1 | 33 +- man/nm-online.xml | 28 +- man/nm-openvswitch.7 | 6 +- man/nm-settings-dbus.5 | 12 +- man/nm-settings-dbus.xml | 4 +- man/nm-settings-docs-dbus.xml | 2 +- man/nm-settings-docs-nmcli.xml | 12 +- man/nm-settings-ifcfg-rh.5 | 10 +- man/nm-settings-ifcfg-rh.xml | 6 +- man/nm-settings-keyfile.5 | 6 +- man/nm-settings-keyfile.xml | 2 +- man/nm-settings-nmcli.5 | 20 +- man/nm-settings-nmcli.xml | 16 +- man/nmcli-examples.7 | 6 +- man/nmcli.1 | 46 +- man/nmcli.xml | 49 + man/nmtui.1 | 6 +- meson.build | 11 +- meson_options.txt | 2 +- po/LINGUAS | 2 +- po/POTFILES.in | 7 +- po/ar.po | 12838 ------------------ po/as.po | 5363 ++++---- po/be@latin.po | 5545 ++++---- po/bg.po | 5346 ++++---- po/bn_IN.po | 5367 ++++---- po/bs.po | 5315 ++++---- po/ca.po | 5463 ++++---- po/cs.po | 5345 ++++---- po/da.po | 5369 ++++---- po/de.po | 6004 +++++---- po/dz.po | 5865 ++++---- po/el.po | 5392 ++++---- po/en_CA.po | 5401 ++++---- po/en_GB.po | 5355 ++++---- po/eo.po | 5364 ++++---- po/es.po | 5501 ++++---- po/et.po | 5137 +++---- po/eu.po | 5337 ++++---- po/fi.po | 5332 ++++---- po/fr.po | 5525 ++++---- po/gd.po | 6690 +++++----- po/gl.po | 5360 ++++---- po/gu.po | 5376 ++++---- po/he.po | 5543 ++++---- po/hi.po | 5373 ++++---- po/hr.po | 12007 ++++++++++------- po/hu.po | 5364 ++++---- po/id.po | 5511 ++++---- po/it.po | 5506 ++++---- po/ja.po | 5505 ++++---- po/ka.po | 6098 ++++----- po/kn.po | 5366 ++++---- po/ko.po | 5526 ++++---- po/ku.po | 6299 ++++----- po/lt.po | 5358 ++++---- po/lv.po | 5364 ++++---- po/mk.po | 5543 ++++---- po/ml.po | 5373 ++++---- po/mr.po | 5368 ++++---- po/nb.po | 5137 +++---- po/ne.po | 5568 ++++---- po/nl.po | 13309 +++++++++++-------- po/oc.po | 5401 ++++---- po/or.po | 5368 ++++---- po/pa.po | 5389 ++++---- po/pl.po | 6229 ++++----- po/pt.po | 5864 ++++---- po/pt_BR.po | 5507 ++++---- po/ro.po | 13067 ++++++++++++++++++ po/ru.po | 7177 +++++----- po/rw.po | 5861 ++++---- po/sk.po | 6388 ++++----- po/sl.po | 5348 ++++---- po/sq.po | 5315 ++++---- po/sr.po | 5358 ++++---- po/sr@latin.po | 5360 ++++---- po/sv.po | 5503 ++++---- po/ta.po | 5422 ++++---- po/te.po | 5369 ++++---- po/th.po | 6098 ++++----- po/tr.po | 5431 ++++---- po/uk.po | 7127 +++++----- po/vi.po | 5143 +++---- po/wa.po | 5608 ++++---- po/zh_CN.po | 6041 +++++---- po/zh_HK.po | 5164 +++---- po/zh_TW.po | 5472 ++++---- src/contrib/nm-vpn-editor-plugin-call.h | 6 +- src/core/NetworkManagerUtils.c | 18 +- src/core/NetworkManagerUtils.h | 30 +- src/core/devices/bluetooth/nm-bluez-manager.c | 1 + src/core/devices/nm-device-bond.c | 24 +- src/core/devices/nm-device-bridge.c | 124 +- src/core/devices/nm-device-ethernet.c | 2 +- src/core/devices/nm-device-private.h | 2 +- src/core/devices/nm-device-tun.c | 6 + src/core/devices/nm-device.c | 223 +- src/core/devices/nm-device.h | 53 +- src/core/devices/ovs/nm-device-ovs-interface.c | 95 +- src/core/devices/ovs/nm-ovsdb.c | 53 +- src/core/devices/wifi/nm-device-iwd-p2p.c | 4 +- src/core/devices/wifi/nm-device-iwd.c | 4 +- src/core/devices/wifi/nm-device-wifi-p2p.c | 4 +- src/core/devices/wifi/nm-device-wifi.c | 133 +- src/core/devices/wifi/nm-iwd-manager.c | 1 + src/core/devices/wifi/nm-wifi-ap.c | 7 +- src/core/devices/wifi/nm-wifi-p2p-peer.c | 9 +- src/core/devices/wwan/nm-device-modem.c | 8 +- src/core/devices/wwan/nm-modem-broadband.c | 2 +- src/core/devices/wwan/nm-modem-ofono.c | 2 +- src/core/dhcp/nm-dhcp-client.c | 32 +- src/core/dhcp/nm-dhcp-dhcpcd.c | 3 +- src/core/dhcp/nm-dhcp-nettools.c | 27 +- src/core/dhcp/nm-dhcp-systemd.c | 103 +- src/core/dhcp/nm-dhcp-utils.c | 38 +- src/core/dns/nm-dns-dnsmasq.c | 10 +- src/core/dns/nm-dns-manager.c | 73 +- src/core/dns/nm-dns-manager.h | 1 - src/core/dns/nm-dns-plugin.c | 4 +- src/core/dns/nm-dns-plugin.h | 2 +- src/core/dns/nm-dns-systemd-resolved.c | 2 +- src/core/dns/nm-dns-unbound.c | 2 +- src/core/dnsmasq/nm-dnsmasq-manager.c | 7 +- src/core/main.c | 4 +- src/core/ndisc/nm-ndisc.c | 3 +- src/core/nm-checkpoint-manager.c | 9 +- src/core/nm-checkpoint.c | 2 + src/core/nm-config.c | 7 +- src/core/nm-connectivity.c | 209 +- src/core/nm-core-utils.c | 90 +- src/core/nm-core-utils.h | 3 +- src/core/nm-dbus-manager.c | 15 + src/core/nm-dbus-manager.h | 3 + src/core/nm-firewall-utils.c | 4 +- src/core/nm-l3-config-data.c | 38 +- src/core/nm-l3-config-data.h | 1 - src/core/nm-l3-ipv4ll.c | 13 +- src/core/nm-l3-ipv6ll.c | 9 +- src/core/nm-l3cfg.c | 50 +- src/core/nm-l3cfg.h | 9 - src/core/nm-manager.c | 655 +- src/core/nm-manager.h | 1 + src/core/nm-pacrunner-manager.c | 4 +- src/core/nm-policy.c | 59 +- src/core/nm-rfkill-manager.c | 264 +- src/core/nm-rfkill-manager.h | 44 +- src/core/nm-session-monitor.c | 7 +- src/core/nm-test-utils-core.h | 14 +- src/core/platform/tests/test-common.c | 16 +- src/core/platform/tests/test-platform-general.c | 545 +- src/core/platform/tests/test-route.c | 28 +- src/core/ppp/nm-ppp-manager.c | 2 +- src/core/settings/nm-secret-agent.c | 2 +- src/core/settings/nm-settings-connection.c | 43 +- src/core/settings/nm-settings-connection.h | 1 + src/core/settings/nm-settings.c | 88 +- src/core/settings/nm-settings.h | 3 + .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 28 +- .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 2 + .../plugins/keyfile/tests/test-keyfile-settings.c | 5 +- src/core/supplicant/nm-supplicant-config.c | 51 +- src/core/supplicant/nm-supplicant-config.h | 1 + src/core/supplicant/nm-supplicant-interface.c | 28 +- src/core/supplicant/nm-supplicant-manager.c | 9 +- src/core/supplicant/nm-supplicant-types.h | 6 + src/core/supplicant/tests/test-supplicant-config.c | 1 + src/core/tests/test-core.c | 29 +- src/core/tests/test-l3cfg.c | 14 +- src/core/tests/test-utils.c | 47 + src/libnm-base/meson.build | 1 + src/libnm-base/nm-base.c | 11 + src/libnm-base/nm-base.h | 16 + src/libnm-client-impl/libnm.ver | 8 +- src/libnm-client-impl/meson.build | 8 + src/libnm-client-impl/nm-client.c | 47 +- src/libnm-client-impl/nm-libnm-utils.c | 57 + .../nm-property-infos-ifcfg-rh.xml | 2 +- src/libnm-client-impl/nm-property-infos-nmcli.xml | 10 +- src/libnm-client-impl/nm-settings-docs-gir.xml | 6 +- src/libnm-client-impl/nm-vpn-service-plugin.c | 88 +- src/libnm-client-impl/tests/test-libnm.c | 117 +- src/libnm-client-public/NetworkManager.h | 4 +- src/libnm-client-public/nm-client.h | 15 +- src/libnm-client-test/meson.build | 1 + src/libnm-client-test/nm-test-utils-impl.c | 2 + src/libnm-core-impl/meson.build | 30 - src/libnm-core-impl/nm-connection.c | 61 + src/libnm-core-impl/nm-crypto-gnutls.c | 415 - src/libnm-core-impl/nm-crypto-impl.h | 49 - src/libnm-core-impl/nm-crypto-nss.c | 548 - src/libnm-core-impl/nm-crypto.c | 1044 -- src/libnm-core-impl/nm-crypto.h | 96 - src/libnm-core-impl/nm-errors.c | 14 +- src/libnm-core-impl/nm-keyfile.c | 759 +- src/libnm-core-impl/nm-meta-setting-base-impl.c | 62 + src/libnm-core-impl/nm-setting-8021x.c | 513 +- src/libnm-core-impl/nm-setting-connection.c | 105 +- src/libnm-core-impl/nm-setting-ip-config.c | 6 +- src/libnm-core-impl/nm-setting-ip4-config.c | 3 +- src/libnm-core-impl/nm-setting-ip6-config.c | 8 +- src/libnm-core-impl/nm-setting-match.c | 244 +- src/libnm-core-impl/nm-setting-private.h | 45 + src/libnm-core-impl/nm-setting-proxy.c | 18 +- src/libnm-core-impl/nm-setting.c | 89 +- src/libnm-core-impl/nm-utils.c | 100 +- src/libnm-core-impl/tests/test-crypto.c | 32 +- src/libnm-core-impl/tests/test-general-enums.h | 10 +- src/libnm-core-impl/tests/test-general.c | 2 +- src/libnm-core-impl/tests/test-keyfile.c | 109 +- src/libnm-core-impl/tests/test-setting.c | 17 +- src/libnm-core-intern/nm-core-internal.h | 16 +- src/libnm-core-intern/nm-meta-setting-base-impl.h | 22 +- src/libnm-core-public/nm-connection.h | 18 +- src/libnm-core-public/nm-dbus-interface.h | 262 +- src/libnm-core-public/nm-dbus-types.xml | 37 +- src/libnm-core-public/nm-keyfile.h | 4 +- src/libnm-core-public/nm-setting-8021x.h | 12 +- src/libnm-core-public/nm-setting-dcb.h | 10 +- src/libnm-core-public/nm-setting-ip-config.h | 34 +- src/libnm-core-public/nm-setting-ip-tunnel.h | 16 +- src/libnm-core-public/nm-setting-team.h | 10 +- src/libnm-core-public/nm-setting-vlan.h | 20 +- src/libnm-core-public/nm-setting-wired.h | 28 +- .../nm-setting-wireless-security.h | 12 +- src/libnm-core-public/nm-setting-wireless.h | 2 +- src/libnm-core-public/nm-setting.h | 12 +- src/libnm-core-public/nm-utils.h | 4 - src/libnm-core-public/nm-version-macros.h | 5 +- src/libnm-core-public/nm-version-macros.h.in | 1 + src/libnm-core-public/nm-version.h | 14 + src/libnm-crypto/README.md | 7 + src/libnm-crypto/meson.build | 69 + src/libnm-crypto/nm-crypto-gnutls.c | 414 + src/libnm-crypto/nm-crypto-impl.h | 50 + src/libnm-crypto/nm-crypto-nss.c | 552 + src/libnm-crypto/nm-crypto-null.c | 103 + src/libnm-crypto/nm-crypto.c | 1063 ++ src/libnm-crypto/nm-crypto.h | 99 + src/libnm-glib-aux/nm-glib.h | 10 + src/libnm-glib-aux/nm-json-aux.h | 5 +- src/libnm-glib-aux/nm-logging-fwd.h | 117 +- src/libnm-glib-aux/nm-macros-internal.h | 39 +- src/libnm-glib-aux/nm-secret-utils.c | 33 + src/libnm-glib-aux/nm-secret-utils.h | 4 + src/libnm-glib-aux/nm-shared-utils.c | 99 +- src/libnm-glib-aux/nm-shared-utils.h | 123 +- src/libnm-glib-aux/nm-test-utils.h | 14 +- src/libnm-glib-aux/nm-time-utils.h | 6 + src/libnm-glib-aux/nm-uuid.c | 70 +- src/libnm-glib-aux/nm-value-type.h | 66 +- src/libnm-glib-aux/tests/test-shared-general.c | 3 - src/libnm-platform/nm-linux-platform.c | 97 +- src/libnm-platform/nm-platform-utils.c | 12 +- src/libnm-platform/nm-platform-utils.h | 2 +- src/libnm-platform/nm-platform.c | 955 +- src/libnm-platform/nm-platform.h | 144 +- src/libnm-platform/nmp-base.h | 2 +- src/libnm-platform/nmp-object.c | 106 +- src/libnm-platform/nmp-object.h | 33 +- src/libnm-platform/nmp-route-manager.c | 25 +- src/libnm-platform/tests/test-nm-platform.c | 2 + src/libnm-platform/wifi/nm-wifi-utils-nl80211.c | 153 +- src/libnm-platform/wifi/nm-wifi-utils-private.h | 5 + src/libnm-platform/wifi/nm-wifi-utils-wext.c | 6 +- src/libnm-platform/wifi/nm-wifi-utils.c | 25 + src/libnm-platform/wifi/nm-wifi-utils.h | 6 + src/libnm-std-aux/nm-std-aux.h | 36 +- src/libnm-systemd-core/meson.build | 1 + src/libnm-systemd-core/nm-sd-utils-dhcp.c | 3 +- .../src/libsystemd-network/dhcp-identifier.c | 131 +- .../src/libsystemd-network/dhcp-identifier.h | 26 +- .../src/libsystemd-network/dhcp-lease-internal.h | 8 +- .../src/libsystemd-network/dhcp-option.c | 1 - .../src/libsystemd-network/dhcp-protocol.h | 27 +- .../src/libsystemd-network/dhcp6-internal.h | 179 +- .../src/libsystemd-network/dhcp6-lease-internal.h | 28 +- .../src/libsystemd-network/dhcp6-option.c | 419 +- .../src/libsystemd-network/dhcp6-option.h | 104 + .../src/libsystemd-network/dhcp6-protocol.c | 86 + .../src/libsystemd-network/dhcp6-protocol.h | 16 +- .../src/libsystemd-network/lldp-neighbor.c | 6 +- .../src/libsystemd-network/network-internal.h | 2 +- .../src/libsystemd-network/sd-dhcp-client.c | 78 +- .../src/libsystemd-network/sd-dhcp-lease.c | 226 +- .../src/libsystemd-network/sd-dhcp6-client.c | 1522 +-- .../src/libsystemd-network/sd-dhcp6-lease.c | 524 +- .../src/libsystemd-network/sd-lldp-rx.c | 4 +- .../src/libsystemd/sd-event/event-util.c | 41 + .../src/libsystemd/sd-event/event-util.h | 2 + .../src/libsystemd/sd-event/sd-event.c | 21 +- .../src/libsystemd/sd-id128/id128-util.c | 51 +- .../src/libsystemd/sd-id128/id128-util.h | 8 +- .../src/libsystemd/sd-id128/sd-id128.c | 32 +- .../src/systemd/sd-dhcp-client.h | 224 +- src/libnm-systemd-core/src/systemd/sd-dhcp-lease.h | 4 +- .../src/systemd/sd-dhcp6-client.h | 8 +- src/libnm-systemd-core/src/systemd/sd-id128.h | 3 + src/libnm-systemd-shared/src/basic/alloc-util.h | 17 +- src/libnm-systemd-shared/src/basic/cgroup-util.h | 2 + src/libnm-systemd-shared/src/basic/env-file.c | 98 +- src/libnm-systemd-shared/src/basic/env-util.c | 46 +- src/libnm-systemd-shared/src/basic/env-util.h | 2 +- src/libnm-systemd-shared/src/basic/errno-util.h | 10 +- src/libnm-systemd-shared/src/basic/escape.c | 1 - src/libnm-systemd-shared/src/basic/fd-util.c | 54 +- src/libnm-systemd-shared/src/basic/fd-util.h | 1 + src/libnm-systemd-shared/src/basic/fileio.c | 6 +- src/libnm-systemd-shared/src/basic/fileio.h | 6 + src/libnm-systemd-shared/src/basic/fs-util.c | 57 +- src/libnm-systemd-shared/src/basic/fs-util.h | 2 + src/libnm-systemd-shared/src/basic/hashmap.c | 3 +- src/libnm-systemd-shared/src/basic/hexdecoct.c | 3 +- src/libnm-systemd-shared/src/basic/hostname-util.c | 18 + src/libnm-systemd-shared/src/basic/hostname-util.h | 5 +- src/libnm-systemd-shared/src/basic/in-addr-util.c | 13 + src/libnm-systemd-shared/src/basic/in-addr-util.h | 1 + src/libnm-systemd-shared/src/basic/inotify-util.h | 24 +- src/libnm-systemd-shared/src/basic/io-util.c | 3 +- src/libnm-systemd-shared/src/basic/list.h | 46 +- src/libnm-systemd-shared/src/basic/log.h | 6 +- src/libnm-systemd-shared/src/basic/macro.h | 53 +- src/libnm-systemd-shared/src/basic/memory-util.h | 12 +- .../src/basic/missing_syscall.h | 4 + src/libnm-systemd-shared/src/basic/ordered-set.c | 1 - src/libnm-systemd-shared/src/basic/ordered-set.h | 8 + src/libnm-systemd-shared/src/basic/parse-util.c | 2 +- src/libnm-systemd-shared/src/basic/parse-util.h | 12 +- src/libnm-systemd-shared/src/basic/path-util.c | 53 +- src/libnm-systemd-shared/src/basic/process-util.c | 82 +- src/libnm-systemd-shared/src/basic/process-util.h | 2 + src/libnm-systemd-shared/src/basic/random-util.c | 259 +- src/libnm-systemd-shared/src/basic/random-util.h | 10 +- src/libnm-systemd-shared/src/basic/socket-util.h | 2 +- src/libnm-systemd-shared/src/basic/sort-util.h | 12 +- src/libnm-systemd-shared/src/basic/stat-util.c | 49 +- src/libnm-systemd-shared/src/basic/stat-util.h | 14 +- src/libnm-systemd-shared/src/basic/string-table.h | 2 +- src/libnm-systemd-shared/src/basic/strv.c | 64 +- src/libnm-systemd-shared/src/basic/strv.h | 37 +- src/libnm-systemd-shared/src/basic/time-util.c | 85 +- src/libnm-systemd-shared/src/basic/time-util.h | 9 +- src/libnm-systemd-shared/src/basic/tmpfile-util.c | 39 + src/libnm-systemd-shared/src/basic/tmpfile-util.h | 2 + src/libnm-systemd-shared/src/basic/util.h | 6 + .../src/fundamental/macro-fundamental.h | 35 +- src/libnm-systemd-shared/src/shared/dns-domain.c | 31 +- src/libnm-systemd-shared/src/shared/dns-domain.h | 2 + src/libnmc-base/nm-client-utils.c | 2 +- src/libnmc-base/nm-secret-agent-simple.c | 1 - src/libnmc-setting/nm-meta-setting-base-impl.c | 62 + src/libnmc-setting/nm-meta-setting-base-impl.h | 22 +- src/libnmc-setting/nm-meta-setting-desc.h | 2 + src/libnmc-setting/settings-docs-input.xml | 12 +- src/libnmc-setting/settings-docs.h | 8 +- src/libnmc-setting/settings-docs.h.in | 8 +- src/linux-headers/nl80211-vnd-intel.h | 106 + src/meson.build | 1 + src/n-dhcp4/src/n-dhcp4-c-connection.c | 17 +- src/n-dhcp4/src/n-dhcp4-private.h | 9 - src/nm-cloud-setup/main.c | 7 +- src/nm-cloud-setup/nm-cloud-setup-utils.c | 4 +- src/nm-cloud-setup/nm-http-client.c | 15 +- src/nm-dispatcher/tests/test-dispatcher-envp.c | 7 +- src/nm-online/nm-online.c | 5 +- src/nmcli/common.c | 8 +- src/nmcli/connections.c | 337 +- src/nmcli/devices.c | 155 +- src/nmcli/general.c | 10 + src/nmcli/generate-docs-nm-settings-nmcli.xml | 8 +- src/nmcli/generate-docs-nm-settings-nmcli.xml.in | 8 +- src/nmcli/nmcli.c | 14 +- src/nmcli/utils.c | 6 +- src/nmtui/nmt-address-list.c | 15 +- src/nmtui/nmt-editor-grid.c | 2 +- src/nmtui/nmt-editor.c | 2 +- src/nmtui/nmt-mac-entry.h | 6 +- tools/generate-docs-nm-settings-docs-gir.py | 8 +- 763 files changed, 225439 insertions(+), 204719 deletions(-) delete mode 100644 INSTALL delete mode 100644 README create mode 100644 README.md create mode 100644 docs/api/html/NetworkManager-wait-online.service.html create mode 100644 man/NetworkManager-wait-online.service.8 create mode 100644 man/NetworkManager-wait-online.service.xml delete mode 100644 po/ar.po create mode 100644 po/ro.po create mode 100644 src/libnm-base/nm-base.c delete mode 100644 src/libnm-core-impl/nm-crypto-gnutls.c delete mode 100644 src/libnm-core-impl/nm-crypto-impl.h delete mode 100644 src/libnm-core-impl/nm-crypto-nss.c delete mode 100644 src/libnm-core-impl/nm-crypto.c delete mode 100644 src/libnm-core-impl/nm-crypto.h create mode 100644 src/libnm-crypto/README.md create mode 100644 src/libnm-crypto/meson.build create mode 100644 src/libnm-crypto/nm-crypto-gnutls.c create mode 100644 src/libnm-crypto/nm-crypto-impl.h create mode 100644 src/libnm-crypto/nm-crypto-nss.c create mode 100644 src/libnm-crypto/nm-crypto-null.c create mode 100644 src/libnm-crypto/nm-crypto.c create mode 100644 src/libnm-crypto/nm-crypto.h create mode 100644 src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h create mode 100644 src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c create mode 100644 src/linux-headers/nl80211-vnd-intel.h diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 8865734f..00000000 --- a/INSTALL +++ /dev/null @@ -1,368 +0,0 @@ -Installation Instructions -************************* - - Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software -Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command './configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the 'README' file for -instructions specific to this package. Some packages provide this -'INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The 'configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package. -It may also create one or more '.h' files containing system-dependent -definitions. Finally, it creates a shell script 'config.status' that -you can run in the future to recreate the current configuration, and a -file 'config.log' containing compiler output (useful mainly for -debugging 'configure'). - - It can also use an optional file (typically called 'config.cache' and -enabled with '--cache-file=config.cache' or simply '-C') that saves the -results of its tests to speed up reconfiguring. Caching is disabled by -default to prevent problems with accidental use of stale cache files. - - If you need to do unusual things to compile the package, please try -to figure out how 'configure' could check whether to do them, and mail -diffs or instructions to the address given in the 'README' so they can -be considered for the next release. If you are using the cache, and at -some point 'config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file 'configure.ac' (or 'configure.in') is used to create -'configure' by a program called 'autoconf'. You need 'configure.ac' if -you want to change it or regenerate 'configure' using a newer version of -'autoconf'. - - The simplest way to compile this package is: - - 1. 'cd' to the directory containing the package's source code and type - './configure' to configure the package for your system. - - Running 'configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type 'make' to compile the package. - - 3. Optionally, type 'make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type 'make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the 'make install' phase executed with root - privileges. - - 5. Optionally, type 'make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior 'make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing 'make clean'. To also remove the - files that 'configure' created (so you can compile the package for - a different kind of computer), type 'make distclean'. There is - also a 'make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type 'make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide 'make - distcheck', which can by used by developers to test that all other - targets like 'make install' and 'make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the 'configure' script does not know about. Run './configure --help' -for details on some of the pertinent environment variables. - - You can give 'configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here is -an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU 'make'. 'cd' to the -directory where you want the object files and executables to go and run -the 'configure' script. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. This is known -as a "VPATH" build. - - With a non-GNU 'make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use 'make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple '-arch' options to the -compiler but only a single '-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the 'lipo' tool if you have problems. - -Installation Names -================== - - By default, 'make install' installs the package's commands under -'/usr/local/bin', include files under '/usr/local/include', etc. You -can specify an installation prefix other than '/usr/local' by giving -'configure' the option '--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option '--exec-prefix=PREFIX' to 'configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like '--bindir=DIR' to specify different values for particular -kinds of files. Run 'configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the default -for these options is expressed in terms of '${prefix}', so that -specifying just '--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to 'configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -'make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, 'make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -'${prefix}'. Any directories that were specified during 'configure', -but not in terms of '${prefix}', must each be overridden at install time -for the entire installation to be relocated. The approach of makefile -variable overrides for each directory variable is required by the GNU -Coding Standards, and ideally causes no recompilation. However, some -platforms have known limitations with the semantics of shared libraries -that end up requiring recompilation when using this method, particularly -noticeable in packages that use GNU Libtool. - - The second method involves providing the 'DESTDIR' variable. For -example, 'make install DESTDIR=/alternate/directory' will prepend -'/alternate/directory' before all installation names. The approach of -'DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of '${prefix}' -at 'configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving 'configure' the -option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. - - Some packages pay attention to '--enable-FEATURE' options to -'configure', where FEATURE indicates an optional part of the package. -They may also pay attention to '--with-PACKAGE' options, where PACKAGE -is something like 'gnu-as' or 'x' (for the X Window System). The -'README' should mention any '--enable-' and '--with-' options that the -package recognizes. - - For packages that use the X Window System, 'configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the 'configure' options '--x-includes=DIR' and -'--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of 'make' will be. For these packages, running './configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with 'make V=1'; while running './configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with 'make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC -is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX 'make' updates targets which have the same time stamps as their -prerequisites, which makes it generally unusable when shipped generated -files such as 'configure' are involved. Use GNU 'make' instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its '' header file. The option '-nodtk' can be used as a -workaround. If GNU CC is not installed, it is therefore recommended to -try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put '/usr/ucb' early in your 'PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in '/usr/bin'. So, if you need '/usr/ucb' -in your 'PATH', put it _after_ '/usr/bin'. - - On Haiku, software installed for all users goes in '/boot/common', -not '/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features 'configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, 'configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -'--build=TYPE' option. TYPE can either be a short name for the system -type, such as 'sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file 'config.sub' for the possible values of each field. If -'config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option '--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with '--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for 'configure' scripts to share, -you can create a site shell script called 'config.site' that gives -default values for variables like 'CC', 'cache_file', and 'prefix'. -'configure' looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: not all 'configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to 'configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the 'configure' command line, using 'VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified 'gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an -Autoconf limitation. Until the limitation is lifted, you can use this -workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -'configure' Invocation -====================== - - 'configure' recognizes the following options to control how it -operates. - -'--help' -'-h' - Print a summary of all of the options to 'configure', and exit. - -'--help=short' -'--help=recursive' - Print a summary of the options unique to this package's - 'configure', and exit. The 'short' variant lists options used only - in the top level, while the 'recursive' variant lists options also - present in any nested packages. - -'--version' -'-V' - Print the version of Autoconf used to generate the 'configure' - script, and exit. - -'--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally 'config.cache'. FILE defaults to '/dev/null' to - disable caching. - -'--config-cache' -'-C' - Alias for '--cache-file=config.cache'. - -'--quiet' -'--silent' -'-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to '/dev/null' (any error - messages will still be shown). - -'--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - 'configure' can determine that directory automatically. - -'--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: for - more details, including other options available for fine-tuning the - installation locations. - -'--no-create' -'-n' - Run the configure checks, but stop before creating any output - files. - -'configure' also accepts some other, not widely useful, options. Run -'configure --help' for more details. diff --git a/Makefile.am b/Makefile.am index ab06c6db..60a171f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -110,11 +110,15 @@ include config-extra.h.mk DISTCLEANFILES += config-extra.h -$(src_libnm_core_public_mkenums_h): config-extra.h $(src_libnm_core_public_mkenums_c): config-extra.h +$(src_libnm_core_public_mkenums_h): config-extra.h +src/core/dhcp/.dirstamp: config-extra.h +src/libnm-base/.dirstamp: config-extra.h +src/libnm-client-public/.dirstamp: config-extra.h +src/libnm-client-public/.dirstamp: config-extra.h src/libnm-core-impl/.dirstamp: config-extra.h src/libnm-core-impl/.dirstamp: config-extra.h -src/libnm-base/.dirstamp: config-extra.h +src/libnm-crypto/.dirstamp: config-extra.h src/libnm-glib-aux/.dirstamp: config-extra.h src/libnm-glib-aux/tests/.dirstamp: config-extra.h src/libnm-log-core/.dirstamp: config-extra.h @@ -124,14 +128,11 @@ src/libnm-platform/tests/.dirstamp: config-extra.h src/libnm-platform/wifi/.dirstamp: config-extra.h src/libnm-platform/wpan/.dirstamp: config-extra.h src/libnm-std-aux/.dirstamp: config-extra.h -src/libnm-udev-aux/.dirstamp: config-extra.h src/libnm-systemd-shared/.dirstamp: config-extra.h src/libnm-systemd-shared/src/basic/.dirstamp: config-extra.h src/libnm-systemd-shared/src/fundamental/.dirstamp: config-extra.h src/libnm-systemd-shared/src/shared/.dirstamp: config-extra.h -src/libnm-client-public/.dirstamp: config-extra.h -src/libnm-client-public/.dirstamp: config-extra.h -src/core/dhcp/.dirstamp: config-extra.h +src/libnm-udev-aux/.dirstamp: config-extra.h ############################################################################### @@ -499,6 +500,7 @@ src_libnm_base_libnm_base_la_CPPFLAGS = \ $(NULL) src_libnm_base_libnm_base_la_SOURCES = \ + src/libnm-base/nm-base.c \ src/libnm-base/nm-base.h \ src/libnm-base/nm-config-base.h \ src/libnm-base/nm-ethtool-base.c \ @@ -588,6 +590,7 @@ src_libnm_platform_libnm_platform_la_SOURCES = \ \ src/linux-headers/ethtool.h \ src/linux-headers/nl802154.h \ + src/linux-headers/nl80211-vnd-intel.h \ \ src/libnm-platform/nm-linux-platform.c \ src/libnm-platform/nm-linux-platform.h \ @@ -1240,8 +1243,6 @@ src_libnm_core_public_mkenums_h = \ $(NULL) src_libnm_core_impl_lib_h_priv = \ src/libnm-core-impl/nm-connection-private.h \ - src/libnm-core-impl/nm-crypto-impl.h \ - src/libnm-core-impl/nm-crypto.h \ src/libnm-core-impl/nm-default-libnm-core.h \ src/libnm-core-impl/nm-property-compare.h \ src/libnm-core-impl/nm-setting-private.h \ @@ -1311,7 +1312,6 @@ src_libnm_core_impl_lib_c_settings_real = \ src_libnm_core_impl_lib_c_real = \ $(src_libnm_core_impl_lib_c_settings_real) \ src/libnm-core-impl/nm-connection.c \ - src/libnm-core-impl/nm-crypto.c \ src/libnm-core-impl/nm-dbus-utils.c \ src/libnm-core-impl/nm-errors.c \ src/libnm-core-impl/nm-keyfile-utils.c \ @@ -1412,8 +1412,6 @@ src_libnm_core_impl_libnm_core_impl_la_LDFLAGS = \ $(NULL) EXTRA_DIST += \ - src/libnm-core-impl/nm-crypto-gnutls.c \ - src/libnm-core-impl/nm-crypto-nss.c \ src/libnm-core-impl/meson.build \ $(NULL) @@ -1435,44 +1433,93 @@ dist_dependencies += \ ############################################################################### +noinst_LTLIBRARIES += src/libnm-crypto/libnm-crypto.la + +src_libnm_crypto_libnm_crypto_la_SOURCES = \ + src/libnm-crypto/nm-crypto-impl.h \ + src/libnm-crypto/nm-crypto.c \ + src/libnm-crypto/nm-crypto.h \ + $(NULL) + +src_libnm_crypto_libnm_crypto_la_CPPFLAGS = \ + $(dflt_cppflags_libnm_core) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + if HAVE_CRYPTO_GNUTLS if WITH_GNUTLS -libnm_crypto_lib = src/libnm-core-impl/libnm-crypto-gnutls.la +libnm_crypto_lib = src/libnm-crypto/libnm-crypto-gnutls.la else -check_ltlibraries += src/libnm-core-impl/libnm-crypto-gnutls.la +check_ltlibraries += src/libnm-crypto/libnm-crypto-gnutls.la endif -src_libnm_core_impl_libnm_crypto_gnutls_la_SOURCES = src/libnm-core-impl/nm-crypto-gnutls.c -src_libnm_core_impl_libnm_crypto_gnutls_la_CPPFLAGS = \ +src_libnm_crypto_libnm_crypto_gnutls_la_SOURCES = src/libnm-crypto/nm-crypto-gnutls.c +src_libnm_crypto_libnm_crypto_gnutls_la_CPPFLAGS = \ $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ $(GNUTLS_CFLAGS) -src_libnm_core_impl_libnm_crypto_gnutls_la_LDFLAGS = \ +src_libnm_crypto_libnm_crypto_gnutls_la_LDFLAGS = \ $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) -src_libnm_core_impl_libnm_crypto_gnutls_la_LIBADD = \ +src_libnm_crypto_libnm_crypto_gnutls_la_LIBADD = \ $(GLIB_LIBS) \ $(GNUTLS_LIBS) endif if HAVE_CRYPTO_NSS if WITH_NSS -libnm_crypto_lib = src/libnm-core-impl/libnm-crypto-nss.la +libnm_crypto_lib = src/libnm-crypto/libnm-crypto-nss.la else -check_ltlibraries += src/libnm-core-impl/libnm-crypto-nss.la +check_ltlibraries += src/libnm-crypto/libnm-crypto-nss.la endif -src_libnm_core_impl_libnm_crypto_nss_la_SOURCES = src/libnm-core-impl/nm-crypto-nss.c -src_libnm_core_impl_libnm_crypto_nss_la_CPPFLAGS = \ +src_libnm_crypto_libnm_crypto_nss_la_SOURCES = src/libnm-crypto/nm-crypto-nss.c +src_libnm_crypto_libnm_crypto_nss_la_CPPFLAGS = \ $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ $(NSS_CFLAGS) -src_libnm_core_impl_libnm_crypto_nss_la_LDFLAGS = \ +src_libnm_crypto_libnm_crypto_nss_la_LDFLAGS = \ $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) -src_libnm_core_impl_libnm_crypto_nss_la_LIBADD = \ +src_libnm_crypto_libnm_crypto_nss_la_LIBADD = \ $(GLIB_LIBS) \ $(NSS_LIBS) endif +if !WITH_GNUTLS +if !WITH_NSS +libnm_crypto_lib = src/libnm-crypto/libnm-crypto-null.la +else +check_ltlibraries += src/libnm-crypto/libnm-crypto-null.la +endif +else +check_ltlibraries += src/libnm-crypto/libnm-crypto-null.la +endif + +src_libnm_crypto_libnm_crypto_null_la_SOURCES = src/libnm-crypto/nm-crypto-null.c +src_libnm_crypto_libnm_crypto_null_la_CPPFLAGS = \ + $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ + $(NULL) +src_libnm_crypto_libnm_crypto_null_la_LDFLAGS = \ + $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) \ + $(NULL) +src_libnm_crypto_libnm_crypto_null_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + noinst_LTLIBRARIES += $(libnm_crypto_lib) +EXTRA_DIST += \ + src/libnm-crypto/README.md \ + src/libnm-crypto/meson.build \ + src/libnm-crypto/nm-crypto-gnutls.c \ + src/libnm-crypto/nm-crypto-nss.c \ + $(NULL) + ############################################################################### check_programs += \ @@ -1526,6 +1573,7 @@ nodist_src_libnm_core_impl_tests_test_general_SOURCES = \ src_libnm_core_impl_tests_ldadd = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ @@ -1759,6 +1807,7 @@ nodist_src_libnm_client_impl_libnm_client_impl_la_SOURCES = \ src_libnm_client_impl_libnm_client_impl_la_LIBADD = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ @@ -1849,7 +1898,7 @@ src_libnm_client_impl_NM_1_0_gir_INCLUDES = Gio-2.0 src_libnm_client_impl_NM_1_0_gir_PACKAGES = gio-2.0 src_libnm_client_impl_NM_1_0_gir_EXPORT_PACKAGES = libnm src_libnm_client_impl_NM_1_0_gir_CFLAGS = \ - $(src_libnm_client_impl_libnm_la_CPPFLAGS) \ + $(filter-out -DGLIB_VERSION_%, $(src_libnm_client_impl_libnm_la_CPPFLAGS)) \ -DNETWORKMANAGER_COMPILATION \ $(NULL) src_libnm_client_impl_NM_1_0_gir_LIBS = src/libnm-client-impl/libnm.la @@ -2310,6 +2359,8 @@ src_libnm_systemd_core_libnm_systemd_core_la_SOURCES = \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c \ + src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h \ + src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h \ src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c \ src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.h \ @@ -2607,6 +2658,7 @@ src_core_libNetworkManager_la_LIBADD = \ src/core/libNetworkManagerBase.la \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ @@ -2752,6 +2804,7 @@ src_nm_initrd_generator_nm_initrd_generator_CPPFLAGS = \ src_nm_initrd_generator_nm_initrd_generator_LDADD = \ src/nm-initrd-generator/libnmi-core.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ @@ -5416,11 +5469,12 @@ CLEANFILES += $(man_nm_settings_xml) endif man_pages += \ - man/NetworkManager.8 \ man/NetworkManager-dispatcher.8 \ + man/NetworkManager-wait-online.service.8 \ + man/NetworkManager.8 \ man/NetworkManager.conf.5 \ - man/nm-online.1 \ man/nm-initrd-generator.8 \ + man/nm-online.1 \ man/nmcli-examples.7 \ man/nmcli.1 \ man/nmtui.1 \ @@ -5558,6 +5612,13 @@ plugin_LTLIBRARIES += $(core_plugins) TESTS += $(check_programs) EXTRA_DIST += \ + \ + AUTHORS \ + COPYING \ + ChangeLog \ + NEWS \ + README.md \ + \ CONTRIBUTING.md \ COPYING.LGPL \ COPYING.GFDL \ @@ -5620,12 +5681,6 @@ CLEANFILES += \ include Makefile.examples -if WITH_PYTHON_BLACK -check-python-black: - test "$$NMTST_SKIP_PYTHON_BLACK" == 1 || $(BLACK) --check $(top_srcdir) $(top_srcdir)/examples/python/gi/nm-wg-set -check_local += check-python-black -endif - ############################################################################### check-tree: diff --git a/Makefile.in b/Makefile.in index e9877b88..a632018a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -166,94 +166,96 @@ TESTS = $(am__EXEEXT_11) ############################################################################### @WITH_JANSSON_TRUE@am__append_6 = src/libnm-glib-aux/tests/test-json-aux -@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am__append_7 = src/libnm-core-impl/libnm-crypto-gnutls.la -@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am__append_8 = src/libnm-core-impl/libnm-crypto-nss.la -@HAVE_INTROSPECTION_TRUE@am__append_9 = src/libnm-client-impl/NM-1.0.typelib -@HAVE_INTROSPECTION_TRUE@am__append_10 = src/libnm-client-impl/NM-1.0.gir -@HAVE_INTROSPECTION_TRUE@am__append_11 = $(libnm_noinst_data) -@HAVE_INTROSPECTION_TRUE@am__append_12 = src/nmcli/generate-docs-nm-settings-nmcli.xml.in \ +@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am__append_7 = src/libnm-crypto/libnm-crypto-gnutls.la +@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am__append_8 = src/libnm-crypto/libnm-crypto-nss.la +@WITH_GNUTLS_FALSE@@WITH_NSS_TRUE@am__append_9 = src/libnm-crypto/libnm-crypto-null.la +@WITH_GNUTLS_TRUE@am__append_10 = src/libnm-crypto/libnm-crypto-null.la +@HAVE_INTROSPECTION_TRUE@am__append_11 = src/libnm-client-impl/NM-1.0.typelib +@HAVE_INTROSPECTION_TRUE@am__append_12 = src/libnm-client-impl/NM-1.0.gir +@HAVE_INTROSPECTION_TRUE@am__append_13 = $(libnm_noinst_data) +@HAVE_INTROSPECTION_TRUE@am__append_14 = src/nmcli/generate-docs-nm-settings-nmcli.xml.in \ @HAVE_INTROSPECTION_TRUE@ $(libnm_noinst_data) -@BUILD_DOCS_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_13 = check-local-generate-docs-nm-settings-nmcli -@BUILD_DOCS_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_14 = src/nmcli/generate-docs-nm-settings-nmcli.xml -@HAVE_INTROSPECTION_TRUE@am__append_15 = $(libnm_noinst_data) -@HAVE_INTROSPECTION_TRUE@am__append_16 = $(src_libnm_client_impl_tests_programs_req_introspection) -@HAVE_INTROSPECTION_FALSE@am__append_17 = $(src_libnm_client_impl_tests_programs_req_introspection) -@REQUIRE_ROOT_TESTS_TRUE@am__append_18 = -DREQUIRE_ROOT_TESTS=1 +@BUILD_DOCS_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_15 = check-local-generate-docs-nm-settings-nmcli +@BUILD_DOCS_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_16 = src/nmcli/generate-docs-nm-settings-nmcli.xml +@HAVE_INTROSPECTION_TRUE@am__append_17 = $(libnm_noinst_data) +@HAVE_INTROSPECTION_TRUE@am__append_18 = $(src_libnm_client_impl_tests_programs_req_introspection) +@HAVE_INTROSPECTION_FALSE@am__append_19 = $(src_libnm_client_impl_tests_programs_req_introspection) +@REQUIRE_ROOT_TESTS_TRUE@am__append_20 = -DREQUIRE_ROOT_TESTS=1 ############################################################################### # src/core/ppp ############################################################################### -@WITH_PPP_TRUE@am__append_19 = src/core/ppp/libnm-ppp-plugin.la -@WITH_PPP_TRUE@am__append_20 = src/core/ppp/nm-pppd-plugin.la +@WITH_PPP_TRUE@am__append_21 = src/core/ppp/libnm-ppp-plugin.la +@WITH_PPP_TRUE@am__append_22 = src/core/ppp/nm-pppd-plugin.la ############################################################################### # src/core/settings/plugins/ifcfg-rh ############################################################################### -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_21 = src/core/settings/plugins/ifcfg-rh/libnm-settings-plugin-ifcfg-rh.la -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_22 = \ +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_23 = src/core/settings/plugins/ifcfg-rh/libnm-settings-plugin-ifcfg-rh.la +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_24 = \ @CONFIG_PLUGIN_IFCFG_RH_TRUE@ src/core/settings/plugins/ifcfg-rh/libnmdbus-ifcfg-rh.la \ @CONFIG_PLUGIN_IFCFG_RH_TRUE@ src/core/settings/plugins/ifcfg-rh/libnms-ifcfg-rh-core.la -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_23 = $(nodist_src_core_settings_plugins_ifcfg_rh_libnmdbus_ifcfg_rh_la_SOURCES) -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_24 = check-local-symbols-settings-ifcfg-rh +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_25 = $(nodist_src_core_settings_plugins_ifcfg_rh_libnmdbus_ifcfg_rh_la_SOURCES) +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_26 = check-local-symbols-settings-ifcfg-rh ############################################################################### # src/core/settings/plugins/ifcfg-rh/tests ############################################################################### -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_25 = src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_26 = \ +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_27 = src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_28 = \ @CONFIG_PLUGIN_IFCFG_RH_TRUE@ src/core/settings/plugins/ifcfg-rh/nm-ifup \ @CONFIG_PLUGIN_IFCFG_RH_TRUE@ src/core/settings/plugins/ifcfg-rh/nm-ifdown -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_27 = install-data-hook-ifcfg-rh +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_29 = install-data-hook-ifcfg-rh ############################################################################### -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_28 = src/core/settings/plugins/ifcfg-rh/nm-ifcfg-rh.conf +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_30 = src/core/settings/plugins/ifcfg-rh/nm-ifcfg-rh.conf ############################################################################### # src/core/settings/plugins/ifupdown ############################################################################### -@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_29 = src/core/settings/plugins/ifupdown/libnm-settings-plugin-ifupdown.la -@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_30 = src/core/settings/plugins/ifupdown/libnms-ifupdown-core.la -@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_31 = check-local-symbols-settings-ifupdown +@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_31 = src/core/settings/plugins/ifupdown/libnm-settings-plugin-ifupdown.la +@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_32 = src/core/settings/plugins/ifupdown/libnms-ifupdown-core.la +@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_33 = check-local-symbols-settings-ifupdown ############################################################################### -@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_32 = src/core/settings/plugins/ifupdown/tests/test-ifupdown +@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_34 = src/core/settings/plugins/ifupdown/tests/test-ifupdown ############################################################################### -@WITH_MODEM_MANAGER_1_TRUE@am__append_33 = src/core/devices/wwan/libnm-wwan.la \ +@WITH_MODEM_MANAGER_1_TRUE@am__append_35 = src/core/devices/wwan/libnm-wwan.la \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/wwan/libnm-device-plugin-wwan.la \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/libnm-device-plugin-bluetooth.la -@WITH_MODEM_MANAGER_1_TRUE@@WITH_OFONO_TRUE@am__append_34 = \ +@WITH_MODEM_MANAGER_1_TRUE@@WITH_OFONO_TRUE@am__append_36 = \ @WITH_MODEM_MANAGER_1_TRUE@@WITH_OFONO_TRUE@ src/core/devices/wwan/nm-modem-ofono.c \ @WITH_MODEM_MANAGER_1_TRUE@@WITH_OFONO_TRUE@ src/core/devices/wwan/nm-modem-ofono.h -@WITH_MODEM_MANAGER_1_TRUE@am__append_35 = check-local-devices-wwan \ +@WITH_MODEM_MANAGER_1_TRUE@am__append_37 = check-local-devices-wwan \ @WITH_MODEM_MANAGER_1_TRUE@ check-local-devices-bluetooth -@WITH_MODEM_MANAGER_1_TRUE@am__append_36 = src/core/devices/wwan/tests/test-service-providers +@WITH_MODEM_MANAGER_1_TRUE@am__append_38 = src/core/devices/wwan/tests/test-service-providers ############################################################################### # src/core/devices/bluetooth ############################################################################### -@WITH_MODEM_MANAGER_1_TRUE@am__append_37 = src/core/devices/bluetooth/libnm-bluetooth-utils.la -@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_38 = \ +@WITH_MODEM_MANAGER_1_TRUE@am__append_39 = src/core/devices/bluetooth/libnm-bluetooth-utils.la +@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_40 = \ @WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bluez5-dun.c \ @WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bluez5-dun.h \ @WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@ $(NULL) -@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_39 = $(BLUEZ5_CFLAGS) -@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_40 = $(BLUEZ5_LIBS) +@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_41 = $(BLUEZ5_CFLAGS) +@WITH_BLUEZ5_DUN_TRUE@@WITH_MODEM_MANAGER_1_TRUE@am__append_42 = $(BLUEZ5_LIBS) ############################################################################### -@WITH_MODEM_MANAGER_1_TRUE@am__append_41 = \ +@WITH_MODEM_MANAGER_1_TRUE@am__append_43 = \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/tests/nm-bt-test ############################################################################### # src/core/devices/wifi ############################################################################### -@WITH_WIFI_TRUE@am__append_42 = src/core/devices/wifi/libnm-wifi-base.la -@WITH_IWD_TRUE@@WITH_WIFI_TRUE@am__append_43 = \ +@WITH_WIFI_TRUE@am__append_44 = src/core/devices/wifi/libnm-wifi-base.la +@WITH_IWD_TRUE@@WITH_WIFI_TRUE@am__append_45 = \ @WITH_IWD_TRUE@@WITH_WIFI_TRUE@ src/core/devices/wifi/nm-device-iwd.c \ @WITH_IWD_TRUE@@WITH_WIFI_TRUE@ src/core/devices/wifi/nm-device-iwd.h \ @WITH_IWD_TRUE@@WITH_WIFI_TRUE@ src/core/devices/wifi/nm-device-iwd-p2p.c \ @@ -262,52 +264,52 @@ TESTS = $(am__EXEEXT_11) @WITH_IWD_TRUE@@WITH_WIFI_TRUE@ src/core/devices/wifi/nm-iwd-manager.h \ @WITH_IWD_TRUE@@WITH_WIFI_TRUE@ $(NULL) -@WITH_WIFI_TRUE@am__append_44 = src/core/devices/wifi/libnm-device-plugin-wifi.la -@WITH_WIFI_TRUE@am__append_45 = check-local-devices-wifi -@WITH_WIFI_TRUE@am__append_46 = src/core/devices/wifi/tests/test-devices-wifi +@WITH_WIFI_TRUE@am__append_46 = src/core/devices/wifi/libnm-device-plugin-wifi.la +@WITH_WIFI_TRUE@am__append_47 = check-local-devices-wifi +@WITH_WIFI_TRUE@am__append_48 = src/core/devices/wifi/tests/test-devices-wifi ############################################################################### # src/core/devices/team ############################################################################### -@WITH_TEAMDCTL_TRUE@am__append_47 = src/core/devices/team/libnm-device-plugin-team.la -@WITH_TEAMDCTL_TRUE@am__append_48 = check-local-devices-team -@WITH_OPENVSWITCH_TRUE@am__append_49 = src/core/devices/ovs/libnm-device-plugin-ovs.la -@WITH_OPENVSWITCH_TRUE@am__append_50 = check-local-devices-ovs -@BUILD_DOCS_TRUE@am__append_51 = $(libnmc_setting_settings_doc_h) -@BUILD_DOCS_TRUE@am__append_52 = check-local-settings-docs +@WITH_TEAMDCTL_TRUE@am__append_49 = src/core/devices/team/libnm-device-plugin-team.la +@WITH_TEAMDCTL_TRUE@am__append_50 = check-local-devices-team +@WITH_OPENVSWITCH_TRUE@am__append_51 = src/core/devices/ovs/libnm-device-plugin-ovs.la +@WITH_OPENVSWITCH_TRUE@am__append_52 = check-local-devices-ovs +@BUILD_DOCS_TRUE@am__append_53 = $(libnmc_setting_settings_doc_h) +@BUILD_DOCS_TRUE@am__append_54 = check-local-settings-docs ############################################################################### # src/nmcli ############################################################################### -@BUILD_NMCLI_TRUE@am__append_53 = src/nmcli/nmcli -@BUILD_NMCLI_TRUE@am__append_54 = install-data-hook-nmcli -@BUILD_NMCLI_TRUE@am__append_55 = uninstall-hook-nmcli +@BUILD_NMCLI_TRUE@am__append_55 = src/nmcli/nmcli +@BUILD_NMCLI_TRUE@am__append_56 = install-data-hook-nmcli +@BUILD_NMCLI_TRUE@am__append_57 = uninstall-hook-nmcli ############################################################################### # src/libnmt-newt ############################################################################### -@BUILD_NMTUI_TRUE@am__append_56 = src/libnmt-newt/libnmt-newt.a +@BUILD_NMTUI_TRUE@am__append_58 = src/libnmt-newt/libnmt-newt.a ############################################################################### # src/nmtui ############################################################################### -@BUILD_NMTUI_TRUE@am__append_57 = src/nmtui/nmtui -@BUILD_NMTUI_TRUE@am__append_58 = install-exec-hook-nmtui -@BUILD_NMTUI_TRUE@am__append_59 = uninstall-hook-nmtui +@BUILD_NMTUI_TRUE@am__append_59 = src/nmtui/nmtui +@BUILD_NMTUI_TRUE@am__append_60 = install-exec-hook-nmtui +@BUILD_NMTUI_TRUE@am__append_61 = uninstall-hook-nmtui ############################################################################### # src/nm-cloud-setup ############################################################################### -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_60 = src/nm-cloud-setup/libnm-cloud-setup-core.a -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_61 = src/nm-cloud-setup/nm-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_62 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_62 = src/nm-cloud-setup/libnm-cloud-setup-core.a +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_63 = src/nm-cloud-setup/nm-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_64 = \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ src/nm-cloud-setup/nm-cloud-setup.service \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ src/nm-cloud-setup/nm-cloud-setup.timer \ @BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@ $(NULL) -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_63 = install-data-hook-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_64 = uninstall-hook-cloud-setup -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_65 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_65 = install-data-hook-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@@HAVE_SYSTEMD_TRUE@am__append_66 = uninstall-hook-cloud-setup +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_67 = \ @BUILD_NM_CLOUD_SETUP_TRUE@ src/nm-cloud-setup/90-nm-cloud-setup.sh \ @BUILD_NM_CLOUD_SETUP_TRUE@ src/nm-cloud-setup/meson.build \ @BUILD_NM_CLOUD_SETUP_TRUE@ src/nm-cloud-setup/nm-cloud-setup.service.in \ @@ -315,63 +317,62 @@ TESTS = $(am__EXEEXT_11) @BUILD_NM_CLOUD_SETUP_TRUE@ src/nm-cloud-setup/tests/meson.build \ @BUILD_NM_CLOUD_SETUP_TRUE@ $(NULL) -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_66 = \ +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_68 = \ @BUILD_NM_CLOUD_SETUP_TRUE@ src/nm-cloud-setup/nm-cloud-setup.service -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_67 = src/nm-cloud-setup/tests/test-cloud-setup-general +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_69 = src/nm-cloud-setup/tests/test-cloud-setup-general ############################################################################### # data ############################################################################### -@HAVE_SYSTEMD_TRUE@am__append_68 = \ +@HAVE_SYSTEMD_TRUE@am__append_70 = \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager.service \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager-wait-online.service \ @HAVE_SYSTEMD_TRUE@ data/NetworkManager-dispatcher.service \ @HAVE_SYSTEMD_TRUE@ data/nm-priv-helper.service \ @HAVE_SYSTEMD_TRUE@ $(NULL) -@HAVE_INTROSPECTION_TRUE@am__append_69 = $(man_nm_settings_xml) -@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_70 = man/nm-settings-ifcfg-rh.5 -@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_71 = man/nm-settings-ifcfg-rh.5 -@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_72 = man/nm-settings-ifcfg-rh.5 -@WITH_OPENVSWITCH_TRUE@am__append_73 = man/nm-openvswitch.7 -@WITH_OPENVSWITCH_FALSE@am__append_74 = man/nm-openvswitch.7 -@WITH_OPENVSWITCH_FALSE@am__append_75 = man/nm-openvswitch.7 -@BUILD_NM_CLOUD_SETUP_TRUE@am__append_76 = man/nm-cloud-setup.8 -@BUILD_NM_CLOUD_SETUP_FALSE@am__append_77 = man/nm-cloud-setup.8 -@BUILD_NM_CLOUD_SETUP_FALSE@am__append_78 = man/nm-cloud-setup.8 -@HAVE_DOCS_TRUE@am__append_79 = install-data-hook-man -@HAVE_DOCS_TRUE@am__append_80 = uninstall-hook-man -@HAVE_DOCS_TRUE@am__append_81 = $(man_pages) $(man_pages_autogen) -@BUILD_DOCS_TRUE@am__append_82 = $(man_pages) $(man_pages_autogen) +@HAVE_INTROSPECTION_TRUE@am__append_71 = $(man_nm_settings_xml) +@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_72 = man/nm-settings-ifcfg-rh.5 +@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_73 = man/nm-settings-ifcfg-rh.5 +@CONFIG_PLUGIN_IFCFG_RH_FALSE@am__append_74 = man/nm-settings-ifcfg-rh.5 +@WITH_OPENVSWITCH_TRUE@am__append_75 = man/nm-openvswitch.7 +@WITH_OPENVSWITCH_FALSE@am__append_76 = man/nm-openvswitch.7 +@WITH_OPENVSWITCH_FALSE@am__append_77 = man/nm-openvswitch.7 +@BUILD_NM_CLOUD_SETUP_TRUE@am__append_78 = man/nm-cloud-setup.8 +@BUILD_NM_CLOUD_SETUP_FALSE@am__append_79 = man/nm-cloud-setup.8 +@BUILD_NM_CLOUD_SETUP_FALSE@am__append_80 = man/nm-cloud-setup.8 +@HAVE_DOCS_TRUE@am__append_81 = install-data-hook-man +@HAVE_DOCS_TRUE@am__append_82 = uninstall-hook-man +@HAVE_DOCS_TRUE@am__append_83 = $(man_pages) $(man_pages_autogen) +@BUILD_DOCS_TRUE@am__append_84 = $(man_pages) $(man_pages_autogen) ############################################################################### # vapi ############################################################################### -@ENABLE_VAPIGEN_TRUE@am__append_83 = \ +@ENABLE_VAPIGEN_TRUE@am__append_85 = \ @ENABLE_VAPIGEN_TRUE@ vapi/libnm.vapi -@ENABLE_VAPIGEN_TRUE@am__append_84 = \ +@ENABLE_VAPIGEN_TRUE@am__append_86 = \ @ENABLE_VAPIGEN_TRUE@ $(VAPIGEN_VAPIS) \ @ENABLE_VAPIGEN_TRUE@ $(VAPIGEN_VAPIS:.vapi=.deps) -@ENABLE_VAPIGEN_TRUE@am__append_85 = $(VAPIGEN_VAPIS) +@ENABLE_VAPIGEN_TRUE@am__append_87 = $(VAPIGEN_VAPIS) ############################################################################### -@ENABLE_TESTS_TRUE@am__append_86 = $(check_programs) $(check_programs_norun) -@ENABLE_TESTS_TRUE@am__append_87 = $(check_ltlibraries) -@ENABLE_TESTS_FALSE@am__append_88 = $(check_programs) $(check_programs_norun) -@ENABLE_TESTS_FALSE@am__append_89 = $(check_ltlibraries) -@WITH_QT_TRUE@am__append_90 = \ +@ENABLE_TESTS_TRUE@am__append_88 = $(check_programs) $(check_programs_norun) +@ENABLE_TESTS_TRUE@am__append_89 = $(check_ltlibraries) +@ENABLE_TESTS_FALSE@am__append_90 = $(check_programs) $(check_programs_norun) +@ENABLE_TESTS_FALSE@am__append_91 = $(check_ltlibraries) +@WITH_QT_TRUE@am__append_92 = \ @WITH_QT_TRUE@ examples/C/qt/add-connection-wired \ @WITH_QT_TRUE@ examples/C/qt/list-connections \ @WITH_QT_TRUE@ examples/C/qt/change-ipv4-addresses \ @WITH_QT_TRUE@ examples/C/qt/monitor-nm-running -@WITH_QT_TRUE@am__append_91 = \ +@WITH_QT_TRUE@am__append_93 = \ @WITH_QT_TRUE@ examples/C/qt/monitor-nm-running.moc -@WITH_PYTHON_BLACK_TRUE@am__append_92 = check-python-black subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/attributes.m4 \ @@ -896,7 +897,8 @@ src_core_devices_wwan_libnm_wwan_la_LINK = $(LIBTOOL) $(AM_V_lt) \ src_core_libNetworkManager_la_DEPENDENCIES = \ src/core/libNetworkManagerBase.la \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ src/libnm-base/libnm-base.la \ @@ -1124,6 +1126,7 @@ src_core_settings_plugins_ifupdown_libnms_ifupdown_core_la_OBJECTS = $(am_src_co @CONFIG_PLUGIN_IFUPDOWN_TRUE@am_src_core_settings_plugins_ifupdown_libnms_ifupdown_core_la_rpath = src_libnm_base_libnm_base_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_src_libnm_base_libnm_base_la_OBJECTS = \ + src/libnm-base/libnm_base_la-nm-base.lo \ src/libnm-base/libnm_base_la-nm-ethtool-base.lo \ src/libnm-base/libnm_base_la-nm-net-aux.lo \ src/libnm-base/libnm_base_la-nm-priv-helper-utils.lo @@ -1144,7 +1147,8 @@ src_libnm_client_aux_extern_libnm_client_aux_extern_la_LINK = \ $(LDFLAGS) -o $@ src_libnm_client_impl_libnm_client_impl_la_DEPENDENCIES = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la introspection/libnmdbus.la \ src/libnm-glib-aux/libnm-glib-aux.la \ @@ -1313,7 +1317,6 @@ am__objects_8 = \ src/libnm-core-impl/libnm_core_impl_la-nm-setting-wpan.lo am__objects_9 = $(am__objects_8) \ src/libnm-core-impl/libnm_core_impl_la-nm-connection.lo \ - src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo \ src/libnm-core-impl/libnm_core_impl_la-nm-dbus-utils.lo \ src/libnm-core-impl/libnm_core_impl_la-nm-errors.lo \ src/libnm-core-impl/libnm_core_impl_la-nm-keyfile-utils.lo \ @@ -1339,38 +1342,63 @@ src_libnm_core_impl_libnm_core_impl_la_LINK = $(LIBTOOL) $(AM_V_lt) \ $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) $(LDFLAGS) \ -o $@ -@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_core_impl_libnm_crypto_gnutls_la_DEPENDENCIES = \ +@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_crypto_libnm_crypto_gnutls_la_DEPENDENCIES = \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(am__DEPENDENCIES_1) \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(am__DEPENDENCIES_1) -am__src_libnm_core_impl_libnm_crypto_gnutls_la_SOURCES_DIST = \ - src/libnm-core-impl/nm-crypto-gnutls.c -@HAVE_CRYPTO_GNUTLS_TRUE@am_src_libnm_core_impl_libnm_crypto_gnutls_la_OBJECTS = src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo -src_libnm_core_impl_libnm_crypto_gnutls_la_OBJECTS = \ - $(am_src_libnm_core_impl_libnm_crypto_gnutls_la_OBJECTS) -src_libnm_core_impl_libnm_crypto_gnutls_la_LINK = $(LIBTOOL) \ - $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(src_libnm_core_impl_libnm_crypto_gnutls_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -@ENABLE_TESTS_FALSE@@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am_src_libnm_core_impl_libnm_crypto_gnutls_la_rpath = -@ENABLE_TESTS_TRUE@@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am_src_libnm_core_impl_libnm_crypto_gnutls_la_rpath = -@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_TRUE@am_src_libnm_core_impl_libnm_crypto_gnutls_la_rpath = -@HAVE_CRYPTO_NSS_TRUE@src_libnm_core_impl_libnm_crypto_nss_la_DEPENDENCIES = \ +am__src_libnm_crypto_libnm_crypto_gnutls_la_SOURCES_DIST = \ + src/libnm-crypto/nm-crypto-gnutls.c +@HAVE_CRYPTO_GNUTLS_TRUE@am_src_libnm_crypto_libnm_crypto_gnutls_la_OBJECTS = src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo +src_libnm_crypto_libnm_crypto_gnutls_la_OBJECTS = \ + $(am_src_libnm_crypto_libnm_crypto_gnutls_la_OBJECTS) +src_libnm_crypto_libnm_crypto_gnutls_la_LINK = $(LIBTOOL) $(AM_V_lt) \ + --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(src_libnm_crypto_libnm_crypto_gnutls_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +@ENABLE_TESTS_FALSE@@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am_src_libnm_crypto_libnm_crypto_gnutls_la_rpath = +@ENABLE_TESTS_TRUE@@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_FALSE@am_src_libnm_crypto_libnm_crypto_gnutls_la_rpath = +@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_TRUE@am_src_libnm_crypto_libnm_crypto_gnutls_la_rpath = +@HAVE_CRYPTO_NSS_TRUE@src_libnm_crypto_libnm_crypto_nss_la_DEPENDENCIES = \ @HAVE_CRYPTO_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @HAVE_CRYPTO_NSS_TRUE@ $(am__DEPENDENCIES_1) -am__src_libnm_core_impl_libnm_crypto_nss_la_SOURCES_DIST = \ - src/libnm-core-impl/nm-crypto-nss.c -@HAVE_CRYPTO_NSS_TRUE@am_src_libnm_core_impl_libnm_crypto_nss_la_OBJECTS = src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo -src_libnm_core_impl_libnm_crypto_nss_la_OBJECTS = \ - $(am_src_libnm_core_impl_libnm_crypto_nss_la_OBJECTS) -src_libnm_core_impl_libnm_crypto_nss_la_LINK = $(LIBTOOL) $(AM_V_lt) \ +am__src_libnm_crypto_libnm_crypto_nss_la_SOURCES_DIST = \ + src/libnm-crypto/nm-crypto-nss.c +@HAVE_CRYPTO_NSS_TRUE@am_src_libnm_crypto_libnm_crypto_nss_la_OBJECTS = src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo +src_libnm_crypto_libnm_crypto_nss_la_OBJECTS = \ + $(am_src_libnm_crypto_libnm_crypto_nss_la_OBJECTS) +src_libnm_crypto_libnm_crypto_nss_la_LINK = $(LIBTOOL) $(AM_V_lt) \ --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(src_libnm_core_impl_libnm_crypto_nss_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -@ENABLE_TESTS_FALSE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_src_libnm_core_impl_libnm_crypto_nss_la_rpath = -@ENABLE_TESTS_TRUE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_src_libnm_core_impl_libnm_crypto_nss_la_rpath = -@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_TRUE@am_src_libnm_core_impl_libnm_crypto_nss_la_rpath = + $(src_libnm_crypto_libnm_crypto_nss_la_LDFLAGS) $(LDFLAGS) -o \ + $@ +@ENABLE_TESTS_FALSE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_src_libnm_crypto_libnm_crypto_nss_la_rpath = +@ENABLE_TESTS_TRUE@@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_FALSE@am_src_libnm_crypto_libnm_crypto_nss_la_rpath = +@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_TRUE@am_src_libnm_crypto_libnm_crypto_nss_la_rpath = +src_libnm_crypto_libnm_crypto_null_la_DEPENDENCIES = \ + $(am__DEPENDENCIES_1) +am_src_libnm_crypto_libnm_crypto_null_la_OBJECTS = \ + src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo +src_libnm_crypto_libnm_crypto_null_la_OBJECTS = \ + $(am_src_libnm_crypto_libnm_crypto_null_la_OBJECTS) +src_libnm_crypto_libnm_crypto_null_la_LINK = $(LIBTOOL) $(AM_V_lt) \ + --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(src_libnm_crypto_libnm_crypto_null_la_LDFLAGS) $(LDFLAGS) -o \ + $@ +@ENABLE_TESTS_FALSE@@WITH_GNUTLS_FALSE@@WITH_NSS_TRUE@am_src_libnm_crypto_libnm_crypto_null_la_rpath = +@ENABLE_TESTS_FALSE@@WITH_GNUTLS_TRUE@am_src_libnm_crypto_libnm_crypto_null_la_rpath = +@ENABLE_TESTS_TRUE@@WITH_GNUTLS_FALSE@@WITH_NSS_TRUE@am_src_libnm_crypto_libnm_crypto_null_la_rpath = +@ENABLE_TESTS_TRUE@@WITH_GNUTLS_TRUE@am_src_libnm_crypto_libnm_crypto_null_la_rpath = +@WITH_GNUTLS_FALSE@@WITH_NSS_FALSE@am_src_libnm_crypto_libnm_crypto_null_la_rpath = +src_libnm_crypto_libnm_crypto_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_src_libnm_crypto_libnm_crypto_la_OBJECTS = \ + src/libnm-crypto/libnm_crypto_la-nm-crypto.lo +src_libnm_crypto_libnm_crypto_la_OBJECTS = \ + $(am_src_libnm_crypto_libnm_crypto_la_OBJECTS) +src_libnm_crypto_libnm_crypto_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) \ + $(src_libnm_crypto_libnm_crypto_la_LDFLAGS) $(LDFLAGS) -o $@ src_libnm_glib_aux_libnm_glib_aux_la_DEPENDENCIES = \ $(am__DEPENDENCIES_1) am_src_libnm_glib_aux_libnm_glib_aux_la_OBJECTS = \ @@ -1417,6 +1445,7 @@ src_libnm_platform_libnm_platform_la_DEPENDENCIES = \ $(am__DEPENDENCIES_1) am__src_libnm_platform_libnm_platform_la_SOURCES_DIST = \ src/linux-headers/ethtool.h src/linux-headers/nl802154.h \ + src/linux-headers/nl80211-vnd-intel.h \ src/libnm-platform/nm-linux-platform.c \ src/libnm-platform/nm-linux-platform.h \ src/libnm-platform/nm-netlink.c \ @@ -1483,6 +1512,7 @@ am_src_libnm_systemd_core_libnm_systemd_core_la_OBJECTS = src/libnm-systemd-core src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp-packet.lo \ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-network.lo \ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-option.lo \ + src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo \ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-neighbor.lo \ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-network.lo \ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-network-common.lo \ @@ -2137,7 +2167,8 @@ src_libnm_core_impl_tests_test_compare_OBJECTS = \ src/libnm-core-impl/tests/test_compare-test-compare.$(OBJEXT) am__DEPENDENCIES_6 = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ src/libnm-systemd-shared/libnm-systemd-shared.la \ @@ -2373,7 +2404,8 @@ src_nm_initrd_generator_nm_initrd_generator_SOURCES = \ src_nm_initrd_generator_nm_initrd_generator_OBJECTS = src/nm-initrd-generator/nm_initrd_generator-nm-initrd-generator.$(OBJEXT) src_nm_initrd_generator_nm_initrd_generator_DEPENDENCIES = \ src/nm-initrd-generator/libnmi-core.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ src/libnm-base/libnm-base.la \ @@ -2394,7 +2426,8 @@ src_nm_initrd_generator_tests_test_cmdline_reader_SOURCES = \ src/nm-initrd-generator/tests/test-cmdline-reader.c src_nm_initrd_generator_tests_test_cmdline_reader_OBJECTS = src/nm-initrd-generator/tests/test_cmdline_reader-test-cmdline-reader.$(OBJEXT) am__DEPENDENCIES_7 = src/nm-initrd-generator/libnmi-core.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ src/libnm-base/libnm-base.la \ @@ -2895,6 +2928,7 @@ am__depfiles_remade = examples/C/glib/$(DEPDIR)/add_connection_gdbus-add-connect src/core/tests/config/$(DEPDIR)/test_config-test-config.Po \ src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-connection.Plo \ src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-manager.Plo \ + src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Plo \ src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Plo \ src/libnm-base/$(DEPDIR)/libnm_base_la-nm-net-aux.Plo \ src/libnm-base/$(DEPDIR)/libnm_base_la-nm-priv-helper-utils.Plo \ @@ -2962,7 +2996,6 @@ am__depfiles_remade = examples/C/glib/$(DEPDIR)/add_connection_gdbus-add-connect src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-auth-subject.Plo \ src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-libnm-core-utils.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-connection.Plo \ - src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-errors.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-keyfile-utils.Plo \ @@ -3028,8 +3061,6 @@ am__depfiles_remade = examples/C/glib/$(DEPDIR)/add_connection_gdbus-add-connect src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-utils.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-editor-plugin.Plo \ src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-plugin-info.Plo \ - src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo \ - src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo \ src/libnm-core-impl/tests/$(DEPDIR)/test_compare-test-compare.Po \ src/libnm-core-impl/tests/$(DEPDIR)/test_crypto-test-crypto.Po \ src/libnm-core-impl/tests/$(DEPDIR)/test_general-nm-core-tests-enum-types.Po \ @@ -3039,6 +3070,10 @@ am__depfiles_remade = examples/C/glib/$(DEPDIR)/add_connection_gdbus-add-connect src/libnm-core-impl/tests/$(DEPDIR)/test_setting-test-setting.Po \ src/libnm-core-impl/tests/$(DEPDIR)/test_settings_defaults-test-settings-defaults.Po \ src/libnm-core-public/$(DEPDIR)/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.Plo \ + src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo \ + src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Plo \ + src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo \ + src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Plo \ src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dbus-aux.Plo \ src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dedup-multi.Plo \ src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-enum-utils.Plo \ @@ -3083,6 +3118,7 @@ am__depfiles_remade = examples/C/glib/$(DEPDIR)/add_connection_gdbus-add-connect src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp-packet.Plo \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-network.Plo \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-option.Plo \ + src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Plo \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Plo \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-network.Plo \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-network-common.Plo \ @@ -3329,8 +3365,10 @@ SOURCES = $(src_libnmt_newt_libnmt_newt_a_SOURCES) \ $(src_libnm_core_aux_intern_libnm_core_aux_intern_la_SOURCES) \ $(src_libnm_core_impl_libnm_core_impl_la_SOURCES) \ $(nodist_src_libnm_core_impl_libnm_core_impl_la_SOURCES) \ - $(src_libnm_core_impl_libnm_crypto_gnutls_la_SOURCES) \ - $(src_libnm_core_impl_libnm_crypto_nss_la_SOURCES) \ + $(src_libnm_crypto_libnm_crypto_gnutls_la_SOURCES) \ + $(src_libnm_crypto_libnm_crypto_nss_la_SOURCES) \ + $(src_libnm_crypto_libnm_crypto_null_la_SOURCES) \ + $(src_libnm_crypto_libnm_crypto_la_SOURCES) \ $(src_libnm_glib_aux_libnm_glib_aux_la_SOURCES) \ $(src_libnm_log_core_libnm_log_core_la_SOURCES) \ $(src_libnm_log_null_libnm_log_null_la_SOURCES) \ @@ -3454,8 +3492,10 @@ DIST_SOURCES = $(am__src_libnmt_newt_libnmt_newt_a_SOURCES_DIST) \ $(src_libnm_core_aux_extern_libnm_core_aux_extern_la_SOURCES) \ $(src_libnm_core_aux_intern_libnm_core_aux_intern_la_SOURCES) \ $(src_libnm_core_impl_libnm_core_impl_la_SOURCES) \ - $(am__src_libnm_core_impl_libnm_crypto_gnutls_la_SOURCES_DIST) \ - $(am__src_libnm_core_impl_libnm_crypto_nss_la_SOURCES_DIST) \ + $(am__src_libnm_crypto_libnm_crypto_gnutls_la_SOURCES_DIST) \ + $(am__src_libnm_crypto_libnm_crypto_nss_la_SOURCES_DIST) \ + $(src_libnm_crypto_libnm_crypto_null_la_SOURCES) \ + $(src_libnm_crypto_libnm_crypto_la_SOURCES) \ $(src_libnm_glib_aux_libnm_glib_aux_la_SOURCES) \ $(src_libnm_log_core_libnm_log_core_la_SOURCES) \ $(src_libnm_log_null_libnm_log_null_la_SOURCES) \ @@ -3794,7 +3834,7 @@ am__DIST_COMMON = $(srcdir)/Makefile.examples $(srcdir)/Makefile.in \ $(top_srcdir)/data/org.freedesktop.NetworkManager.policy.in.in \ $(top_srcdir)/src/libnm-client-impl/libnm.pc.in \ $(top_srcdir)/src/libnm-core-public/nm-version-macros.h.in \ - ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS README TODO \ + ABOUT-NLS AUTHORS COPYING ChangeLog NEWS TODO \ build-aux/compile build-aux/config.guess \ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing @@ -3851,7 +3891,6 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BLACK = @BLACK@ BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@ BLUEZ5_LIBS = @BLUEZ5_LIBS@ CC = @CC@ @@ -4180,6 +4219,8 @@ AUTOMAKE_OPTIONS = subdir-objects ############################################################################### +############################################################################### + ############################################################################### noinst_LTLIBRARIES = src/c-siphash/libc-siphash.la \ src/c-rbtree/libc-rbtree.la src/n-acd/libn-acd.la \ @@ -4195,19 +4236,20 @@ noinst_LTLIBRARIES = src/c-siphash/libc-siphash.la \ src/libnm-client-aux-extern/libnm-client-aux-extern.la \ src/libnm-client-test/libnm-client-test.la \ introspection/libnmdbus.la \ - src/libnm-core-impl/libnm-core-impl.la $(libnm_crypto_lib) \ + src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la $(libnm_crypto_lib) \ src/libnm-client-impl/libnm-client-impl.la \ src/core/libNetworkManagerBase.la \ src/core/libNetworkManager.la \ src/libnm-systemd-core/libnm-systemd-core.la $(NULL) \ src/libnm-systemd-shared/libnm-systemd-shared.la \ - src/nm-initrd-generator/libnmi-core.la $(am__append_22) \ - $(am__append_30) $(am__append_37) $(am__append_42) \ - src/nm-dispatcher/libnm-dispatcher-core.la $(am__append_87) -check_LTLIBRARIES = $(am__append_89) -noinst_LIBRARIES = $(am__append_56) $(am__append_60) -noinst_DATA = $(am__append_11) -dist_libexec_SCRIPTS = $(am__append_26) + src/nm-initrd-generator/libnmi-core.la $(am__append_24) \ + $(am__append_32) $(am__append_39) $(am__append_44) \ + src/nm-dispatcher/libnm-dispatcher-core.la $(am__append_89) +check_LTLIBRARIES = $(am__append_91) +noinst_LIBRARIES = $(am__append_58) $(am__append_62) +noinst_DATA = $(am__append_13) +dist_libexec_SCRIPTS = $(am__append_28) ############################################################################### lib_LTLIBRARIES = src/libnm-client-impl/libnm.la @@ -4216,32 +4258,32 @@ plugin_LTLIBRARIES = $(core_plugins) ############################################################################### # src/core/devices/adsl ############################################################################### -core_plugins = $(am__append_19) $(am__append_21) $(am__append_29) \ +core_plugins = $(am__append_21) $(am__append_23) $(am__append_31) \ src/core/devices/adsl/libnm-device-plugin-adsl.la \ - $(am__append_33) $(am__append_44) $(am__append_47) \ - $(am__append_49) + $(am__append_35) $(am__append_46) $(am__append_49) \ + $(am__append_51) service_DATA = -man_MANS = $(am__append_81) +man_MANS = $(am__append_83) examples_DATA = data/server.conf CLEANFILES = $(introspection_sources) $(DBUS_INTERFACE_DOCS) \ - src/core/NetworkManager.ver $(am__append_23) \ + src/core/NetworkManager.ver $(am__append_25) \ $(dispatcher_nmdbus_dispatcher_sources) \ src/nm-dispatcher/org.freedesktop.nm_dispatcher.service \ src/nm-priv-helper/org.freedesktop.nm_priv_helper.service \ - $(am__append_66) src/tests/client/test-client.log \ + $(am__append_68) src/tests/client/test-client.log \ data/NetworkManager-dispatcher.service \ data/NetworkManager-wait-online.service \ data/NetworkManager.service data/nm-priv-helper.service \ - data/server.conf $(NULL) $(am__append_69) man/common.ent \ - $(am__append_82) $(am__append_85) $(GLIB_GENERATED) \ + data/server.conf $(NULL) $(am__append_71) man/common.ent \ + $(am__append_84) $(am__append_87) $(GLIB_GENERATED) \ $(INTROSPECTION_GIRS) $(typelib_DATA) cscope.in.out cscope.out \ - cscope.po.out $(NULL) $(am__append_91) + cscope.po.out $(NULL) $(am__append_93) ############################################################################### DISTCLEANFILES = config-extra.h intltool-extract intltool-merge \ intltool-update $(polkit_policy_DATA) \ - src/libnm-client-impl/libnm.pc $(am__append_14) \ - $(am__append_15) $(am__append_51) + src/libnm-client-impl/libnm.pc $(am__append_16) \ + $(am__append_17) $(am__append_53) ############################################################################### @@ -4288,9 +4330,10 @@ EXTRA_DIST = src/c-stdaux/src/c-stdaux.h $(NULL) \ src/libnm-core-intern/meson.build \ src/libnm-core-public/README.md \ src/libnm-core-public/meson.build $(NULL) \ - src/libnm-core-impl/nm-crypto-gnutls.c \ - src/libnm-core-impl/nm-crypto-nss.c \ src/libnm-core-impl/meson.build $(NULL) \ + src/libnm-crypto/README.md src/libnm-crypto/meson.build \ + src/libnm-crypto/nm-crypto-gnutls.c \ + src/libnm-crypto/nm-crypto-nss.c $(NULL) \ src/libnm-core-impl/tests/certs/ca-no-ending-newline.pem \ src/libnm-core-impl/tests/certs/pkcs8-decrypted.der \ src/libnm-core-impl/tests/certs/pkcs8-enc-key.pem \ @@ -4317,7 +4360,7 @@ EXTRA_DIST = src/c-stdaux/src/c-stdaux.h $(NULL) \ src/libnm-client-public/nm-enum-types.c.template \ src/libnm-client-public/nm-enum-types.h.template \ src/libnm-client-impl/libnm.pc.in \ - src/libnm-client-impl/libnm.ver $(am__append_12) \ + src/libnm-client-impl/libnm.ver $(am__append_14) \ tools/generate-docs-nm-property-infos.py \ tools/generate-docs-nm-settings-docs-merge.py \ tools/generate-docs-nm-settings-docs-gir.py \ @@ -4880,7 +4923,7 @@ EXTRA_DIST = src/c-stdaux/src/c-stdaux.h $(NULL) \ src/libnmc-setting/meson.build \ src/libnmc-setting/tests/meson.build \ src/libnmt-newt/meson.build src/nmtui/meson.build \ - $(am__append_65) src/tests/client/test-client.sh \ + $(am__append_67) src/tests/client/test-client.sh \ src/tests/client/test-client.py \ src/tests/client/test-client.check-on-disk/test_001.expected \ src/tests/client/test-client.check-on-disk/test_002.expected \ @@ -4893,14 +4936,15 @@ EXTRA_DIST = src/c-stdaux/src/c-stdaux.h $(NULL) \ data/NetworkManager-wait-online.service.in \ data/NetworkManager.service.in data/nm-priv-helper.service.in \ data/meson.build data/nm-shared.xml data/server.conf.in \ - $(NULL) $(am__append_71) $(am__append_74) $(am__append_77) \ + $(NULL) $(am__append_73) $(am__append_76) $(am__append_79) \ man/common.ent.in $(man_nm_settings_xml) $(addsuffix \ .xsl,$(basename $(man_nm_settings_xml))) $(man_pages) \ $(addsuffix .xml,$(basename $(man_pages))) \ $(man_pages_autogen) $(NULL) man/meson.build \ - vapi/NM-1.0.metadata vapi/libnm.deps vapi/meson.build \ - CONTRIBUTING.md COPYING.LGPL COPYING.GFDL intltool-extract.in \ - intltool-merge.in intltool-update.in linker-script-binary.ver \ + vapi/NM-1.0.metadata vapi/libnm.deps vapi/meson.build AUTHORS \ + COPYING ChangeLog NEWS README.md CONTRIBUTING.md COPYING.LGPL \ + COPYING.GFDL intltool-extract.in intltool-merge.in \ + intltool-update.in linker-script-binary.ver \ linker-script-devices.ver linker-script-settings.ver \ src/core/ppp/nm-ppp-plugin.ver Makefile.glib autogen.sh \ lsan.suppressions valgrind.suppressions meson.build \ @@ -4976,16 +5020,16 @@ EXTRA_DIST = src/c-stdaux/src/c-stdaux.h $(NULL) \ EXTRA_LTLIBRARIES = dist_hook = dist-hook-settings-ifcfg-rh-alias-files dist_dependencies = src/libnm-core-public/nm-vpn-dbus-types.xml \ - src/libnm-core-public/nm-dbus-types.xml $(am__append_72) \ - $(am__append_75) $(am__append_78) $(man_pages) \ + src/libnm-core-public/nm-dbus-types.xml $(am__append_74) \ + $(am__append_77) $(am__append_80) $(man_pages) \ $(man_pages_autogen) dist_configure_check = $(am__append_2) -install_data_hook = install-data-hook-dirs $(am__append_27) \ - install-data-hook-dispatcher $(am__append_54) $(am__append_63) \ - $(am__append_79) -install_exec_hook = $(am__append_58) -uninstall_hook = $(am__append_55) $(am__append_59) $(am__append_64) \ - $(am__append_80) +install_data_hook = install-data-hook-dirs $(am__append_29) \ + install-data-hook-dispatcher $(am__append_56) $(am__append_65) \ + $(am__append_81) +install_exec_hook = $(am__append_60) +uninstall_hook = $(am__append_57) $(am__append_61) $(am__append_66) \ + $(am__append_82) BUILT_SOURCES = src/libnm-core-public/nm-vpn-dbus-types.xml \ src/libnm-core-public/nm-dbus-types.xml $(gir_DATA) \ $(typelib_DATA) @@ -4995,12 +5039,13 @@ GLIB_GENERATED = $(src_libnm_core_public_mkenums_h) \ src/libnm-core-impl/tests/nm-core-tests-enum-types.c \ $(src_libnm_client_public_mkenums_h) \ $(src_libnm_client_public_mkenums_c) -man_pages = man/NetworkManager.8 man/NetworkManager-dispatcher.8 \ - man/NetworkManager.conf.5 man/nm-online.1 \ - man/nm-initrd-generator.8 man/nmcli-examples.7 man/nmcli.1 \ - man/nmtui.1 $(NULL) $(am__append_73) $(am__append_76) +man_pages = man/NetworkManager-dispatcher.8 \ + man/NetworkManager-wait-online.service.8 man/NetworkManager.8 \ + man/NetworkManager.conf.5 man/nm-initrd-generator.8 \ + man/nm-online.1 man/nmcli-examples.7 man/nmcli.1 man/nmtui.1 \ + $(NULL) $(am__append_75) $(am__append_78) man_pages_autogen = man/nm-settings-dbus.5 man/nm-settings-keyfile.5 \ - man/nm-settings-nmcli.5 $(NULL) $(am__append_70) + man/nm-settings-nmcli.5 $(NULL) $(am__append_72) ############################################################################### @@ -5041,15 +5086,15 @@ check_programs = src/libnm-platform/tests/test-nm-platform \ src/libnm-core-impl/tests/test-secrets \ src/libnm-core-impl/tests/test-setting \ src/libnm-core-impl/tests/test-settings-defaults \ - src/libnm-client-impl/tests/test-libnm $(am__append_16) \ + src/libnm-client-impl/tests/test-libnm $(am__append_18) \ src/nm-initrd-generator/tests/test-dt-reader \ src/nm-initrd-generator/tests/test-ibft-reader \ src/nm-initrd-generator/tests/test-cmdline-reader \ src/core/dhcp/tests/test-dhcp-dhclient \ src/core/dhcp/tests/test-dhcp-utils \ src/core/settings/plugins/keyfile/tests/test-keyfile-settings \ - $(am__append_25) $(am__append_32) $(am__append_36) \ - $(am__append_46) src/core/dnsmasq/tests/test-dnsmasq-utils \ + $(am__append_27) $(am__append_34) $(am__append_38) \ + $(am__append_48) src/core/dnsmasq/tests/test-dnsmasq-utils \ src/core/platform/tests/test-address-fake \ src/core/platform/tests/test-address-linux \ src/core/platform/tests/test-cleanup-fake \ @@ -5069,8 +5114,8 @@ check_programs = src/libnm-platform/tests/test-nm-platform \ src/core/tests/test-l3cfg src/core/tests/test-systemd \ src/core/tests/test-utils src/core/tests/test-wired-defname \ $(NULL) src/nm-dispatcher/tests/test-dispatcher-envp \ - src/libnmc-setting/tests/test-libnmc-setting $(am__append_67) -check_programs_norun = $(am__append_17) $(am__append_41) \ + src/libnmc-setting/tests/test-libnmc-setting $(am__append_69) +check_programs_norun = $(am__append_19) $(am__append_43) \ src/core/platform/tests/monitor \ src/core/ndisc/tests/test-ndisc-linux \ examples/C/glib/add-connection-gdbus \ @@ -5081,34 +5126,35 @@ check_programs_norun = $(am__append_17) $(am__append_41) \ examples/C/glib/list-connections-libnm \ examples/C/glib/monitor-nm-running-gdbus \ examples/C/glib/monitor-nm-state-gdbus \ - examples/C/glib/vpn-import-libnm $(NULL) $(am__append_90) + examples/C/glib/vpn-import-libnm $(NULL) $(am__append_92) ############################################################################### # just test, that we can build "nm-vpn-plugin-utils.c" ############################################################################### -check_ltlibraries = $(am__append_7) $(am__append_8) \ +check_ltlibraries = $(am__append_7) $(am__append_8) $(am__append_9) \ + $(am__append_10) \ src/contrib/tests/libnm-vpn-plugin-utils-test.la \ src/core/libNetworkManagerTest.la \ src/libnmc-base/libnmc-base.la \ src/libnmc-setting/libnmc-setting.la -check_local = check-docs check-local-exports-libnm $(am__append_13) \ - check-config-options $(am__append_24) $(am__append_31) \ - check-local-devices-adsl $(am__append_35) $(am__append_45) \ - $(am__append_48) $(am__append_50) $(am__append_52) \ - check-local-tests-client check-local-gitlab-ci \ - $(am__append_92) check-tree check-po-msgfmt -VAPIGEN_VAPIS = $(am__append_83) -dbusservice_DATA = $(am__append_28) \ +check_local = check-docs check-local-exports-libnm $(am__append_15) \ + check-config-options $(am__append_26) $(am__append_33) \ + check-local-devices-adsl $(am__append_37) $(am__append_47) \ + $(am__append_50) $(am__append_52) $(am__append_54) \ + check-local-tests-client check-local-gitlab-ci check-tree \ + check-po-msgfmt +VAPIGEN_VAPIS = $(am__append_85) +dbusservice_DATA = $(am__append_30) \ src/nm-dispatcher/nm-dispatcher.conf \ src/nm-priv-helper/nm-priv-helper.conf \ src/core/org.freedesktop.NetworkManager.conf dbusactivation_DATA = \ src/nm-dispatcher/org.freedesktop.nm_dispatcher.service \ src/nm-priv-helper/org.freedesktop.nm_priv_helper.service -systemdsystemunit_DATA = $(am__append_62) $(am__append_68) -INTROSPECTION_GIRS = $(am__append_10) +systemdsystemunit_DATA = $(am__append_64) $(am__append_70) +INTROSPECTION_GIRS = $(am__append_12) INTROSPECTION_SCANNER_ARGS = INTROSPECTION_COMPILER_ARGS = # Pass SANITIZER_ENV where a command that uses built libraries is @@ -5122,9 +5168,9 @@ nodist_libnminclude_HEADERS = $(src_libnm_core_public_mkenums_h) \ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = src/libnm-client-impl/libnm.pc pppd_plugindir = $(PPPD_PLUGIN_DIR) -pppd_plugin_LTLIBRARIES = $(am__append_20) +pppd_plugin_LTLIBRARIES = $(am__append_22) vapidir = $(datadir)/vala/vapi -vapi_DATA = $(am__append_84) +vapi_DATA = $(am__append_86) examplesdir = $(docdir)/examples rundir = $(runstatedir)/NetworkManager statedir = $(localstatedir)/lib/NetworkManager @@ -5420,6 +5466,7 @@ src_libnm_base_libnm_base_la_CPPFLAGS = \ $(NULL) src_libnm_base_libnm_base_la_SOURCES = \ + src/libnm-base/nm-base.c \ src/libnm-base/nm-base.h \ src/libnm-base/nm-config-base.h \ src/libnm-base/nm-ethtool-base.c \ @@ -5491,6 +5538,7 @@ src_libnm_platform_libnm_platform_la_CPPFLAGS = \ src_libnm_platform_libnm_platform_la_SOURCES = \ src/linux-headers/ethtool.h src/linux-headers/nl802154.h \ + src/linux-headers/nl80211-vnd-intel.h \ src/libnm-platform/nm-linux-platform.c \ src/libnm-platform/nm-linux-platform.h \ src/libnm-platform/nm-netlink.c \ @@ -6018,8 +6066,6 @@ src_libnm_core_public_mkenums_h = \ src_libnm_core_impl_lib_h_priv = \ src/libnm-core-impl/nm-connection-private.h \ - src/libnm-core-impl/nm-crypto-impl.h \ - src/libnm-core-impl/nm-crypto.h \ src/libnm-core-impl/nm-default-libnm-core.h \ src/libnm-core-impl/nm-property-compare.h \ src/libnm-core-impl/nm-setting-private.h \ @@ -6091,7 +6137,6 @@ src_libnm_core_impl_lib_c_settings_real = \ src_libnm_core_impl_lib_c_real = \ $(src_libnm_core_impl_lib_c_settings_real) \ src/libnm-core-impl/nm-connection.c \ - src/libnm-core-impl/nm-crypto.c \ src/libnm-core-impl/nm-dbus-utils.c \ src/libnm-core-impl/nm-errors.c \ src/libnm-core-impl/nm-keyfile-utils.c \ @@ -6149,34 +6194,65 @@ src_libnm_core_impl_libnm_core_impl_la_LDFLAGS = \ $(SANITIZER_LIB_LDFLAGS) \ $(NULL) +src_libnm_crypto_libnm_crypto_la_SOURCES = \ + src/libnm-crypto/nm-crypto-impl.h \ + src/libnm-crypto/nm-crypto.c \ + src/libnm-crypto/nm-crypto.h \ + $(NULL) -############################################################################### -@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_TRUE@libnm_crypto_lib = src/libnm-core-impl/libnm-crypto-gnutls.la -@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_TRUE@libnm_crypto_lib = src/libnm-core-impl/libnm-crypto-nss.la -@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_core_impl_libnm_crypto_gnutls_la_SOURCES = src/libnm-core-impl/nm-crypto-gnutls.c -@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_core_impl_libnm_crypto_gnutls_la_CPPFLAGS = \ +src_libnm_crypto_libnm_crypto_la_CPPFLAGS = \ + $(dflt_cppflags_libnm_core) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_la_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) \ + $(SANITIZER_LIB_LDFLAGS) \ + $(NULL) + +@HAVE_CRYPTO_GNUTLS_TRUE@@WITH_GNUTLS_TRUE@libnm_crypto_lib = src/libnm-crypto/libnm-crypto-gnutls.la +@HAVE_CRYPTO_NSS_TRUE@@WITH_NSS_TRUE@libnm_crypto_lib = src/libnm-crypto/libnm-crypto-nss.la +@WITH_GNUTLS_FALSE@@WITH_NSS_FALSE@libnm_crypto_lib = src/libnm-crypto/libnm-crypto-null.la +@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_crypto_libnm_crypto_gnutls_la_SOURCES = src/libnm-crypto/nm-crypto-gnutls.c +@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_crypto_libnm_crypto_gnutls_la_CPPFLAGS = \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(GNUTLS_CFLAGS) -@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_core_impl_libnm_crypto_gnutls_la_LDFLAGS = \ +@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_crypto_libnm_crypto_gnutls_la_LDFLAGS = \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) -@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_core_impl_libnm_crypto_gnutls_la_LIBADD = \ +@HAVE_CRYPTO_GNUTLS_TRUE@src_libnm_crypto_libnm_crypto_gnutls_la_LIBADD = \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(GLIB_LIBS) \ @HAVE_CRYPTO_GNUTLS_TRUE@ $(GNUTLS_LIBS) -@HAVE_CRYPTO_NSS_TRUE@src_libnm_core_impl_libnm_crypto_nss_la_SOURCES = src/libnm-core-impl/nm-crypto-nss.c -@HAVE_CRYPTO_NSS_TRUE@src_libnm_core_impl_libnm_crypto_nss_la_CPPFLAGS = \ +@HAVE_CRYPTO_NSS_TRUE@src_libnm_crypto_libnm_crypto_nss_la_SOURCES = src/libnm-crypto/nm-crypto-nss.c +@HAVE_CRYPTO_NSS_TRUE@src_libnm_crypto_libnm_crypto_nss_la_CPPFLAGS = \ @HAVE_CRYPTO_NSS_TRUE@ $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ @HAVE_CRYPTO_NSS_TRUE@ $(NSS_CFLAGS) -@HAVE_CRYPTO_NSS_TRUE@src_libnm_core_impl_libnm_crypto_nss_la_LDFLAGS = \ +@HAVE_CRYPTO_NSS_TRUE@src_libnm_crypto_libnm_crypto_nss_la_LDFLAGS = \ @HAVE_CRYPTO_NSS_TRUE@ $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) -@HAVE_CRYPTO_NSS_TRUE@src_libnm_core_impl_libnm_crypto_nss_la_LIBADD = \ +@HAVE_CRYPTO_NSS_TRUE@src_libnm_crypto_libnm_crypto_nss_la_LIBADD = \ @HAVE_CRYPTO_NSS_TRUE@ $(GLIB_LIBS) \ @HAVE_CRYPTO_NSS_TRUE@ $(NSS_LIBS) +src_libnm_crypto_libnm_crypto_null_la_SOURCES = src/libnm-crypto/nm-crypto-null.c +src_libnm_crypto_libnm_crypto_null_la_CPPFLAGS = \ + $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_null_la_LDFLAGS = \ + $(src_libnm_core_impl_libnm_core_impl_la_LDFLAGS) \ + $(NULL) + +src_libnm_crypto_libnm_crypto_null_la_LIBADD = \ + $(GLIB_LIBS) \ + $(NULL) + nm_core_tests_enum_types_sources = src/libnm-core-impl/tests/test-general-enums.h nm_core_tests_enum_types_MKENUMS_C_FLAGS = --fhead '\#undef G_LOG_DOMAIN\n\#include "src/libnm-core-impl/nm-default-libnm-core.h"\n' src_libnm_core_impl_tests_cppflags = \ @@ -6209,6 +6285,7 @@ nodist_src_libnm_core_impl_tests_test_general_SOURCES = \ src_libnm_core_impl_tests_ldadd = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ @@ -6391,6 +6468,7 @@ nodist_src_libnm_client_impl_libnm_client_impl_la_SOURCES = \ src_libnm_client_impl_libnm_client_impl_la_LIBADD = \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-base/libnm-base.la \ @@ -6439,12 +6517,12 @@ src_libnm_client_impl_libnm_la_LDFLAGS = \ $(SANITIZER_LIB_LDFLAGS) \ -version-info "1:0:1" -src_libnm_client_impl_NM_1_0_typelib = $(am__append_9) +src_libnm_client_impl_NM_1_0_typelib = $(am__append_11) @HAVE_INTROSPECTION_TRUE@src_libnm_client_impl_NM_1_0_gir_INCLUDES = Gio-2.0 @HAVE_INTROSPECTION_TRUE@src_libnm_client_impl_NM_1_0_gir_PACKAGES = gio-2.0 @HAVE_INTROSPECTION_TRUE@src_libnm_client_impl_NM_1_0_gir_EXPORT_PACKAGES = libnm @HAVE_INTROSPECTION_TRUE@src_libnm_client_impl_NM_1_0_gir_CFLAGS = \ -@HAVE_INTROSPECTION_TRUE@ $(src_libnm_client_impl_libnm_la_CPPFLAGS) \ +@HAVE_INTROSPECTION_TRUE@ $(filter-out -DGLIB_VERSION_%, $(src_libnm_client_impl_libnm_la_CPPFLAGS)) \ @HAVE_INTROSPECTION_TRUE@ -DNETWORKMANAGER_COMPILATION \ @HAVE_INTROSPECTION_TRUE@ $(NULL) @@ -6563,7 +6641,7 @@ src_core_cppflags = \ \ $(NULL) -src_core_cppflags_test = $(src_core_cppflags) $(NULL) $(am__append_18) +src_core_cppflags_test = $(src_core_cppflags) $(NULL) $(am__append_20) src_core_ldflags = $(CODE_COVERAGE_LDFLAGS) ############################################################################### @@ -6785,6 +6863,8 @@ src_libnm_systemd_core_libnm_systemd_core_la_SOURCES = \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-network.c \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c \ + src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h \ + src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c \ src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h \ src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c \ src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.h \ @@ -7076,6 +7156,7 @@ src_core_libNetworkManager_la_LIBADD = \ src/core/libNetworkManagerBase.la \ src/libnm-core-aux-extern/libnm-core-aux-extern.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ @@ -7190,6 +7271,7 @@ src_nm_initrd_generator_nm_initrd_generator_CPPFLAGS = \ src_nm_initrd_generator_nm_initrd_generator_LDADD = \ src/nm-initrd-generator/libnmi-core.la \ src/libnm-core-impl/libnm-core-impl.la \ + src/libnm-crypto/libnm-crypto.la \ $(libnm_crypto_lib) \ src/libnm-core-aux-intern/libnm-core-aux-intern.la \ src/libnm-platform/libnm-platform.la \ @@ -7467,7 +7549,7 @@ src_core_devices_adsl_libnm_device_plugin_adsl_la_LIBADD = \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/wwan/nm-modem.h \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/wwan/nm-service-providers.c \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/wwan/nm-service-providers.h \ -@WITH_MODEM_MANAGER_1_TRUE@ $(NULL) $(am__append_34) +@WITH_MODEM_MANAGER_1_TRUE@ $(NULL) $(am__append_36) @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_wwan_libnm_wwan_la_CPPFLAGS = $(src_core_devices_wwan_cppflags) @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_wwan_libnm_wwan_la_LDFLAGS = \ @WITH_MODEM_MANAGER_1_TRUE@ -avoid-version \ @@ -7518,13 +7600,13 @@ src_core_devices_adsl_libnm_device_plugin_adsl_la_LIBADD = \ @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_bluetooth_libnm_bluetooth_utils_la_SOURCES = src/core/devices/bluetooth/nm-bluez-common.h \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bt-error.c \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bt-error.h \ -@WITH_MODEM_MANAGER_1_TRUE@ $(NULL) $(am__append_38) +@WITH_MODEM_MANAGER_1_TRUE@ $(NULL) $(am__append_40) @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_bluetooth_libnm_bluetooth_utils_la_CPPFLAGS = \ @WITH_MODEM_MANAGER_1_TRUE@ $(src_core_cppflags_base) $(NULL) \ -@WITH_MODEM_MANAGER_1_TRUE@ $(am__append_39) +@WITH_MODEM_MANAGER_1_TRUE@ $(am__append_41) @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_bluetooth_libnm_bluetooth_utils_la_LIBADD = \ @WITH_MODEM_MANAGER_1_TRUE@ $(GLIB_LIBS) $(NULL) \ -@WITH_MODEM_MANAGER_1_TRUE@ $(am__append_40) +@WITH_MODEM_MANAGER_1_TRUE@ $(am__append_42) @WITH_MODEM_MANAGER_1_TRUE@src_core_devices_bluetooth_libnm_device_plugin_bluetooth_la_SOURCES = \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bluez-manager.c \ @WITH_MODEM_MANAGER_1_TRUE@ src/core/devices/bluetooth/nm-bluez-manager.h \ @@ -7572,7 +7654,7 @@ src_core_devices_adsl_libnm_device_plugin_adsl_la_LIBADD = \ @WITH_WIFI_TRUE@ src/core/devices/wifi/nm-wifi-p2p-peer.h \ @WITH_WIFI_TRUE@ src/core/devices/wifi/nm-wifi-utils.c \ @WITH_WIFI_TRUE@ src/core/devices/wifi/nm-wifi-utils.h $(NULL) \ -@WITH_WIFI_TRUE@ $(am__append_43) +@WITH_WIFI_TRUE@ $(am__append_45) @WITH_WIFI_TRUE@src_core_devices_wifi_libnm_wifi_base_la_CPPFLAGS = $(src_core_cppflags_device_plugin) @WITH_WIFI_TRUE@src_core_devices_wifi_libnm_wifi_base_la_LIBADD = \ @WITH_WIFI_TRUE@ $(GLIB_LIBS) @@ -8511,15 +8593,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile + $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -9744,6 +9826,9 @@ src/libnm-base/$(am__dirstamp): src/libnm-base/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/libnm-base/$(DEPDIR) @: > src/libnm-base/$(DEPDIR)/$(am__dirstamp) +src/libnm-base/libnm_base_la-nm-base.lo: \ + src/libnm-base/$(am__dirstamp) \ + src/libnm-base/$(DEPDIR)/$(am__dirstamp) src/libnm-base/libnm_base_la-nm-ethtool-base.lo: \ src/libnm-base/$(am__dirstamp) \ src/libnm-base/$(DEPDIR)/$(am__dirstamp) @@ -10152,9 +10237,6 @@ src/libnm-core-impl/libnm_core_impl_la-nm-setting-wpan.lo: \ src/libnm-core-impl/libnm_core_impl_la-nm-connection.lo: \ src/libnm-core-impl/$(am__dirstamp) \ src/libnm-core-impl/$(DEPDIR)/$(am__dirstamp) -src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo: \ - src/libnm-core-impl/$(am__dirstamp) \ - src/libnm-core-impl/$(DEPDIR)/$(am__dirstamp) src/libnm-core-impl/libnm_core_impl_la-nm-dbus-utils.lo: \ src/libnm-core-impl/$(am__dirstamp) \ src/libnm-core-impl/$(DEPDIR)/$(am__dirstamp) @@ -10203,18 +10285,36 @@ src/libnm-core-public/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.lo: src/libnm-core-impl/libnm-core-impl.la: $(src_libnm_core_impl_libnm_core_impl_la_OBJECTS) $(src_libnm_core_impl_libnm_core_impl_la_DEPENDENCIES) $(EXTRA_src_libnm_core_impl_libnm_core_impl_la_DEPENDENCIES) src/libnm-core-impl/$(am__dirstamp) $(AM_V_CCLD)$(src_libnm_core_impl_libnm_core_impl_la_LINK) $(src_libnm_core_impl_libnm_core_impl_la_OBJECTS) $(src_libnm_core_impl_libnm_core_impl_la_LIBADD) $(LIBS) -src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo: \ - src/libnm-core-impl/$(am__dirstamp) \ - src/libnm-core-impl/$(DEPDIR)/$(am__dirstamp) - -src/libnm-core-impl/libnm-crypto-gnutls.la: $(src_libnm_core_impl_libnm_crypto_gnutls_la_OBJECTS) $(src_libnm_core_impl_libnm_crypto_gnutls_la_DEPENDENCIES) $(EXTRA_src_libnm_core_impl_libnm_crypto_gnutls_la_DEPENDENCIES) src/libnm-core-impl/$(am__dirstamp) - $(AM_V_CCLD)$(src_libnm_core_impl_libnm_crypto_gnutls_la_LINK) $(am_src_libnm_core_impl_libnm_crypto_gnutls_la_rpath) $(src_libnm_core_impl_libnm_crypto_gnutls_la_OBJECTS) $(src_libnm_core_impl_libnm_crypto_gnutls_la_LIBADD) $(LIBS) -src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo: \ - src/libnm-core-impl/$(am__dirstamp) \ - src/libnm-core-impl/$(DEPDIR)/$(am__dirstamp) - -src/libnm-core-impl/libnm-crypto-nss.la: $(src_libnm_core_impl_libnm_crypto_nss_la_OBJECTS) $(src_libnm_core_impl_libnm_crypto_nss_la_DEPENDENCIES) $(EXTRA_src_libnm_core_impl_libnm_crypto_nss_la_DEPENDENCIES) src/libnm-core-impl/$(am__dirstamp) - $(AM_V_CCLD)$(src_libnm_core_impl_libnm_crypto_nss_la_LINK) $(am_src_libnm_core_impl_libnm_crypto_nss_la_rpath) $(src_libnm_core_impl_libnm_crypto_nss_la_OBJECTS) $(src_libnm_core_impl_libnm_crypto_nss_la_LIBADD) $(LIBS) +src/libnm-crypto/$(am__dirstamp): + @$(MKDIR_P) src/libnm-crypto + @: > src/libnm-crypto/$(am__dirstamp) +src/libnm-crypto/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/libnm-crypto/$(DEPDIR) + @: > src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) +src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo: \ + src/libnm-crypto/$(am__dirstamp) \ + src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) + +src/libnm-crypto/libnm-crypto-gnutls.la: $(src_libnm_crypto_libnm_crypto_gnutls_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_gnutls_la_DEPENDENCIES) $(EXTRA_src_libnm_crypto_libnm_crypto_gnutls_la_DEPENDENCIES) src/libnm-crypto/$(am__dirstamp) + $(AM_V_CCLD)$(src_libnm_crypto_libnm_crypto_gnutls_la_LINK) $(am_src_libnm_crypto_libnm_crypto_gnutls_la_rpath) $(src_libnm_crypto_libnm_crypto_gnutls_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_gnutls_la_LIBADD) $(LIBS) +src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo: \ + src/libnm-crypto/$(am__dirstamp) \ + src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) + +src/libnm-crypto/libnm-crypto-nss.la: $(src_libnm_crypto_libnm_crypto_nss_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_nss_la_DEPENDENCIES) $(EXTRA_src_libnm_crypto_libnm_crypto_nss_la_DEPENDENCIES) src/libnm-crypto/$(am__dirstamp) + $(AM_V_CCLD)$(src_libnm_crypto_libnm_crypto_nss_la_LINK) $(am_src_libnm_crypto_libnm_crypto_nss_la_rpath) $(src_libnm_crypto_libnm_crypto_nss_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_nss_la_LIBADD) $(LIBS) +src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo: \ + src/libnm-crypto/$(am__dirstamp) \ + src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) + +src/libnm-crypto/libnm-crypto-null.la: $(src_libnm_crypto_libnm_crypto_null_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_null_la_DEPENDENCIES) $(EXTRA_src_libnm_crypto_libnm_crypto_null_la_DEPENDENCIES) src/libnm-crypto/$(am__dirstamp) + $(AM_V_CCLD)$(src_libnm_crypto_libnm_crypto_null_la_LINK) $(am_src_libnm_crypto_libnm_crypto_null_la_rpath) $(src_libnm_crypto_libnm_crypto_null_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_null_la_LIBADD) $(LIBS) +src/libnm-crypto/libnm_crypto_la-nm-crypto.lo: \ + src/libnm-crypto/$(am__dirstamp) \ + src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) + +src/libnm-crypto/libnm-crypto.la: $(src_libnm_crypto_libnm_crypto_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_la_DEPENDENCIES) $(EXTRA_src_libnm_crypto_libnm_crypto_la_DEPENDENCIES) src/libnm-crypto/$(am__dirstamp) + $(AM_V_CCLD)$(src_libnm_crypto_libnm_crypto_la_LINK) $(src_libnm_crypto_libnm_crypto_la_OBJECTS) $(src_libnm_crypto_libnm_crypto_la_LIBADD) $(LIBS) src/libnm-glib-aux/$(am__dirstamp): @$(MKDIR_P) src/libnm-glib-aux @: > src/libnm-glib-aux/$(am__dirstamp) @@ -10413,6 +10513,9 @@ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-networ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-option.lo: \ src/libnm-systemd-core/src/libsystemd-network/$(am__dirstamp) \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/$(am__dirstamp) +src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo: \ + src/libnm-systemd-core/src/libsystemd-network/$(am__dirstamp) \ + src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/$(am__dirstamp) src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-neighbor.lo: \ src/libnm-systemd-core/src/libsystemd-network/$(am__dirstamp) \ src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/$(am__dirstamp) @@ -11733,6 +11836,8 @@ mostlyclean-compile: -rm -f src/libnm-core-impl/tests/*.$(OBJEXT) -rm -f src/libnm-core-public/*.$(OBJEXT) -rm -f src/libnm-core-public/*.lo + -rm -f src/libnm-crypto/*.$(OBJEXT) + -rm -f src/libnm-crypto/*.lo -rm -f src/libnm-glib-aux/*.$(OBJEXT) -rm -f src/libnm-glib-aux/*.lo -rm -f src/libnm-glib-aux/tests/*.$(OBJEXT) @@ -12048,6 +12153,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/core/tests/config/$(DEPDIR)/test_config-test-config.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-connection.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-manager.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-base/$(DEPDIR)/libnm_base_la-nm-net-aux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-base/$(DEPDIR)/libnm_base_la-nm-priv-helper-utils.Plo@am__quote@ # am--include-marker @@ -12115,7 +12221,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-auth-subject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-libnm-core-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-connection.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-errors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-keyfile-utils.Plo@am__quote@ # am--include-marker @@ -12181,8 +12286,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-editor-plugin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-plugin-info.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/tests/$(DEPDIR)/test_compare-test-compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/tests/$(DEPDIR)/test_crypto-test-crypto.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/tests/$(DEPDIR)/test_general-nm-core-tests-enum-types.Po@am__quote@ # am--include-marker @@ -12192,6 +12295,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/tests/$(DEPDIR)/test_setting-test-setting.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-impl/tests/$(DEPDIR)/test_settings_defaults-test-settings-defaults.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-core-public/$(DEPDIR)/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dbus-aux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dedup-multi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-enum-utils.Plo@am__quote@ # am--include-marker @@ -12236,6 +12343,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp-packet.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-network.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-option.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-network.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-network-common.Plo@am__quote@ # am--include-marker @@ -14191,6 +14299,13 @@ src/core/settings/plugins/ifupdown/libnms_ifupdown_core_la-nms-ifupdown-parser.l @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_core_settings_plugins_ifupdown_libnms_ifupdown_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/core/settings/plugins/ifupdown/libnms_ifupdown_core_la-nms-ifupdown-parser.lo `test -f 'src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c' || echo '$(srcdir)/'`src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c +src/libnm-base/libnm_base_la-nm-base.lo: src/libnm-base/nm-base.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_base_libnm_base_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-base/libnm_base_la-nm-base.lo -MD -MP -MF src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Tpo -c -o src/libnm-base/libnm_base_la-nm-base.lo `test -f 'src/libnm-base/nm-base.c' || echo '$(srcdir)/'`src/libnm-base/nm-base.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Tpo src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-base/nm-base.c' object='src/libnm-base/libnm_base_la-nm-base.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_base_libnm_base_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-base/libnm_base_la-nm-base.lo `test -f 'src/libnm-base/nm-base.c' || echo '$(srcdir)/'`src/libnm-base/nm-base.c + src/libnm-base/libnm_base_la-nm-ethtool-base.lo: src/libnm-base/nm-ethtool-base.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_base_libnm_base_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-base/libnm_base_la-nm-ethtool-base.lo -MD -MP -MF src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Tpo -c -o src/libnm-base/libnm_base_la-nm-ethtool-base.lo `test -f 'src/libnm-base/nm-ethtool-base.c' || echo '$(srcdir)/'`src/libnm-base/nm-ethtool-base.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Tpo src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Plo @@ -14996,13 +15111,6 @@ src/libnm-core-impl/libnm_core_impl_la-nm-connection.lo: src/libnm-core-impl/nm- @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-core-impl/libnm_core_impl_la-nm-connection.lo `test -f 'src/libnm-core-impl/nm-connection.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-connection.c -src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo: src/libnm-core-impl/nm-crypto.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo -MD -MP -MF src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Tpo -c -o src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo `test -f 'src/libnm-core-impl/nm-crypto.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Tpo src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-core-impl/nm-crypto.c' object='src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-core-impl/libnm_core_impl_la-nm-crypto.lo `test -f 'src/libnm-core-impl/nm-crypto.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto.c - src/libnm-core-impl/libnm_core_impl_la-nm-dbus-utils.lo: src/libnm-core-impl/nm-dbus-utils.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-core-impl/libnm_core_impl_la-nm-dbus-utils.lo -MD -MP -MF src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Tpo -c -o src/libnm-core-impl/libnm_core_impl_la-nm-dbus-utils.lo `test -f 'src/libnm-core-impl/nm-dbus-utils.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-dbus-utils.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Tpo src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Plo @@ -15094,19 +15202,33 @@ src/libnm-core-public/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.lo: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_core_impl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-core-public/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.lo `test -f 'src/libnm-core-public/nm-core-enum-types.c' || echo '$(srcdir)/'`src/libnm-core-public/nm-core-enum-types.c -src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo: src/libnm-core-impl/nm-crypto-gnutls.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_crypto_gnutls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo -MD -MP -MF src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Tpo -c -o src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo `test -f 'src/libnm-core-impl/nm-crypto-gnutls.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto-gnutls.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Tpo src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-core-impl/nm-crypto-gnutls.c' object='src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo' libtool=yes @AMDEPBACKSLASH@ +src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo: src/libnm-crypto/nm-crypto-gnutls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_gnutls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo -MD -MP -MF src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Tpo -c -o src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo `test -f 'src/libnm-crypto/nm-crypto-gnutls.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-gnutls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Tpo src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-crypto/nm-crypto-gnutls.c' object='src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_crypto_gnutls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-core-impl/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo `test -f 'src/libnm-core-impl/nm-crypto-gnutls.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto-gnutls.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_gnutls_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-crypto/libnm_crypto_gnutls_la-nm-crypto-gnutls.lo `test -f 'src/libnm-crypto/nm-crypto-gnutls.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-gnutls.c -src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo: src/libnm-core-impl/nm-crypto-nss.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_crypto_nss_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo -MD -MP -MF src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Tpo -c -o src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo `test -f 'src/libnm-core-impl/nm-crypto-nss.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto-nss.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Tpo src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-core-impl/nm-crypto-nss.c' object='src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo' libtool=yes @AMDEPBACKSLASH@ +src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo: src/libnm-crypto/nm-crypto-nss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_nss_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo -MD -MP -MF src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Tpo -c -o src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo `test -f 'src/libnm-crypto/nm-crypto-nss.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-nss.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Tpo src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-crypto/nm-crypto-nss.c' object='src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_core_impl_libnm_crypto_nss_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-core-impl/libnm_crypto_nss_la-nm-crypto-nss.lo `test -f 'src/libnm-core-impl/nm-crypto-nss.c' || echo '$(srcdir)/'`src/libnm-core-impl/nm-crypto-nss.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_nss_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-crypto/libnm_crypto_nss_la-nm-crypto-nss.lo `test -f 'src/libnm-crypto/nm-crypto-nss.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-nss.c + +src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo: src/libnm-crypto/nm-crypto-null.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_null_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo -MD -MP -MF src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Tpo -c -o src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo `test -f 'src/libnm-crypto/nm-crypto-null.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-null.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Tpo src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-crypto/nm-crypto-null.c' object='src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_null_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-crypto/libnm_crypto_null_la-nm-crypto-null.lo `test -f 'src/libnm-crypto/nm-crypto-null.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto-null.c + +src/libnm-crypto/libnm_crypto_la-nm-crypto.lo: src/libnm-crypto/nm-crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-crypto/libnm_crypto_la-nm-crypto.lo -MD -MP -MF src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Tpo -c -o src/libnm-crypto/libnm_crypto_la-nm-crypto.lo `test -f 'src/libnm-crypto/nm-crypto.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Tpo src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-crypto/nm-crypto.c' object='src/libnm-crypto/libnm_crypto_la-nm-crypto.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_crypto_libnm_crypto_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-crypto/libnm_crypto_la-nm-crypto.lo `test -f 'src/libnm-crypto/nm-crypto.c' || echo '$(srcdir)/'`src/libnm-crypto/nm-crypto.c src/libnm-glib-aux/libnm_glib_aux_la-nm-dbus-aux.lo: src/libnm-glib-aux/nm-dbus-aux.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_glib_aux_libnm_glib_aux_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-glib-aux/libnm_glib_aux_la-nm-dbus-aux.lo -MD -MP -MF src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dbus-aux.Tpo -c -o src/libnm-glib-aux/libnm_glib_aux_la-nm-dbus-aux.lo `test -f 'src/libnm-glib-aux/nm-dbus-aux.c' || echo '$(srcdir)/'`src/libnm-glib-aux/nm-dbus-aux.c @@ -15395,6 +15517,13 @@ src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-option @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_systemd_core_libnm_systemd_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-option.lo `test -f 'src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c' || echo '$(srcdir)/'`src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c +src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo: src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_systemd_core_libnm_systemd_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo -MD -MP -MF src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Tpo -c -o src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo `test -f 'src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c' || echo '$(srcdir)/'`src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Tpo src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c' object='src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_systemd_core_libnm_systemd_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-dhcp6-protocol.lo `test -f 'src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c' || echo '$(srcdir)/'`src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c + src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-neighbor.lo: src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libnm_systemd_core_libnm_systemd_core_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-neighbor.lo -MD -MP -MF src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Tpo -c -o src/libnm-systemd-core/src/libsystemd-network/libnm_systemd_core_la-lldp-neighbor.lo `test -f 'src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c' || echo '$(srcdir)/'`src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Tpo src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Plo @@ -17929,6 +18058,7 @@ clean-libtool: -rm -rf src/libnm-core-impl/.libs src/libnm-core-impl/_libs -rm -rf src/libnm-core-impl/tests/.libs src/libnm-core-impl/tests/_libs -rm -rf src/libnm-core-public/.libs src/libnm-core-public/_libs + -rm -rf src/libnm-crypto/.libs src/libnm-crypto/_libs -rm -rf src/libnm-glib-aux/.libs src/libnm-glib-aux/_libs -rm -rf src/libnm-glib-aux/tests/.libs src/libnm-glib-aux/tests/_libs -rm -rf src/libnm-log-core/.libs src/libnm-log-core/_libs @@ -19447,6 +19577,8 @@ distclean-generic: -rm -f src/libnm-core-impl/tests/$(am__dirstamp) -rm -f src/libnm-core-public/$(DEPDIR)/$(am__dirstamp) -rm -f src/libnm-core-public/$(am__dirstamp) + -rm -f src/libnm-crypto/$(DEPDIR)/$(am__dirstamp) + -rm -f src/libnm-crypto/$(am__dirstamp) -rm -f src/libnm-glib-aux/$(DEPDIR)/$(am__dirstamp) -rm -f src/libnm-glib-aux/$(am__dirstamp) -rm -f src/libnm-glib-aux/tests/$(DEPDIR)/$(am__dirstamp) @@ -19789,6 +19921,7 @@ distclean: distclean-recursive -rm -f src/core/tests/config/$(DEPDIR)/test_config-test-config.Po -rm -f src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-connection.Plo -rm -f src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-manager.Plo + -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-net-aux.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-priv-helper-utils.Plo @@ -19856,7 +19989,6 @@ distclean: distclean-recursive -rm -f src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-auth-subject.Plo -rm -f src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-libnm-core-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-connection.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-errors.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-keyfile-utils.Plo @@ -19922,8 +20054,6 @@ distclean: distclean-recursive -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-editor-plugin.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-plugin-info.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_compare-test-compare.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_crypto-test-crypto.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_general-nm-core-tests-enum-types.Po @@ -19933,6 +20063,10 @@ distclean: distclean-recursive -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_setting-test-setting.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_settings_defaults-test-settings-defaults.Po -rm -f src/libnm-core-public/$(DEPDIR)/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dbus-aux.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dedup-multi.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-enum-utils.Plo @@ -19977,6 +20111,7 @@ distclean: distclean-recursive -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp-packet.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-network.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-option.Plo + -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-network.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-network-common.Plo @@ -20458,6 +20593,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/core/tests/config/$(DEPDIR)/test_config-test-config.Po -rm -f src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-connection.Plo -rm -f src/core/vpn/$(DEPDIR)/libNetworkManager_la-nm-vpn-manager.Plo + -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-base.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-ethtool-base.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-net-aux.Plo -rm -f src/libnm-base/$(DEPDIR)/libnm_base_la-nm-priv-helper-utils.Plo @@ -20525,7 +20661,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-auth-subject.Plo -rm -f src/libnm-core-aux-intern/$(DEPDIR)/libnm_core_aux_intern_la-nm-libnm-core-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-connection.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-crypto.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-dbus-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-errors.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-keyfile-utils.Plo @@ -20591,8 +20726,6 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-utils.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-editor-plugin.Plo -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_core_impl_la-nm-vpn-plugin-info.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo - -rm -f src/libnm-core-impl/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_compare-test-compare.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_crypto-test-crypto.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_general-nm-core-tests-enum-types.Po @@ -20602,6 +20735,10 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_setting-test-setting.Po -rm -f src/libnm-core-impl/tests/$(DEPDIR)/test_settings_defaults-test-settings-defaults.Po -rm -f src/libnm-core-public/$(DEPDIR)/libnm_core_impl_libnm_core_impl_la-nm-core-enum-types.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_gnutls_la-nm-crypto-gnutls.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_la-nm-crypto.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_nss_la-nm-crypto-nss.Plo + -rm -f src/libnm-crypto/$(DEPDIR)/libnm_crypto_null_la-nm-crypto-null.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dbus-aux.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-dedup-multi.Plo -rm -f src/libnm-glib-aux/$(DEPDIR)/libnm_glib_aux_la-nm-enum-utils.Plo @@ -20646,6 +20783,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp-packet.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-network.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-option.Plo + -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-dhcp6-protocol.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-neighbor.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-lldp-network.Plo -rm -f src/libnm-systemd-core/src/libsystemd-network/$(DEPDIR)/libnm_systemd_core_la-network-common.Plo @@ -20958,11 +21096,15 @@ config-extra.h: config-extra.h.mk config.h config.status echo "#define SYSCONFDIR \"$(sysconfdir)\"" >>$@ && \ true -$(src_libnm_core_public_mkenums_h): config-extra.h $(src_libnm_core_public_mkenums_c): config-extra.h +$(src_libnm_core_public_mkenums_h): config-extra.h +src/core/dhcp/.dirstamp: config-extra.h +src/libnm-base/.dirstamp: config-extra.h +src/libnm-client-public/.dirstamp: config-extra.h +src/libnm-client-public/.dirstamp: config-extra.h src/libnm-core-impl/.dirstamp: config-extra.h src/libnm-core-impl/.dirstamp: config-extra.h -src/libnm-base/.dirstamp: config-extra.h +src/libnm-crypto/.dirstamp: config-extra.h src/libnm-glib-aux/.dirstamp: config-extra.h src/libnm-glib-aux/tests/.dirstamp: config-extra.h src/libnm-log-core/.dirstamp: config-extra.h @@ -20972,14 +21114,11 @@ src/libnm-platform/tests/.dirstamp: config-extra.h src/libnm-platform/wifi/.dirstamp: config-extra.h src/libnm-platform/wpan/.dirstamp: config-extra.h src/libnm-std-aux/.dirstamp: config-extra.h -src/libnm-udev-aux/.dirstamp: config-extra.h src/libnm-systemd-shared/.dirstamp: config-extra.h src/libnm-systemd-shared/src/basic/.dirstamp: config-extra.h src/libnm-systemd-shared/src/fundamental/.dirstamp: config-extra.h src/libnm-systemd-shared/src/shared/.dirstamp: config-extra.h -src/libnm-client-public/.dirstamp: config-extra.h -src/libnm-client-public/.dirstamp: config-extra.h -src/core/dhcp/.dirstamp: config-extra.h +src/libnm-udev-aux/.dirstamp: config-extra.h dist-configure-check: @echo "*** 'make dist' requires '--enable-gtk-doc --enable-introspection'. ***" @@ -21463,9 +21602,6 @@ $(examples_C_glib_vpn_import_libnm_OBJECTS): $(src_libnm_core_public_mkenums_h) ############################################################################### -@WITH_PYTHON_BLACK_TRUE@check-python-black: -@WITH_PYTHON_BLACK_TRUE@ test "$$NMTST_SKIP_PYTHON_BLACK" == 1 || $(BLACK) --check $(top_srcdir) $(top_srcdir)/examples/python/gi/nm-wg-set - ############################################################################### check-tree: diff --git a/NEWS b/NEWS index 4ed50b5a..2f703b3a 100644 --- a/NEWS +++ b/NEWS @@ -1,20 +1,67 @@ -=============================================== -NetworkManager-1.36.4 -Overview of changes since NetworkManager-1.36.2 -=============================================== +============================================= +NetworkManager-1.38 +Overview of changes since NetworkManager-1.36 +============================================= +This is a snapshot of NetworkManager development. 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! + +* Add support for route type "throw". +* Fix bug setting priority for IP addresses. +* Static IPv6 addresses from "ipv6.addresses" are now preferred over + addresses from DHCPv6, which are preferred over addresses from autoconf. + This affects IPv6 source address selection, if the rules from + RFC 6724, section 5 don't give a exhaustive match. +* Static IPv6 addresses from "ipv6.addresses" are now interpreted with + first address being preferred. Their order got inverted. This is now + consistent with IPv4. +* Wi-Fi hotspots will use a (stable) random channel number unless one is + chosen manually. +* Don't use unsupported SAE/WPA3 mode for AP mode. +* NetworkManager will no longer advertise frequencies as supported when + they're disallowed in configured regulatory domain. +* Attempt to connect to WEP-encrypted Wi-Fi network will now fail + gracefully with a recent version of wpa_supplicant when built + without WEP support. As long as wpa_supplicant supports WEP, + NetworkManager will continue to work. +* Disable WPA3 transition mode for wifi.key-mgmt=wpa-psk if the NIC + does not support PMF. This is known to cause problems in some setups. It + is still possible to explicitly configure wifi.key-mgmt=sae for WPA3. +* Add new dummy crypto backend "null" that does nothing. NetworkManager + uses the crypto library when handling certificates for 802.1x profiles. +* Veth devices with name "eth*" are now managed by default via the + udev rule. This is to support managing the network in LXD containers. +* The hostname received from DHCP is now shortened to the first dot + (or to 64 characters, whatever comes first) if it's too long. +* As the insecure WEP encryption for Wi-Fi network is phased out, + nmcli now discourages its use when activating or modifying a + profile. +* Fix connectivity checks in case the check endpoint address resolves to + multiple addresses. +* Workaround libcurl blocking NetworkManager while resolving DNS names. +* nmcli: indicate missing Wi-Fi hardware when showing rfkill setting. +* nmcli: add connection migrate command to move a profile to a specified + settings plugin. This allows to convert profiles in the deprecated ifcfg-rh + format to keyfile. +* Set "src" attribute for routes from DHCPv4 to the leased address. This + helps with source address selection. +* Updated translations. +* Various bugfixes and internal improvements. + +The following changes were backported to 1.36.x releases between 1.36.0 +and 1.36.4 are also present in NetworkManager-1.38: + +- 1.36.4 * The internal DHCPv4 client now discards NAKs packets coming from servers different from the one that sent the offer. -* Fix activation of PPPoE connections with "pppoe.parent" unset. +* Fixed a couple of regressions in PPPoE support since 1.36.0. * Fix potential libnm crash when the client object initialization gets canceled. * Other various fixes and improvements. -============================================= -NetworkManager-1.36.2 -Overview of changes since NetworkManager-1.36 -============================================= - +- 1.36.2 * When the list of plugins is not specified via "main.plugins" in NetworkManager.conf and no build-time default is set with "--with-config-plugins-default" configure argument, now all known diff --git a/README b/README deleted file mode 100644 index 1676c2d6..00000000 --- a/README +++ /dev/null @@ -1,88 +0,0 @@ -****************** -NetworkManager core daemon has moved to gitlab.freedesktop.org! - -git clone https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git -****************** - - -Networking that Just Works --------------------------- - -NetworkManager attempts to keep an active network connection available at all -times. The point of NetworkManager is to make networking configuration and -setup as painless and automatic as possible. NetworkManager is intended to -replace default route, replace other routes, set IP addresses, and in general -configure networking as NM sees fit (with the possibility of manual override as -necessary). In effect, the goal of NetworkManager is to make networking Just -Work with a minimum of user hassle, but still allow customization and a high -level of manual network control. If you have special needs, we'd like to hear -about them, but understand that NetworkManager is not intended for every -use-case. - -NetworkManager will attempt to keep every network device in the system up and -active, as long as the device is available for use (has a cable plugged in, -the killswitch isn't turned on, etc). Network connections can be set to -'autoconnect', meaning that NetworkManager will make that connection active -whenever it and the hardware is available. - -"Settings services" store lists of user- or administrator-defined "connections", -which contain all the settings and parameters required to connect to a specific -network. NetworkManager will _never_ activate a connection that is not in this -list, or that the user has not directed NetworkManager to connect to. - - -How it works: - -The NetworkManager daemon runs as a privileged service (since it must access -and control hardware), but provides a D-Bus interface on the system bus to -allow for fine-grained control of networking. NetworkManager does not store -connections or settings, it is only the mechanism by which those connections -are selected and activated. - -To store pre-defined network connections, two separate services, the "system -settings service" and the "user settings service" store connection information -and provide these to NetworkManager, also via D-Bus. Each settings service -can determine how and where it persistently stores the connection information; -for example, the GNOME applet stores its configuration in GConf, and the system -settings service stores its config in distro-specific formats, or in a distro- -agnostic format, depending on user/administrator preference. - -A variety of other system services are used by NetworkManager to provide -network functionality: wpa_supplicant for wireless connections and 802.1x -wired connections, pppd for PPP and mobile broadband connections, DHCP clients -for dynamic IP addressing, dnsmasq for proxy nameserver and DHCP server -functionality for internet connection sharing, and avahi-autoipd for IPv4 -link-local addresses. Most communication with these daemons occurs, again, -via D-Bus. - - -Why doesn't my network Just Work? - -Driver problems are the #1 cause of why NetworkManager sometimes fails to -connect to wireless networks. Often, the driver simply doesn't behave in a -consistent manner, or is just plain buggy. NetworkManager supports _only_ -those drivers that are shipped with the upstream Linux kernel, because only -those drivers can be easily fixed and debugged. ndiswrapper, vendor binary -drivers, or other out-of-tree drivers may or may not work well with -NetworkManager, precisely because they have not been vetted and improved by the -open-source community, and because problems in these drivers usually cannot -be fixed. - -Sometimes, command-line tools like 'iwconfig' will work, but NetworkManager will -fail. This is again often due to buggy drivers, because these drivers simply -aren't expecting the dynamic requests that NetworkManager and wpa_supplicant -make. Driver bugs should be filed in the bug tracker of the distribution being -run, since often distributions customize their kernel and drivers. - -Sometimes, it really is NetworkManager's fault. If you think that's -the case, please file a bug at: - -https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues - -Attaching NetworkManager debug logs from the journal (or wherever your -distribution directs syslog's 'daemon' facility output, as -/var/log/messages or /var/log/daemon.log) is often very helpful, and -(if you can get) a working wpa_supplicant config file helps -enormously. See the logging section of file -contrib/fedora/rpm/NetworkManager.conf for how to enable debug logging -in NetworkManager. diff --git a/README.md b/README.md new file mode 100644 index 00000000..1676c2d6 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +****************** +NetworkManager core daemon has moved to gitlab.freedesktop.org! + +git clone https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git +****************** + + +Networking that Just Works +-------------------------- + +NetworkManager attempts to keep an active network connection available at all +times. The point of NetworkManager is to make networking configuration and +setup as painless and automatic as possible. NetworkManager is intended to +replace default route, replace other routes, set IP addresses, and in general +configure networking as NM sees fit (with the possibility of manual override as +necessary). In effect, the goal of NetworkManager is to make networking Just +Work with a minimum of user hassle, but still allow customization and a high +level of manual network control. If you have special needs, we'd like to hear +about them, but understand that NetworkManager is not intended for every +use-case. + +NetworkManager will attempt to keep every network device in the system up and +active, as long as the device is available for use (has a cable plugged in, +the killswitch isn't turned on, etc). Network connections can be set to +'autoconnect', meaning that NetworkManager will make that connection active +whenever it and the hardware is available. + +"Settings services" store lists of user- or administrator-defined "connections", +which contain all the settings and parameters required to connect to a specific +network. NetworkManager will _never_ activate a connection that is not in this +list, or that the user has not directed NetworkManager to connect to. + + +How it works: + +The NetworkManager daemon runs as a privileged service (since it must access +and control hardware), but provides a D-Bus interface on the system bus to +allow for fine-grained control of networking. NetworkManager does not store +connections or settings, it is only the mechanism by which those connections +are selected and activated. + +To store pre-defined network connections, two separate services, the "system +settings service" and the "user settings service" store connection information +and provide these to NetworkManager, also via D-Bus. Each settings service +can determine how and where it persistently stores the connection information; +for example, the GNOME applet stores its configuration in GConf, and the system +settings service stores its config in distro-specific formats, or in a distro- +agnostic format, depending on user/administrator preference. + +A variety of other system services are used by NetworkManager to provide +network functionality: wpa_supplicant for wireless connections and 802.1x +wired connections, pppd for PPP and mobile broadband connections, DHCP clients +for dynamic IP addressing, dnsmasq for proxy nameserver and DHCP server +functionality for internet connection sharing, and avahi-autoipd for IPv4 +link-local addresses. Most communication with these daemons occurs, again, +via D-Bus. + + +Why doesn't my network Just Work? + +Driver problems are the #1 cause of why NetworkManager sometimes fails to +connect to wireless networks. Often, the driver simply doesn't behave in a +consistent manner, or is just plain buggy. NetworkManager supports _only_ +those drivers that are shipped with the upstream Linux kernel, because only +those drivers can be easily fixed and debugged. ndiswrapper, vendor binary +drivers, or other out-of-tree drivers may or may not work well with +NetworkManager, precisely because they have not been vetted and improved by the +open-source community, and because problems in these drivers usually cannot +be fixed. + +Sometimes, command-line tools like 'iwconfig' will work, but NetworkManager will +fail. This is again often due to buggy drivers, because these drivers simply +aren't expecting the dynamic requests that NetworkManager and wpa_supplicant +make. Driver bugs should be filed in the bug tracker of the distribution being +run, since often distributions customize their kernel and drivers. + +Sometimes, it really is NetworkManager's fault. If you think that's +the case, please file a bug at: + +https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues + +Attaching NetworkManager debug logs from the journal (or wherever your +distribution directs syslog's 'daemon' facility output, as +/var/log/messages or /var/log/daemon.log) is often very helpful, and +(if you can get) a working wpa_supplicant config file helps +enormously. See the logging section of file +contrib/fedora/rpm/NetworkManager.conf for how to enable debug logging +in NetworkManager. diff --git a/TODO b/TODO index efb1e909..10975103 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,107 @@ So you're interested in hacking on NetworkManager? Here's some cool stuff you could do... -* Use netlink API instead of ioctl based ethtool. +Improve Shutdown of NetworkManager +================================== + +NetworkManager quits when receiving SIGTERM. + +Currently, it stops iterating the GMainContext (g_main_loop_quit()) and performs +some synchronous cleanup actions. + +That is problematic for the following reasons. + +- We generally avoid blocking operations in NetworkManager (except currently during shutdown). + Hence it's normal at any time to have async operations pending. Async operations + with glib basically mean that we will receive a callback from the mainloop. For that + to work, we need to keep iterating the GMainContext. If we stop iterating, + we cannot cleanup the pending operations and leak resources. It's not possible + to free all resources, unless we iterate as long as we have pending operations. + + That is because even if you g_cancellable_cancel() an sync operation, you still + get a callback. The fact that an async operation will always get (one) callback + invocation is an important guarantee in glib. If we no longer have that guarantee, + it would be effectively impossible to implement cancellation and proper cleanup + and it would require to do that for all async operations (changing the guaranteed + semantics of all async operations). + + Often it wouldn't matter whether we free all resources during shutdown. However, + unless we have a strict policy and method for freeing all, we will inevitably + leak resources where it does matter. + + It's anyway hard to move from a "running" state to a "shutdown" state. It's + impossible to get right, if we have pending async operations that no longer can + complete. + +- Once we stop iterating the mainloop, we also cannot make async operations anymore. + This reduces our shutdown to blocking operations (or a string of async operations that + get chained together to one blocking operation, e.g. by using a separate GMainContext). + This is very limiting, also because it's getting really hard to do things in + parallel (unless you strongly intertwine them or essentially re-implement a + main loop). Doing things in parallel will be necessary, for example if deactivate + two devices, then both should shutdown in parallel. + +The real problem is that our shutdown is really messy due to this. And this is a +fundamental limitation of the current implementation. + +The solution will be the following. + +When we receive SIGTERM we go into shutdown mode. This may mean to reject new D-Bus +requests and in general to move into a shutdown state. All the while we keep iterating +the GMainContext, but we also start to tear down and cancel/complete pending operations. +While we do that, we may need to start new async operations. For example, during +shutdown we may want to kill dnsmasq, which itself is a new asynchronous operation. + +The API nm_shutdown_wait_obj_register_object() and family allow for things to register +themselves to block shutdown. This works using weak pointers. Basically, NetworkManager will +keep iterating the GMainContext as long as we have objects registered there. While shutting +down, we expect those objects to complete and unregister themselves. + +Currently, our singleton objects (NM_DEFINE_SINGLETON_REGISTER) get unrefed after +the `main()` functions. For some/all of those singletons, during SIGTERM we may +want to register them as nm_shutdown_wait_obj_register_object() and unref them when +we initiate the shutdown. +Singletons also use weak pointers and can work together with nm_shutdown_wait_obj_register_object(). +For that to work, we need that nobody is calling the singleton getter *after* shutdown +starts. That means, instead of using the singleton getter, you need to get the reference +from somebody. For example, NMDevice has a reference to a NMNetns and NMPlatform +and should use those instead of NM_PLATFORM_GET(). For those singeltons that works +this way (maybe all of them), the singleton getters only works reliably before +shutdown starts. And no singleton getters work reliably after the main() function +because singletons unref themselves. In general, avoid singleton getters and see +that somebody hands you a reference. + +After NM_SHUTDOWN_TIMEOUT_MAX_MSEC we loose patience that it's taking too long. +We now log a debug message about who is still blocking shutdown. +We also cancel the cancellables from nm_shutdown_wait_obj_register_cancellable() +and give NM_SHUTDOWN_TIMEOUT_ADDITIONAL_MSEC more time. If we then are still +not complete, we log an error message about who is still blocking shutdown, +and just exit with an assertion failure. We encountered a bug. + +This means, *all* async operations in NetworkManager must either be cancellable (and +afterwards complete fast) or they must not take long to begin with. In particular, +every individual async operation must be completed in at most NM_SHUTDOWN_TIMEOUT_MAX_MSEC, +and all async cleanup operations must complete in NM_SHUTDOWN_TIMEOUT_MAX_MSEC too. + +So if you make an async operation not cancellable, but guarantee that you don't take +longer than NM_SHUTDOWN_TIMEOUT_MAX_MSEC you are mostly fine (better would be to actually +complete fast, if you can). That's why reaching NM_SHUTDOWN_TIMEOUT_MAX_MSEC timeout is +still not a bug scenario. But reaching NM_SHUTDOWN_TIMEOUT_MAX_MSEC+NM_SHUTDOWN_TIMEOUT_ADDITIONAL_MSEC +is a bug. + +As NM_SHUTDOWN_TIMEOUT_MAX_MSEC and nm_shutdown_wait_obj_register_object() API already exists, +the first step is to ensure that all parts of NetworkManager can be shutdown and be terminated +in a timely manner. + +The second step is to replace the current sync cleanup operations with iterating the +GMainContext. This is gonna be difficult. + +Search for `FIXME(shutdown` for places that are related to this effort and that need +consideration. + + +Use netlink API instead of ioctl based ethtool +============================================== NetworkManager uses ethtool API to set/obtain certain settings of network devices. This is an ioctl based API and implmented in "src/platform/nm-platform-utils.c". @@ -15,14 +115,16 @@ also implements this API, however it is under an incompatible license, so better don't look and make sure not to use the code. -* Add 802-1x capability to nmtui. +Add 802-1x capability to nmtui +============================== Add dialogs to nmtui for 802-1x. This will be useful for ethernet (with 802-1x port authentication), enterprise Wi-Fi and MACSec. From the GUI and dialog design, possibly get inspired by nm-connection-editor. -* Ethernet Network Auto-detection +Ethernet Network Auto-detection +=============================== There are various methods we can use to autodetect which wired network connection to use if the user connects to more than one wired network on a frequent basis. @@ -80,7 +182,8 @@ un-authenticated connections and that additional credentials are required to successfully connect to this network. -* VPN re-connect (bgo #349151) +VPN re-connect (bgo #349151) +============================ NM should remember whether a VPN was connected if a connection disconnects (like Wi-Fi drops out or short carrier drop) or if the laptop goes to sleep. @@ -90,7 +193,8 @@ the VPN because Wi-Fi choked for 10 seconds, but reconnect the VPN if it was connected before the drop. -* VPN IP Methods +VPN IP Methods +============== Some VPNs (openvpn with TAP for example) require that DHCP is run on a pseudo-ethernet device to obtain addressing information. Currenty, this is not @@ -133,7 +237,8 @@ failure of the VPN connection, just like DHCP timeouts and lease-renewal failures do for other devices (see dhcp_state_changed() in nm-device.c). -* VPN Service Daemon Secret Requests +VPN Service Daemon Secret Requests +================================== In addition to NM asking the service daemons whether more secrets are required, VPN service daemons (like nm-vpnc-service, nm-openvpn-service, etc) should be @@ -171,7 +276,8 @@ challenge-response and does not use the "--non-inter" flag which suppresses that behavior. -* WPS +WPS +=== wpa_supplicant has support for WPS (Wifi Protected Setup, basically Bluetooth- like PIN codes for setting up a wifi connection) and we should add support for @@ -215,7 +321,8 @@ because the user has no physical access to the router itself, but has been given as passphrase/PSK instead. -* Better Tablet/Mobile Behavior +Better Tablet/Mobile Behavior +============================= There are a few components to this: diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh index 7f3523d3..8dab662a 100644 --- a/build-aux/ltmain.sh +++ b/build-aux/ltmain.sh @@ -2124,7 +2124,7 @@ fi # a configuration failure hint, and exit. func_fatal_configuration () { - func_fatal_error ${1+"$@"} \ + func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } @@ -2415,17 +2415,10 @@ libtool_validate_options () # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac + # Keeping compiler generated duplicates in $postdeps and $predeps is not + # harmful, and is necessary in a majority of systems that use it to satisfy + # symbol dependencies. + opt_duplicate_compiler_generated_deps=: $opt_help || { # Sanity checks first: @@ -7272,12 +7265,10 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" diff --git a/config.h.in b/config.h.in index f3c90986..26121c1f 100644 --- a/config.h.in +++ b/config.h.in @@ -101,6 +101,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_PPPD_PPPD_H +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT diff --git a/configure b/configure index 08f511a1..20631292 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for NetworkManager 1.36.4. +# Generated by GNU Autoconf 2.69 for NetworkManager 1.37.92. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='1.36.4' -PACKAGE_STRING='NetworkManager 1.36.4' +PACKAGE_VERSION='1.37.92' +PACKAGE_STRING='NetworkManager 1.37.92' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -642,9 +642,6 @@ HAVE_DOCS_FALSE HAVE_DOCS_TRUE BUILD_DOCS_FALSE BUILD_DOCS_TRUE -WITH_PYTHON_BLACK_FALSE -WITH_PYTHON_BLACK_TRUE -BLACK XSLTPROC PERL GTK_DOC_USE_REBASE_FALSE @@ -1747,7 +1744,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures NetworkManager 1.36.4 to adapt to many kinds of systems. +\`configure' configures NetworkManager 1.37.92 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1819,7 +1816,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 1.36.4:";; + short | recursive ) echo "Configuration of NetworkManager 1.37.92:";; esac cat <<\_ACEOF @@ -1941,7 +1938,7 @@ Optional Packages: NetworkManager.conf --with-polkit-agent-helper-1=/path/to/polkit-agent-helper-1 Path to the polkit-agent-helper-1 binary from polkit - --with-crypto=nss|gnutls + --with-crypto=nss|gnutls|null Cryptography library to use for certificate and key operations --with-dbus-sys-dir=DIR where D-BUS system.d directory is @@ -2170,7 +2167,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 1.36.4 +NetworkManager configure 1.37.92 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2943,7 +2940,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by NetworkManager $as_me 1.36.4, which was +It was created by NetworkManager $as_me 1.37.92, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3813,7 +3810,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='1.36.4' + VERSION='1.37.92' cat >>confdefs.h <<_ACEOF @@ -17996,9 +17993,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu NM_MAJOR_VERSION=1 -NM_MINOR_VERSION=36 -NM_MICRO_VERSION=4 -NM_VERSION=1.36.4 +NM_MINOR_VERSION=37 +NM_MICRO_VERSION=92 +NM_VERSION=1.37.92 @@ -18006,7 +18003,7 @@ NM_VERSION=1.36.4 -NM_GIT_SHA=4e8e5bdfc2ab6b51b9f8626512089a1f0c94cce6 +NM_GIT_SHA=a845a3425f9500f85fad62a9f2f08f320241b0fa if test """" != "no-config-h" ; then @@ -22090,7 +22087,7 @@ fi # default location if test -z "$with_systemdsystemunitdir" && $PKG_CONFIG systemd; then : - with_systemdsystemunitdir="\$(prefix)/lib/systemd/system" + with_systemdsystemunitdir=`$PKG_CONFIG systemd '--define-variable=prefix=${prefix}' '--define-variable=root_prefix=${prefix}' --variable systemdsystemunitdir` fi if test -z "$with_systemdsystemunitdir"; then : with_systemdsystemunitdir=no @@ -24643,8 +24640,10 @@ elif test "$with_crypto" = 'gnutls'; then if test "${have_crypto_gnutls}" != "yes"; then as_fn_error $? "No usable gnutls found for --with-crypto=gnutls" "$LINENO" 5 fi +elif test "$with_crypto" = 'null'; then + : else - as_fn_error $? "Please choose either 'nss' or 'gnutls' for certificate and crypto operations" "$LINENO" 5 + as_fn_error $? "Please choose either 'nss', 'gnutls' or 'null' for certificate and crypto operations" "$LINENO" 5 fi if test "$with_crypto" = 'nss'; then WITH_NSS_TRUE= @@ -28527,11 +28526,13 @@ test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then - ,as_fn_error $? "Threads are required for the NetworkManager tests" "$LINENO" 5 + +$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h + : else ax_pthread_ok=no - + as_fn_error $? "Threads are required for the NetworkManager tests" "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -29708,61 +29709,12 @@ else have_introspection=no fi -# check for python black. And check if all files are formatted with python black -# Extract the first word of "black", so it can be a program name with args. -set dummy black; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_BLACK+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $BLACK in - [\\/]* | ?:[\\/]*) - ac_cv_path_BLACK="$BLACK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_BLACK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -BLACK=$ac_cv_path_BLACK -if test -n "$BLACK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BLACK" >&5 -$as_echo "$BLACK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "${BLACK}" != ""; then - WITH_PYTHON_BLACK_TRUE= - WITH_PYTHON_BLACK_FALSE='#' -else - WITH_PYTHON_BLACK_TRUE='#' - WITH_PYTHON_BLACK_FALSE= -fi - - # check for pregenerated manpages and documentation to be installed use_pregen_docs=no if test "$build_docs" != "yes" -a \ - -f "$srcdir"/man/NetworkManager.8 -a \ -f "$srcdir"/man/NetworkManager-dispatcher.8 -a \ + -f "$srcdir"/man/NetworkManager-wait-online.service.8 -a \ + -f "$srcdir"/man/NetworkManager.8 -a \ -f "$srcdir"/man/NetworkManager.conf.5 -a \ -f "$srcdir"/man/nm-online.1 -a \ -f "$srcdir"/man/nmcli-examples.7 -a \ @@ -30103,10 +30055,6 @@ if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}" as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${WITH_PYTHON_BLACK_TRUE}" && test -z "${WITH_PYTHON_BLACK_FALSE}"; then - as_fn_error $? "conditional \"WITH_PYTHON_BLACK\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -30512,7 +30460,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by NetworkManager $as_me 1.36.4, which was +This file was extended by NetworkManager $as_me 1.37.92, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30578,7 +30526,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -NetworkManager config.status 1.36.4 +NetworkManager config.status 1.37.92 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 60d3bc5c..038cda33 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], [36]) -m4_define([nm_micro_version], [4]) +m4_define([nm_minor_version], [37]) +m4_define([nm_micro_version], [92]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) @@ -21,7 +21,7 @@ AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) AC_REQUIRE_AUX_FILE([tap-driver.sh]) -AM_INIT_AUTOMAKE(1.12 tar-ustar no-dist-gzip dist-xz -Wno-portability) dnl NB: Do not [quote] this parameter. +AM_INIT_AUTOMAKE(1.12 foreign tar-ustar no-dist-gzip dist-xz -Wno-portability) dnl NB: Do not [quote] this parameter. AM_MAINTAINER_MODE([enable]) AM_SILENT_RULES([yes]) @@ -323,7 +323,7 @@ AC_ARG_WITH([systemdsystemunitdir], [Directory for systemd service files])) # default location AS_IF([test -z "$with_systemdsystemunitdir" && $PKG_CONFIG systemd], - with_systemdsystemunitdir="\$(prefix)/lib/systemd/system") + with_systemdsystemunitdir=`$PKG_CONFIG systemd '--define-variable=prefix=${prefix}' '--define-variable=root_prefix=${prefix}' --variable systemdsystemunitdir`) AS_IF([test -z "$with_systemdsystemunitdir"], with_systemdsystemunitdir=no) # add conditional and subst AM_CONDITIONAL(HAVE_SYSTEMD, [test "$with_systemdsystemunitdir" != no]) @@ -718,7 +718,7 @@ AM_CONDITIONAL(HAVE_CRYPTO_GNUTLS, test "${have_crypto_gnutls}" = 'yes') AM_CONDITIONAL(HAVE_CRYPTO_NSS, test "${have_crypto_nss}" = 'yes') AC_ARG_WITH(crypto, - AS_HELP_STRING([--with-crypto=nss|gnutls], + AS_HELP_STRING([--with-crypto=nss|gnutls|null], [Cryptography library to use for certificate and key operations]), with_crypto=$withval, with_crypto=nss) @@ -730,8 +730,10 @@ elif test "$with_crypto" = 'gnutls'; then if test "${have_crypto_gnutls}" != "yes"; then AC_MSG_ERROR([No usable gnutls found for --with-crypto=gnutls]) fi +elif test "$with_crypto" = 'null'; then + : else - AC_MSG_ERROR([Please choose either 'nss' or 'gnutls' for certificate and crypto operations]) + AC_MSG_ERROR([Please choose either 'nss', 'gnutls' or 'null' for certificate and crypto operations]) fi AM_CONDITIONAL(WITH_NSS, test "$with_crypto" = 'nss') AM_CONDITIONAL(WITH_GNUTLS, test "$with_crypto" = 'gnutls') @@ -1273,7 +1275,7 @@ else fi AC_SUBST(NM_LOG_COMPILER, 'LOG_COMPILER = "$(top_srcdir)/tools/run-nm-test.sh" --called-from-make "$(abs_top_builddir)" "$(LIBTOOL)" "$(with_valgrind)" "'"$with_valgrind_suppressions"'" --launch-dbus=auto') -AX_PTHREAD([,AC_MSG_ERROR([Threads are required for the NetworkManager tests])]) +AX_PTHREAD([], [AC_MSG_ERROR([Threads are required for the NetworkManager tests])]) if test -n "$PYTHON" ; then AM_PATH_PYTHON([], [], []) @@ -1318,15 +1320,12 @@ else have_introspection=no fi -# check for python black. And check if all files are formatted with python black -AC_PATH_PROG(BLACK, black) -AM_CONDITIONAL(WITH_PYTHON_BLACK, test "${BLACK}" != "") - # check for pregenerated manpages and documentation to be installed use_pregen_docs=no if test "$build_docs" != "yes" -a \ - -f "$srcdir"/man/NetworkManager.8 -a \ -f "$srcdir"/man/NetworkManager-dispatcher.8 -a \ + -f "$srcdir"/man/NetworkManager-wait-online.service.8 -a \ + -f "$srcdir"/man/NetworkManager.8 -a \ -f "$srcdir"/man/NetworkManager.conf.5 -a \ -f "$srcdir"/man/nm-online.1 -a \ -f "$srcdir"/man/nmcli-examples.7 -a \ diff --git a/data/85-nm-unmanaged.rules b/data/85-nm-unmanaged.rules index eae8d7ce..b4f805cf 100644 --- a/data/85-nm-unmanaged.rules +++ b/data/85-nm-unmanaged.rules @@ -24,7 +24,11 @@ ATTR{address}=="00:1c:42:*", ENV{INTERFACE}=="vnic[0-9]*", ENV{NM_UNMANAGED}="1" # Virtual Ethernet device pair. Often used to communicate with a peer interface # in another net namespace and managed by libvirt, Docker or the like. -ENV{ID_NET_DRIVER}=="veth", ENV{NM_UNMANAGED}="1" +# Generally we don't want to mess with those. One exception would be the +# full system containers, like LXC or LXD. LXC containers run via libvirt +# don't use udev, so this doesn't apply. LXD does, though. To deal with the +# LXD situation, let's treat the devices called eth* as regular ethernet. +ENV{ID_NET_DRIVER}=="veth", ENV{INTERFACE}!="eth[0-9]*", ENV{NM_UNMANAGED}="1" # USB gadget device. Unmanage by default, since whatever created it # might want to set it up itself (e.g. activate an ipv4.method=shared diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am index fd98aa24..c89dbc44 100644 --- a/docs/api/Makefile.am +++ b/docs/api/Makefile.am @@ -88,6 +88,7 @@ content_files = \ $(top_builddir)/man/NetworkManager.xml \ $(top_builddir)/man/NetworkManager-dispatcher.xml \ $(top_builddir)/man/NetworkManager.conf.xml \ + $(top_builddir)/man/NetworkManager-wait-online.service.xml \ $(top_builddir)/man/nmcli-examples.xml \ $(top_builddir)/man/nm-settings-dbus.xml \ $(top_builddir)/man/nm-settings-keyfile.xml \ diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in index f43ead20..1c5766e4 100644 --- a/docs/api/Makefile.in +++ b/docs/api/Makefile.in @@ -174,7 +174,6 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BLACK = @BLACK@ BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@ BLUEZ5_LIBS = @BLUEZ5_LIBS@ CC = @CC@ @@ -532,6 +531,7 @@ content_files = $(GENERATED_FILES) \ $(top_builddir)/man/NetworkManager.xml \ $(top_builddir)/man/NetworkManager-dispatcher.xml \ $(top_builddir)/man/NetworkManager.conf.xml \ + $(top_builddir)/man/NetworkManager-wait-online.service.xml \ $(top_builddir)/man/nmcli-examples.xml \ $(top_builddir)/man/nm-settings-dbus.xml \ $(top_builddir)/man/nm-settings-keyfile.xml \ @@ -567,6 +567,7 @@ DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ + $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ @@ -629,9 +630,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/api/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/api/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu docs/api/Makefile + $(AUTOMAKE) --foreign docs/api/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.AccessPoint.xml b/docs/api/dbus-org.freedesktop.NetworkManager.AccessPoint.xml index 0bd57458..a3e0d61c 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.AccessPoint.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.AccessPoint.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.AccessPoint org.freedesktop.NetworkManager.AccessPoint - org.freedesktop.NetworkManager.AccessPoint Wi-Fi Access Point + org.freedesktop.NetworkManager.AccessPoint Wi-Fi Access Point. Properties Flags readable u diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.AgentManager.xml b/docs/api/dbus-org.freedesktop.NetworkManager.AgentManager.xml index d411fc2c..b6a73b6a 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.AgentManager.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.AgentManager.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.AgentManager org.freedesktop.NetworkManager.AgentManager - org.freedesktop.NetworkManager.AgentManager Secret Agent Manager + org.freedesktop.NetworkManager.AgentManager Secret Agent Manager. Methods Register (IN s identifier); diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Connection.Active.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Connection.Active.xml index 641b7b2a..d083906a 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Connection.Active.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Connection.Active.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Connection.Active org.freedesktop.NetworkManager.Connection.Active - org.freedesktop.NetworkManager.Connection.Active Active Connection + org.freedesktop.NetworkManager.Connection.Active Active Connection. Signals StateChanged (u state, @@ -61,7 +61,6 @@ StateChanged (u state, u reason); Emitted when the state of the active connection has changed. - Since: 1.8 @@ -73,6 +72,7 @@ StateChanged (u state, (NMActiveConnectionStateReason) Reason code describing the change to the new state. +Since 1.8 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.DHCP4Config.xml b/docs/api/dbus-org.freedesktop.NetworkManager.DHCP4Config.xml index e77331ba..957ed31b 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.DHCP4Config.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.DHCP4Config.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.DHCP4Config org.freedesktop.NetworkManager.DHCP4Config - org.freedesktop.NetworkManager.DHCP4Config IPv4 DHCP Client State + org.freedesktop.NetworkManager.DHCP4Config IPv4 DHCP Client State. Properties Options readable a{sv} diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.DHCP6Config.xml b/docs/api/dbus-org.freedesktop.NetworkManager.DHCP6Config.xml index 941340ad..292abdcd 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.DHCP6Config.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.DHCP6Config.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.DHCP6Config org.freedesktop.NetworkManager.DHCP6Config - org.freedesktop.NetworkManager.DHCP6Config IPv6 DHCP Client State + org.freedesktop.NetworkManager.DHCP6Config IPv6 DHCP Client State. Properties Options readable a{sv} diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Adsl.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Adsl.xml index ca004e54..3b2695aa 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Adsl.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Adsl.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Adsl org.freedesktop.NetworkManager.Device.Adsl - org.freedesktop.NetworkManager.Device.Adsl ADSL Device + org.freedesktop.NetworkManager.Device.Adsl ADSL Device. Properties Carrier readable b diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bluetooth.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bluetooth.xml index c832bc46..6072730d 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bluetooth.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bluetooth.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Bluetooth org.freedesktop.NetworkManager.Device.Bluetooth - org.freedesktop.NetworkManager.Device.Bluetooth Bluetooth Device + org.freedesktop.NetworkManager.Device.Bluetooth Bluetooth Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bond.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bond.xml index 12e733d8..f7fcacbd 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bond.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bond.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Bond org.freedesktop.NetworkManager.Device.Bond - org.freedesktop.NetworkManager.Device.Bond Bonding Device + org.freedesktop.NetworkManager.Device.Bond Bonding Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bridge.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bridge.xml index 23e4fd61..7fa0aad6 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bridge.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Bridge.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Bridge org.freedesktop.NetworkManager.Device.Bridge - org.freedesktop.NetworkManager.Device.Bridge Bridging Device + org.freedesktop.NetworkManager.Device.Bridge Bridging Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Dummy.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Dummy.xml index 74663633..62b26cce 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Dummy.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Dummy.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Dummy org.freedesktop.NetworkManager.Device.Dummy - org.freedesktop.NetworkManager.Device.Dummy Dummy Device + org.freedesktop.NetworkManager.Device.Dummy Dummy Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Generic.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Generic.xml index dda7d477..3a353bf6 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Generic.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Generic.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Generic org.freedesktop.NetworkManager.Device.Generic - org.freedesktop.NetworkManager.Device.Generic Unrecognized Device + org.freedesktop.NetworkManager.Device.Generic Unrecognized Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml index 93717513..f57e395f 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.IPTunnel.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.IPTunnel org.freedesktop.NetworkManager.Device.IPTunnel - org.freedesktop.NetworkManager.Device.IPTunnel IP Tunneling Device + org.freedesktop.NetworkManager.Device.IPTunnel IP Tunneling Device. Properties Mode readable u diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml index 281b6b6e..ae354cd6 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Infiniband.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Infiniband org.freedesktop.NetworkManager.Device.Infiniband - org.freedesktop.NetworkManager.Device.Infiniband Infiniband Device + org.freedesktop.NetworkManager.Device.Infiniband Infiniband Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macsec.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macsec.xml index d778bb48..4b1b6a2c 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macsec.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macsec.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Macsec org.freedesktop.NetworkManager.Device.Macsec - org.freedesktop.NetworkManager.Device.Macsec MACSec Device + org.freedesktop.NetworkManager.Device.Macsec MACSec Device. Properties Parent readable o diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml index 57773728..5d8b8d45 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Macvlan.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Macvlan org.freedesktop.NetworkManager.Device.Macvlan - org.freedesktop.NetworkManager.Device.Macvlan MAC VLAN Device + org.freedesktop.NetworkManager.Device.Macvlan MAC VLAN Device. Properties Parent readable o diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Modem.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Modem.xml index e7dffce3..1eedf1f7 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Modem.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Modem.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Modem org.freedesktop.NetworkManager.Device.Modem - org.freedesktop.NetworkManager.Device.Modem Modem Device + org.freedesktop.NetworkManager.Device.Modem Modem Device. Properties ModemCapabilities readable u @@ -54,8 +54,8 @@ DeviceId readable s An identifier used by the modem backend (ModemManager) that aims to uniquely identify the a device. Can be used to match a connection to a particular device. - Since: 1.20 +Since 1.20 The "OperatorCode" property @@ -65,8 +65,8 @@ OperatorCode readable s The MCC and MNC (concatenated) of the network the modem is connected to. Blank if disconnected or not a 3GPP modem. - Since: 1.20 +Since 1.20 The "Apn" property @@ -75,8 +75,8 @@ OperatorCode readable s Apn readable s The access point name the modem is connected to. Blank if disconnected. - Since: 1.20 +Since 1.20 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.OlpcMesh.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.OlpcMesh.xml index b029c85a..cb71a023 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.OlpcMesh.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.OlpcMesh.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.OlpcMesh org.freedesktop.NetworkManager.Device.OlpcMesh - org.freedesktop.NetworkManager.Device.OlpcMesh OLPC Wireless Mesh Device + org.freedesktop.NetworkManager.Device.OlpcMesh OLPC Wireless Mesh Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Statistics.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Statistics.xml index 88e7cc2c..fce89f6d 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Statistics.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Statistics.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Statistics org.freedesktop.NetworkManager.Device.Statistics - org.freedesktop.NetworkManager.Device.Statistics Device Statistic Counters + org.freedesktop.NetworkManager.Device.Statistics Device Statistic Counters. Properties RefreshRateMs readwrite u diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Team.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Team.xml index 6c80dad3..ce1889e3 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Team.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Team.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Team org.freedesktop.NetworkManager.Device.Team - org.freedesktop.NetworkManager.Device.Team Teaming Device + org.freedesktop.NetworkManager.Device.Team Teaming Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Tun.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Tun.xml index 0ce3e369..5f1ea7e4 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Tun.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Tun.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Tun org.freedesktop.NetworkManager.Device.Tun - org.freedesktop.NetworkManager.Device.Tun Userspace Tunneling Device + org.freedesktop.NetworkManager.Device.Tun Userspace Tunneling Device. Properties Owner readable x diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Veth.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Veth.xml index a410ace0..3e34a661 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Veth.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Veth.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Veth org.freedesktop.NetworkManager.Device.Veth - org.freedesktop.NetworkManager.Device.Veth Virtual Ethernet Device + org.freedesktop.NetworkManager.Device.Veth Virtual Ethernet Device. Properties Peer readable o diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vlan.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vlan.xml index c8921dfa..21e224ad 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vlan.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vlan.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Vlan org.freedesktop.NetworkManager.Device.Vlan - org.freedesktop.NetworkManager.Device.Vlan Virtual LAN Device + org.freedesktop.NetworkManager.Device.Vlan Virtual LAN Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vxlan.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vxlan.xml index c578da3a..9b11c25a 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vxlan.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Vxlan.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Vxlan org.freedesktop.NetworkManager.Device.Vxlan - org.freedesktop.NetworkManager.Device.Vxlan VXLAN Device + org.freedesktop.NetworkManager.Device.Vxlan VXLAN Device. Properties Parent readable o diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.WifiP2P.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.WifiP2P.xml index f2b0d50e..78d31736 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.WifiP2P.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.WifiP2P.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.WifiP2P org.freedesktop.NetworkManager.Device.WifiP2P - org.freedesktop.NetworkManager.Device.WifiP2P Wi-Fi P2P Device + org.freedesktop.NetworkManager.Device.WifiP2P Wi-Fi P2P Device. Methods StartFind (IN a{sv} options); @@ -28,8 +28,8 @@ Description - Since: 1.16 - + + Since 1.16 Method Details @@ -39,17 +39,23 @@ StartFind (IN a{sv} options); - in the range of 1-600 seconds is supported. The default is - 30 seconds. - Start a find operation for Wi-Fi P2P peers. - Since: 1.16 + Start a find operation for Wi-Fi P2P peers. + The options argument accepts the following keys: + + + i timeout: + Timeout value in the range of 1-600 seconds. + The default is 30 seconds. + + IN a{sv} options: - Options of find. Currently, 'timeout' option with value of "i" + Options of find. +Since 1.16 The StopFind() method @@ -58,8 +64,8 @@ StartFind (IN a{sv} options); StopFind (); Stop an ongoing find operation again. - Since: 1.16 +Since 1.16 @@ -71,7 +77,6 @@ StopFind (); PeerAdded (o peer); Emitted when a new Wi-Fi P2P peer is found by the device. - Since: 1.16 @@ -79,6 +84,7 @@ PeerAdded (o peer); The object path of the newly found access point. +Since 1.16 The "PeerRemoved" signal @@ -87,7 +93,6 @@ PeerAdded (o peer); PeerRemoved (o peer); Emitted when a Wi-Fi P2P peer disappears from view of the device. - Since: 1.16 @@ -95,6 +100,7 @@ PeerRemoved (o peer); The object path of the Wi-Fi P2P peer that has disappeared. +Since 1.16 @@ -107,8 +113,8 @@ HwAddress readable s The active hardware address of the device. DEPRECATED. Use the "HwAddress" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.24.0. - Since: 1.16 +Since 1.16 The "Peers" property @@ -117,8 +123,8 @@ HwAddress readable s Peers readable ao List of object paths of peers visible to this Wi-Fi P2P device. - Since: 1.16 +Since 1.16 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.WireGuard.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.WireGuard.xml index 56cb716a..0c6fa36e 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.WireGuard.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.WireGuard.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.WireGuard org.freedesktop.NetworkManager.Device.WireGuard - org.freedesktop.NetworkManager.Device.WireGuard WireGuard Device + org.freedesktop.NetworkManager.Device.WireGuard WireGuard Device. Properties PublicKey readable ay diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wired.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wired.xml index ee46e095..8f92f11a 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wired.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wired.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Wired org.freedesktop.NetworkManager.Device.Wired - org.freedesktop.NetworkManager.Device.Wired Wired Ethernet Device + org.freedesktop.NetworkManager.Device.Wired Wired Ethernet Device. Properties HwAddress readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wireless.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wireless.xml index b07390dc..7987e594 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wireless.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.Wireless.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device.Wireless org.freedesktop.NetworkManager.Device.Wireless - org.freedesktop.NetworkManager.Device.Wireless Wi-Fi Device + org.freedesktop.NetworkManager.Device.Wireless Wi-Fi Device. Methods GetAccessPoints (OUT ao access_points); @@ -199,8 +199,8 @@ LastScan readable x The timestamp (in CLOCK_BOOTTIME milliseconds) for the last finished network scan. A value of -1 means the device never scanned for access points. - Since: 1.12 +Since 1.12 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Device.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Device.xml index bebd9e58..cf1410be 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Device.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Device.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Device org.freedesktop.NetworkManager.Device - org.freedesktop.NetworkManager.Device Device + org.freedesktop.NetworkManager.Device Device. Methods Reapply (IN a{sa{sv}} connection, @@ -508,9 +508,9 @@ Real readable b Ip4Connectivity readable u The result of the last IPv4 connectivity check. - Since: 1.16 Returns: NMConnectivityState +Since 1.16 The "Ip6Connectivity" property @@ -519,9 +519,9 @@ Ip4Connectivity readable u Ip6Connectivity readable u The result of the last IPv6 connectivity check. - Since: 1.16 Returns: NMConnectivityState +Since 1.16 The "InterfaceFlags" property @@ -532,8 +532,8 @@ InterfaceFlags readable u The flags of the network interface. See NMDeviceInterfaceFlags for the currently defined flags. - Since: 1.22 +Since 1.22 The "HwAddress" property @@ -543,8 +543,8 @@ HwAddress readable s The hardware address of the device. This replaces the other 'HwAddress' properties on the device-specific D-Bus interfaces. - Since: 1.24 +Since 1.24 The "Ports" property @@ -556,8 +556,8 @@ Ports readable ao Array of object paths representing devices which are currently set as port of this device. This replaces the 'Slaves' properties on the device-specific D-Bus interfaces. - Since: 1.34 +Since 1.34 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.DnsManager.xml b/docs/api/dbus-org.freedesktop.NetworkManager.DnsManager.xml index 4529e7d4..70b30f88 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.DnsManager.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.DnsManager.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.DnsManager org.freedesktop.NetworkManager.DnsManager - org.freedesktop.NetworkManager.DnsManager DNS Configuration State + org.freedesktop.NetworkManager.DnsManager DNS Configuration State. Properties Mode readable s diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.IP4Config.xml b/docs/api/dbus-org.freedesktop.NetworkManager.IP4Config.xml index e4f2d9c7..4f90746c 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.IP4Config.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.IP4Config.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.IP4Config org.freedesktop.NetworkManager.IP4Config - org.freedesktop.NetworkManager.IP4Config IPv4 Configuration Set + org.freedesktop.NetworkManager.IP4Config IPv4 Configuration Set. Properties Addresses readable aau @@ -101,8 +101,8 @@ NameserverData readable aa{sv} The nameservers in use. Currently, only the value "address" is recognized (with an IP address string). - Since: 1.14 +Since 1.14 The "Domains" property @@ -158,8 +158,8 @@ WinsServers readable au WinsServerData readable as The Windows Internet Name Service servers associated with the connection. - Since: 1.14 +Since 1.14 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.IP6Config.xml b/docs/api/dbus-org.freedesktop.NetworkManager.IP6Config.xml index b96263f2..aebdc684 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.IP6Config.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.IP6Config.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.IP6Config org.freedesktop.NetworkManager.IP6Config - org.freedesktop.NetworkManager.IP6Config IPv6 Configuration Set + org.freedesktop.NetworkManager.IP6Config IPv6 Configuration Set. Properties Addresses readable a(ayuay) diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.PPP.xml b/docs/api/dbus-org.freedesktop.NetworkManager.PPP.xml index f8254186..aae14d35 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.PPP.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.PPP.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.PPP org.freedesktop.NetworkManager.PPP - org.freedesktop.NetworkManager.PPP Helper interface for a PPP plugin + org.freedesktop.NetworkManager.PPP Helper interface for a PPP plugin. Methods NeedSecrets (OUT s username, diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.SecretAgent.xml b/docs/api/dbus-org.freedesktop.NetworkManager.SecretAgent.xml index 43eaef64..3a9cfa42 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.SecretAgent.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.SecretAgent.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.SecretAgent org.freedesktop.NetworkManager.SecretAgent - org.freedesktop.NetworkManager.SecretAgent User Secret Agent + org.freedesktop.NetworkManager.SecretAgent User Secret Agent. Methods GetSecrets (IN a{sa{sv}} connection, diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Settings.Connection.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Settings.Connection.xml index b0de0550..d7648152 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Settings.Connection.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Settings.Connection.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Settings.Connection org.freedesktop.NetworkManager.Settings.Connection - org.freedesktop.NetworkManager.Settings.Connection Connection Settings Profile + org.freedesktop.NetworkManager.Settings.Connection Connection Settings Profile. Methods Update (IN a{sa{sv}} properties); @@ -163,56 +163,81 @@ Update2 (IN a{sa{sv}} settings, IN a{sv} args, OUT a{sv} result); - Provide an empty array, to use the current settings. - flags: optional flags argument. Currently, supported flags are: - "0x1" (to-disk), - "0x2" (in-memory), - "0x4" (in-memory-detached), - "0x8" (in-memory-only), - "0x10" (volatile), - "0x20" (block-autoconnect), - "0x40" (no-reapply). - Unknown flags cause the call to fail. - args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. - result: output argument, currently no results are returned. - Update the connection with new settings and properties (replacing all - previous settings and properties). If the flag 0x1 is present, - the connection is persisted to disk. If the flag 0x2 is present, - the change is only made in memory (without touching an eventual - profile on disk). If neither 0x1 nor 0x2 is set, the change is made - in memory only, if the connection is already in memory only. - The flags 0x4 (in-memory-detached) and 0x8 (in-memory-only) are like - "in-memory", but behave slightly different when migrating the profile - from disk to in-memory. - The flag 0x20 (block-autoconnect) blocks auto-connect on the updated - profile, and 0x40 (no-reapply) prevents "connection.zone" and "connection.metered" - properties to take effect on currently active devices. - Secrets may be part of the update request, and will be either stored in persistent + Update the connection with new settings and properties (replacing all + previous settings and properties). + Update2 is an alternative to + Update, + UpdateUnsaved + and Save + extensible with extra flags and args arguments. + The flags argument accepts the combination of following values, + logically or-ed together: + + + 0x1 (to-disk): + The connection is persisted to disk. + + + 0x2 (in-memory): + The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only. + + + 0x4 (in-memory-detached): + Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory. + + + 0x8 (in-memory-only): + Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory. + + + 0x10 (volatile): + + + 0x20 (block-autoconnect): + Blocks auto-connect on the updated profile + + + 0x40 (no-reapply): + Prevents "connection.zone" and "connection.metered" properties + to take effect on currently active devices. + + + The args argument accepts the following keys: + + + plugin: + The settings plugin the connection will be migrated to + such as "keyfile" or "ifcfg-rh". + Since 1.38 + + + Secrets may be part of the update request, and will be either stored in persistent storage or sent to a Secret Agent for storage, depending on the flags associated with each secret. - Update2 is a extensible alternative to Update, UpdateUnsaved and Save. - Since: 1.12 IN a{sa{sv}} settings: - New connection settings, properties, and (optionally) secrets. + New connection settings, properties, and (optionally) secrets. Provide an empty array to use the current settings. IN u flags: - + Optional flags. Unknown flags cause the call to fail. IN a{sv} args: - + Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail. OUT a{sv} result: - + Currently no results are returned. +Since 1.12 @@ -264,8 +289,8 @@ Flags readable u Additional flags of the connection profile. Returns: NMSettingsConnectionFlags - Since: 1.12 +Since 1.12 The "Filename" property @@ -274,8 +299,8 @@ Flags readable u Filename readable s File that stores the connection in case the connection is file-backed. - Since: 1.12 +Since 1.12 diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.Settings.xml b/docs/api/dbus-org.freedesktop.NetworkManager.Settings.xml index 68275f4e..3dfc50e1 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.Settings.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.Settings.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.Settings org.freedesktop.NetworkManager.Settings - org.freedesktop.NetworkManager.Settings Connection Settings Profile Manager + org.freedesktop.NetworkManager.Settings Connection Settings Profile Manager. Methods ListConnections (OUT ao connections); @@ -142,24 +142,43 @@ AddConnection2 (IN a{sa{sv}} settings, OUT o path, OUT a{sv} result); - "0x1" (to-disk), - "0x2" (in-memory), - "0x20" (block-autoconnect). - Unknown flags cause the call to fail. - args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. - path: Object path of the new connection that was just added. - result: output argument, currently no additional results are returned. - Add a new connection profile. - Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. - The effect is whether to behave like AddConnection or AddConnectionUnsaved. - If 0x20 (block-autoconnect) is specified, autoconnect for the new profile - is blocked from the beginning. Otherwise, the profile might automatically - connect if a suitable device is around. - AddConnection2 is a extensible alternative to AddConnection, and AddConnectionUnsaved. + Add a new connection profile. + AddConnection2 is an alternative to + AddConnection and + AddConnectionUnsaved. The new variant can do everything that the older variants could, and more. - Since: 1.20 + Its behavior is extensible via extra flags and args arguments. + The flags argument accepts the combination of following values, + logically or-ed together: + + + 0x1 (to-disk): + The connection is persisted to disk. + + + 0x2 (in-memory): + The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only. + + + 0x20 (block-autoconnect): + Blocks auto-connect on the new profile + + + The args argument accepts the following keys: + + + plugin: + The settings plugin the newly added connection will + use, such as "keyfile" or "ifcfg-rh". + Since 1.38 + + + Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. + The effect is whether to behave like + AddConnection or + AddConnectionUnsaved. @@ -168,21 +187,22 @@ AddConnection2 (IN a{sa{sv}} settings, IN u flags: - optional flags argument. Currently, the following flags are supported: + Flags. Unknown flags cause the call to fail. IN a{sv} args: - + Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail. OUT o path: - + Object path of the new connection that was just added. OUT a{sv} result: - + Output argument, currently no additional results are returned. +Since 1.20 The LoadConnections() method @@ -192,13 +212,14 @@ LoadConnections (IN as filenames, OUT b status, OUT as failures); - Note that before 1.20, NetworkManager had a bug and this status value was wrong. It is better to assume success if the method does not return with a D-Bus error. On top of that, you can look at failures to know whether any of the requested files failed. - failures: Paths of connection files that could not be loaded. - Loads or reloads the indicated connections from disk. You should call this + Loads or reloads the indicated connections from disk. You should call this after making changes directly to an on-disk connection file to make sure that NetworkManager sees the changes. As with AddConnection(), this operation does not necessarily start the network connection. + Note that before 1.20, NetworkManager had a bug and this status value was wrong. + It is better to assume success if the method does not return with a D-Bus error. + On top of that, you can look at failures to know whether any of the requested files failed. @@ -211,7 +232,7 @@ LoadConnections (IN as filenames, OUT as failures: - + Paths of connection files that could not be loaded. diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Connection.xml b/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Connection.xml index 0118c67d..1ba37bf2 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Connection.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Connection.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.VPN.Connection org.freedesktop.NetworkManager.VPN.Connection - org.freedesktop.NetworkManager.VPN.Connection Active VPN Connection + org.freedesktop.NetworkManager.VPN.Connection Active VPN Connection. Signals VpnStateChanged (u state, diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Plugin.xml b/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Plugin.xml index 2084cbc5..5604099d 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Plugin.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.VPN.Plugin.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager.VPN.Plugin org.freedesktop.NetworkManager.VPN.Plugin - org.freedesktop.NetworkManager.VPN.Plugin VPN Service + org.freedesktop.NetworkManager.VPN.Plugin VPN Service. Methods Connect (IN a{sa{sv}} connection); diff --git a/docs/api/dbus-org.freedesktop.NetworkManager.xml b/docs/api/dbus-org.freedesktop.NetworkManager.xml index 143f3d23..89664bbc 100644 --- a/docs/api/dbus-org.freedesktop.NetworkManager.xml +++ b/docs/api/dbus-org.freedesktop.NetworkManager.xml @@ -5,7 +5,7 @@ org.freedesktop.NetworkManager org.freedesktop.NetworkManager - org.freedesktop.NetworkManager Connection Manager + org.freedesktop.NetworkManager Connection Manager. Methods Reload (IN u flags); @@ -72,6 +72,7 @@ WwanHardwareEnabled readable b WimaxEnabled readwrite b WimaxHardwareEnabled readable b +RadioFlags readable u ActiveConnections readable ao PrimaryConnection readable o PrimaryConnectionType readable s @@ -123,7 +124,7 @@ Reload (IN u flags); IN u flags: - optional flags to specify which parts shall be reloaded. + Optional flags to specify which parts shall be reloaded. @@ -260,8 +261,7 @@ AddAndActivateConnection2 (IN a{sa{sv}} connection, OUT o active_connection, OUT a{sv} result); - output arguments are supported. - Adds a new connection using the given details (if any) as a template + Adds a new connection using the given details (if any) as a template (automatically filling in missing settings with the capabilities of the given device and specific object), then activate the new connection. Cannot be used for VPN connections at this time. @@ -297,7 +297,7 @@ AddAndActivateConnection2 (IN a{sa{sv}} connection, OUT a{sv} result: - a dictionary of additional output arguments for future extension. Currently, not additional + A dictionary of additional output arguments for future extension. Currently, not additional output arguments are supported. @@ -515,27 +515,26 @@ CheckpointRollback (IN o checkpoint, CheckpointAdjustRollbackTimeout (IN o checkpoint, IN u add_timeout); - timeout will expire. Set to 0 to disable the timeout. - Note that the added seconds start counting from now, - not "Created" timestamp or the previous expiration - time. Note that the "Created" property of the checkpoint - will stay unchanged by this call. However, the "RollbackTimeout" - will be recalculated to give the approximate new expiration time. - The new "RollbackTimeout" property will be approximate up to - one second precision, which is the accuracy of the property. - Reset the timeout for rollback for the checkpoint. - Since: 1.12 + Reset the timeout for rollback for the checkpoint. + Note that the added seconds start counting from now, + not "Created" timestamp or the previous expiration + time. Note that the "Created" property of the checkpoint + will stay unchanged by this call. However, the "RollbackTimeout" + will be recalculated to give the approximate new expiration time. + The new "RollbackTimeout" property will be approximate up to + one second precision, which is the accuracy of the property. IN o checkpoint: - + The checkpoint to be rolled back. IN u add_timeout: - number of seconds from ~now~ in which the + Number of seconds from now in which the timeout will expire. Set to 0 to disable the timeout. +Since 1.12 @@ -697,6 +696,18 @@ WimaxHardwareEnabled readable b compatibility reasons. + + The "RadioFlags" property + org.freedesktop.NetworkManager:RadioFlags + +RadioFlags readable u + + Flags related to radio devices. See NMRadioFlags for the list of flags + supported. + +Since 1.38 + The "ActiveConnections" property org.freedesktop.NetworkManager:ActiveConnections diff --git a/docs/api/html/NetworkManager-dispatcher.html b/docs/api/html/NetworkManager-dispatcher.html index 0343fc1b..d9a80e2f 100644 --- a/docs/api/html/NetworkManager-dispatcher.html +++ b/docs/api/html/NetworkManager-dispatcher.html @@ -7,8 +7,8 @@ - - + + @@ -17,7 +17,7 @@ Home Up Prev -Next +Next

@@ -325,6 +325,6 @@
+
Generated by GTK-Doc V1.33.1
\ No newline at end of file diff --git a/docs/api/html/NetworkManager-wait-online.service.html b/docs/api/html/NetworkManager-wait-online.service.html new file mode 100644 index 00000000..3f6d63d1 --- /dev/null +++ b/docs/api/html/NetworkManager-wait-online.service.html @@ -0,0 +1,150 @@ + + + + +NetworkManager-wait-online.service: NetworkManager Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

NetworkManager-wait-online.service

+

NetworkManager-wait-online.service — Wait for network to come online

+
+
+

Description

+

+ NetworkManager-wait-online.service delays network-online.target until network + is ready. +

+

+ The systemd target network-online.target acts as a synchronization point + for services to start after network is configured. Such services should + order themselves After=network-online.target + (and never After=NetworkManager-wait-online.service). + NetworkManager-wait-online.service is a one-shot service + that itself is ordered Before=network-online.target + and this way delays the target until the network is configured. +

+

+ NetworkManager-wait-online.service itself is almost not configurable + itself. Instead the connection profiles and configuration in NetworkManager affects + the behavior. +

+

+ In the best case, all services on the system can react to networking changes dynamically and + no service orders itself after network-online.target. That way, + NetworkManager-wait-online.service has no effect and, for example, + does not delay the boot. That means, if the problem is a long boot time related to + NetworkManager-wait-online.service, a possible solution is to + investigate the services that claim to require network and fix those. +

+

+ For services that require network configured, + NetworkManager-wait-online.service is the default implementation + provided by NetworkManager to delay the target. But it does nothing magical. With + special requirements, it may be sensible to disable NetworkManager-wait-online.service + and replace it with a similar service that better implements the requirement. +

+

+ NetworkManager-wait-online.service blocks until + NetworkManager logs "startup complete" and announces startup complete + on D-Bus. How long that takes depends on the network + and the NetworkManager configuration. If it takes longer than expected, then + the reasons need to be investigated in NetworkManager. +

+

+ There are various reasons what affects NetworkManager reaching "startup complete" + and how long NetworkManager-wait-online.service blocks. +

+
    +
  • + In general, startup complete is not reached as long as NetworkManager is busy + activating a device and as long as there are profiles in activating state. + During boot, NetworkManager starts autoactivating + suitable profiles that are configured to autoconnect. If activation fails, + NetworkManager might retry right away (depending on connection.autoconnect-retries + setting). While trying and retrying, NetworkManager is busy until all + profiles and devices either reached an activated or disconnected state + and no further events are expected. +

  • +
  • + When a device reaches activated state, depends on its configuration. + For example, with a profile with both IPv4 and IPv6 addressing + enabled, the device is possibly considered fully activated when + either of the address families is ready. This can be controlled with the + ipv4.may-fail and ipv6.may-fail + settings, to indicate that the address family is required. + There are also ipv4.required-timeout and ipv6.required-timeout + settings which affect how long to wait for an address family. + Likewise, properties like ipv4.dhcp-timeout and + ipv6.ra-timeout affect how long NetworkManager + will try the IP configuration before giving up. +

  • +
  • + For example, a bridge or bond profile cannot do IP configuration + without ports. When booting with such profiles that autoactivate + without ports, NetworkManager-wait-online.service blocks until timeout. + This is a configuration error. +

  • +
  • + The property connection.wait-device-timeout of the connection + profiles waits until the waited devices appear. This is useful if the driver + takes a longer time to detect the networking interfaces. +

  • +
  • + With Wi-Fi devices, NetworkManager needs to wait for the first scan + result to know which networks might be available. That always adds a delay. +

  • +
  • + With ethernet devices, NetworkManager waits for carrier until the + configurable [device*].carrier-timeout is reached. + This is because some devices take a long time to detect carrier + and it means to boot with cable unplugged, will unnecessarily delay + NetworkManager-wait-online.service. +

  • +
+

+

+

+ NetworkManager-wait-online.service internally uses + nm-online. +

+
+
+

Bugs

+

+ Please report any bugs in NetworkManager at the + NetworkManager issue tracker. +

+
+ +
+ + + \ No newline at end of file diff --git a/docs/api/html/NetworkManager.conf.html b/docs/api/html/NetworkManager.conf.html index 6e4b0b37..15dfe367 100644 --- a/docs/api/html/NetworkManager.conf.html +++ b/docs/api/html/NetworkManager.conf.html @@ -8,7 +8,7 @@ - + @@ -611,9 +611,37 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth

logging section

-

This section controls NetworkManager's logging. Any - settings here are overridden by the --log-level - and --log-domains command-line options.

+

+ This section controls NetworkManager's logging. + Logging is very important to understand what NetworkManager is doing. + When you report a bug, do not unnecessarily filter or limit the log file. + Just enable level=TRACE and domains=ALL + to collect everything. +

+

+ Any settings here are overridden by the --log-level + and --log-domains command-line options. + Logging can also be reconfigured at runtime with + nmcli general logging level "$LEVEL" domains "$DOMAINS". + However, often it is interesting to get a complete log from the + start. Especially, when debugging an issue, enable debug logging + in NetworkManager.conf and restart the service to enable verbose logging + early on. +

+

+ NetworkManager's logging aims not to contain private sensitive data + and you should be fine sharing the debug logs. Still, there will + be IP addresses and your network setup, if you consider that private + then review the log before sharing. Do not mangle the logfile in + a way that distorts the meaning too much. +

+

+ NetworkManager uses syslog or systemd-journald, depending on configuration. + In any case, debug logs are verbose and might be rate limited + or filtered by the logging daemon. For systemd-journald, see + RateLimitIntervalSec and RateLimitBurst + in journald.conf manual for how to disable that. +

@@ -624,22 +652,37 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth - + DEBUG, TRACE, + in order of verbosity. +

+

+ OFF disables all logging. INFO + is the default verbosity for regular operation. TRACE + is for debugging. +

+

+ The other levels are in most cases not useful. For example, DEBUG + is between TRACE and INFO, but it's too + verbose for regular operation and lacks possibly interesting messages for debugging. + Almost always, when debugging an issue or reporting a bug, collect full + level TRACE logs to get the full picture. +

+ @@ -1794,6 +1841,6 @@ interface-name:vboxnet*,except:interface-name:vboxnet2 +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/NetworkManager.devhelp2 b/docs/api/html/NetworkManager.devhelp2 index b9602e4c..c83bf67f 100644 --- a/docs/api/html/NetworkManager.devhelp2 +++ b/docs/api/html/NetworkManager.devhelp2 @@ -5,6 +5,7 @@ + @@ -202,6 +203,7 @@ + @@ -511,6 +513,7 @@ + @@ -843,6 +846,9 @@ + + + diff --git a/docs/api/html/NetworkManager.html b/docs/api/html/NetworkManager.html index 3f5dfac1..91e7e085 100644 --- a/docs/api/html/NetworkManager.html +++ b/docs/api/html/NetworkManager.html @@ -8,7 +8,7 @@ - + @@ -327,6 +327,7 @@ NetworkManager home page, NetworkManager.conf(5), NetworkManager-dispatcher(8), + NetworkManager-wait-online.service(8), nmcli(1), nmcli-examples(7), nm-online(1), @@ -338,6 +339,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ch01.html b/docs/api/html/ch01.html index 9863c8bd..e4cd603e 100644 --- a/docs/api/html/ch01.html +++ b/docs/api/html/ch01.html @@ -8,7 +8,7 @@ - + @@ -182,6 +182,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/dbus-secret-agent.html b/docs/api/html/dbus-secret-agent.html index b8a0c998..b66890fd 100644 --- a/docs/api/html/dbus-secret-agent.html +++ b/docs/api/html/dbus-secret-agent.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

Secret agents

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/dbus-types.html b/docs/api/html/dbus-types.html index cfdccb55..b5eb97fd 100644 --- a/docs/api/html/dbus-types.html +++ b/docs/api/html/dbus-types.html @@ -8,7 +8,7 @@ - + @@ -27,6 +27,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/dbus-vpn-plugin.html b/docs/api/html/dbus-vpn-plugin.html index 1c6124e0..bb39e395 100644 --- a/docs/api/html/dbus-vpn-plugin.html +++ b/docs/api/html/dbus-vpn-plugin.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

VPN services

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/dbus-vpn-types.html b/docs/api/html/dbus-vpn-types.html index a6c5d516..bb2edb32 100644 --- a/docs/api/html/dbus-vpn-types.html +++ b/docs/api/html/dbus-vpn-types.html @@ -8,7 +8,7 @@ - + @@ -27,6 +27,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.AccessPoint.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.AccessPoint.html index 7bd6ac6c..c22160b0 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.AccessPoint.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.AccessPoint.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

level

The default logging verbosity level. +

+

The default logging verbosity level. One of OFF, ERR, WARN, INFO, - DEBUG, TRACE. The ERR - level logs only critical errors. WARN logs warnings that may - reflect operation. INFO logs various informational messages that - are useful for tracking state and operations. DEBUG enables - verbose logging for debugging purposes. TRACE enables even more - verbose logging then DEBUG level. Subsequent levels also log - all messages from earlier levels; thus setting the log level - to INFO also logs error and warning messages.

domains

-

The following log domains are available: +

Filter the messages by their topic. When debugging + an issue, it's better to collect all logs (ALL domain) + upfront. The unnecessary parts can always be ignored + later. +

+

In the uncommon case to tune out certain topics, the following log + domains are available: PLATFORM, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, @@ -650,7 +693,11 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth ALL, DEFAULT, DHCP, IP.

You can specify per-domain log level overrides by adding a colon and a log level to any domain. E.g., - "WIFI:DEBUG,WIFI_SCAN:OFF".

+ "WIFI:DEBUG,WIFI_SCAN:OFF". + Another example is ALL,VPN_PLUGIN:TRACE + to enable all the logging there is (see about VPN_PLUGIN + below). +

org.freedesktop.NetworkManager.AccessPoint

-

org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point

+

org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point.

@@ -158,6 +158,6 @@ LastSeen readable i
+
Generated by GTK-Doc V1.33.1
\ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.AgentManager.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.AgentManager.html index 4a2591b4..4060e228 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.AgentManager.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.AgentManager.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@

org.freedesktop.NetworkManager.AgentManager

-

org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager

+

org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager.

@@ -105,6 +105,6 @@ Unregister (); +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Checkpoint.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Checkpoint.html index c8427bf1..a09cf762 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Checkpoint.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Checkpoint.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Checkpoint

-

org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot

+

org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot.

@@ -77,6 +77,6 @@ RollbackTimeout readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Connection.Active.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Connection.Active.html index 7de2af06..7c90995f 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Connection.Active.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Connection.Active.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Connection.Active

-

org.freedesktop.NetworkManager.Connection.Active — Active Connection

+

org.freedesktop.NetworkManager.Connection.Active — Active Connection.

@@ -89,8 +89,6 @@ StateChanged (u state,

Emitted when the state of the active connection has changed.

-

Since: 1.8 -

@@ -107,6 +105,7 @@ StateChanged (u state,
+

Since 1.8

@@ -277,6 +276,6 @@ Master readable o
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP4Config.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP4Config.html index 3c371944..8a8a12e4 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP4Config.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP4Config.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.DHCP4Config

-

org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State

+

org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State.

@@ -56,6 +56,6 @@ Options readable a{sv} +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP6Config.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP6Config.html index fa80f1ae..3cad9b7d 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP6Config.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DHCP6Config.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.DHCP6Config

-

org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State

+

org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State.

@@ -56,6 +56,6 @@ Options readable a{sv} +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Adsl.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Adsl.html index d0642057..c6fc268e 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Adsl.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Adsl.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Adsl

-

org.freedesktop.NetworkManager.Device.Adsl — ADSL Device

+

org.freedesktop.NetworkManager.Device.Adsl — ADSL Device.

@@ -58,6 +58,6 @@ Carrier readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bluetooth.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bluetooth.html index e3b2bdf1..7a81d8e3 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bluetooth.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bluetooth.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Bluetooth

-

org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device

+

org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device.

@@ -79,6 +79,6 @@ BtCapabilities readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bond.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bond.html index 7799cb8a..18c1e7b5 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bond.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bond.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Bond

-

org.freedesktop.NetworkManager.Device.Bond — Bonding Device

+

org.freedesktop.NetworkManager.Device.Bond — Bonding Device.

@@ -83,6 +83,6 @@ Slaves readable ao +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bridge.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bridge.html index 43bdf84d..359cba42 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bridge.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Bridge.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Bridge

-

org.freedesktop.NetworkManager.Device.Bridge — Bridging Device

+

org.freedesktop.NetworkManager.Device.Bridge — Bridging Device.

@@ -83,6 +83,6 @@ Slaves readable ao +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Dummy.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Dummy.html index db37e64c..49dbabeb 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Dummy.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Dummy.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Dummy

-

org.freedesktop.NetworkManager.Device.Dummy — Dummy Device

+

org.freedesktop.NetworkManager.Device.Dummy — Dummy Device.

@@ -57,6 +57,6 @@ n +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Generic.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Generic.html index 3b0460ef..49fa6c34 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Generic.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Generic.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Generic

-

org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device

+

org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device.

@@ -67,6 +67,6 @@ TypeDescription readable s +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.IPTunnel.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.IPTunnel.html index 90895a23..8317ece8 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.IPTunnel.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.IPTunnel.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.IPTunnel

-

org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device

+

org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device.

@@ -169,6 +169,6 @@ Flags readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Infiniband.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Infiniband.html index 8f2bcefc..4b844f2d 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Infiniband.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Infiniband.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Infiniband

-

org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device

+

org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device.

@@ -71,6 +71,6 @@ Carrier readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Lowpan.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Lowpan.html index b45c0fb8..875a482b 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Lowpan.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Lowpan.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Lowpan

-

org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device

+

org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device.

@@ -67,6 +67,6 @@ Parent readable o +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macsec.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macsec.html index 434ecbee..9b5d736d 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macsec.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macsec.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Macsec

-

org.freedesktop.NetworkManager.Device.Macsec — MACSec Device

+

org.freedesktop.NetworkManager.Device.Macsec — MACSec Device.

@@ -181,6 +181,6 @@ ReplayProtect readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macvlan.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macvlan.html index 94047cd2..b88940c0 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macvlan.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Macvlan.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Macvlan

-

org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device

+

org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device.

@@ -85,6 +85,6 @@ Tap readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Modem.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Modem.html index 5884a6a7..499505bb 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Modem.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Modem.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Modem

-

org.freedesktop.NetworkManager.Device.Modem — Modem Device

+

org.freedesktop.NetworkManager.Device.Modem — Modem Device.

@@ -83,8 +83,7 @@ DeviceId readable s uniquely identify the a device. Can be used to match a connection to a particular device.

-

Since: 1.20 -

+

Since 1.20


@@ -95,8 +94,7 @@ OperatorCode readable s

The MCC and MNC (concatenated) of the network the modem is connected to. Blank if disconnected or not a 3GPP modem.

-

Since: 1.20 -

+

Since 1.20


@@ -106,12 +104,11 @@ Apn readable s

The access point name the modem is connected to. Blank if disconnected.

-

Since: 1.20 -

+

Since 1.20

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OlpcMesh.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OlpcMesh.html index 5d26a420..86933842 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OlpcMesh.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OlpcMesh.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.OlpcMesh

-

org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device

+

org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device.

@@ -77,6 +77,6 @@ ActiveChannel readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsBridge.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsBridge.html index e5e0d5ab..53cce819 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsBridge.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsBridge.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.OvsBridge

-

org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device

+

org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device.

@@ -53,12 +53,11 @@ Slaves readable ao "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.34.0.

-

Since: 1.14 -

+

Since 1.14

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsInterface.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsInterface.html index 204bb733..a721ed1a 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsInterface.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsInterface.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@

org.freedesktop.NetworkManager.Device.OvsInterface

-

org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device

+

org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device.

@@ -37,6 +37,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsPort.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsPort.html index 542df52b..5d899c3c 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsPort.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.OvsPort.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.OvsPort

-

org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device

+

org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device.

@@ -53,12 +53,11 @@ Slaves readable ao "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.34.0.

-

Since: 1.14 -

+

Since 1.14

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Ppp.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Ppp.html index e26e63ae..850be4c1 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Ppp.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Ppp.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@

org.freedesktop.NetworkManager.Device.Ppp

-

org.freedesktop.NetworkManager.Device.Ppp — PPP Device

+

org.freedesktop.NetworkManager.Device.Ppp — PPP Device.

@@ -37,6 +37,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Statistics.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Statistics.html index a9fdb5f2..df91dcd7 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Statistics.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Statistics.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Statistics

-

org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters

+

org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters.

@@ -78,6 +78,6 @@ RxBytes readable t +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Team.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Team.html index ad6d735f..5ace0af0 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Team.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Team.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Team

-

org.freedesktop.NetworkManager.Device.Team — Teaming Device

+

org.freedesktop.NetworkManager.Device.Team — Teaming Device.

@@ -93,6 +93,6 @@ Config readable s +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Tun.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Tun.html index 2df79868..8495756c 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Tun.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Tun.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Tun

-

org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device

+

org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device.

@@ -120,6 +120,6 @@ n +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Veth.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Veth.html index 789d46ca..c48040f9 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Veth.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Veth.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Veth

-

org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device

+

org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device.

@@ -55,6 +55,6 @@ Peer readable o +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vlan.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vlan.html index 99dfb9ee..b4d98e4b 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vlan.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vlan.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Vlan

-

org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device

+

org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device.

@@ -91,6 +91,6 @@ VlanId readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vrf.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vrf.html index afd573f7..e4957c10 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vrf.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vrf.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Vrf

-

org.freedesktop.NetworkManager.Device.Vrf — VRF Device

+

org.freedesktop.NetworkManager.Device.Vrf — VRF Device.

@@ -55,6 +55,6 @@ Table readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vxlan.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vxlan.html index 428931b5..bb9141fe 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vxlan.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Vxlan.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Vxlan

-

org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device

+

org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device.

@@ -224,6 +224,6 @@ L3miss readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WifiP2P.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WifiP2P.html index b426b894..03386b87 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WifiP2P.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WifiP2P.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Device.WifiP2P

-

org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device

+

org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device.

@@ -56,8 +56,8 @@

Description

-

Since: 1.16 -

+

+

Since 1.16

Method Details

@@ -66,12 +66,25 @@
 StartFind (IN  a{sv} options);
 
-

in the range of 1-600 seconds is supported. The default is - 30 seconds. -

Start a find operation for Wi-Fi P2P peers.

-

Since: 1.16 +

The options argument accepts the following keys: +

+

+
++++ + + + + +

i timeout:

+

Timeout value in the range of 1-600 seconds.

+

The default is 30 seconds.

+
+

@@ -80,9 +93,10 @@ StartFind (IN a{sv} options); - +

IN a{sv} options:

Options of find. Currently, 'timeout' option with value of "i"

Options of find.

+

Since 1.16


@@ -92,8 +106,7 @@ StopFind ();

Stop an ongoing find operation again.

-

Since: 1.16 -

+

Since 1.16

@@ -105,8 +118,6 @@ PeerAdded (o peer);

Emitted when a new Wi-Fi P2P peer is found by the device.

-

Since: 1.16 -

@@ -117,6 +128,7 @@ PeerAdded (o peer);

The object path of the newly found access point.

+

Since 1.16


@@ -126,8 +138,6 @@ PeerRemoved (o peer);

Emitted when a Wi-Fi P2P peer disappears from view of the device.

-

Since: 1.16 -

@@ -138,6 +148,7 @@ PeerRemoved (o peer);

The object path of the Wi-Fi P2P peer that has disappeared.

+

Since 1.16

@@ -151,8 +162,7 @@ HwAddress readable s

DEPRECATED. Use the "HwAddress" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.24.0.

-

Since: 1.16 -

+

Since 1.16


@@ -162,12 +172,11 @@ Peers readable ao

List of object paths of peers visible to this Wi-Fi P2P device.

-

Since: 1.16 -

+

Since 1.16

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WireGuard.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WireGuard.html index 5bb89c90..aec23a8a 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WireGuard.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.WireGuard.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.WireGuard

-

org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device

+

org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device.

@@ -76,6 +76,6 @@ FwMark readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wired.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wired.html index ff9a9da0..f3a24f4e 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wired.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wired.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Wired

-

org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device

+

org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device.

@@ -101,6 +101,6 @@ Carrier readable b +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wireless.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wireless.html index 530a13b0..8695960f 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wireless.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wireless.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Device.Wireless

-

org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device

+

org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device.

@@ -248,12 +248,11 @@ LastScan readable x

The timestamp (in CLOCK_BOOTTIME milliseconds) for the last finished network scan. A value of -1 means the device never scanned for access points.

-

Since: 1.12 -

+

Since 1.12

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wpan.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wpan.html index 0b20a21f..b1025969 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wpan.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.Wpan.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.Device.Wpan

-

org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device

+

org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device.

@@ -57,6 +57,6 @@ HwAddress readable s +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.html index 2cb81d13..17fec94a 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Device.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Device

-

org.freedesktop.NetworkManager.Device — Device

+

org.freedesktop.NetworkManager.Device — Device.

@@ -559,10 +559,9 @@ Ip4Connectivity readable u

The result of the last IPv4 connectivity check.

-

Since: 1.16 -

Returns: NMConnectivityState

+

Since 1.16


@@ -572,10 +571,9 @@ Ip6Connectivity readable u

The result of the last IPv6 connectivity check.

-

Since: 1.16 -

Returns: NMConnectivityState

+

Since 1.16


@@ -587,8 +585,7 @@ InterfaceFlags readable u NMDeviceInterfaceFlags for the currently defined flags.

-

Since: 1.22 -

+

Since 1.22


@@ -600,8 +597,7 @@ HwAddress readable s

This replaces the other 'HwAddress' properties on the device-specific D-Bus interfaces.

-

Since: 1.24 -

+

Since 1.24


@@ -615,12 +611,11 @@ Ports readable ao port of this device. This replaces the 'Slaves' properties on the device-specific D-Bus interfaces.

-

Since: 1.34 -

+

Since 1.34

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DnsManager.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DnsManager.html index fa0bd56f..d5f67cf1 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.DnsManager.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.DnsManager.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.DnsManager

-

org.freedesktop.NetworkManager.DnsManager — DNS Configuration State

+

org.freedesktop.NetworkManager.DnsManager — DNS Configuration State.

@@ -82,6 +82,6 @@ Configuration readable aa{sv} +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP4Config.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP4Config.html index 9b52d070..7ece5e37 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP4Config.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP4Config.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.IP4Config

-

org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set

+

org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set.

@@ -128,8 +128,7 @@ NameserverData readable aa{sv}

The nameservers in use. Currently, only the value "address" is recognized (with an IP address string).

-

Since: 1.14 -

+

Since 1.14


@@ -186,12 +185,11 @@ WinsServerData readable as

The Windows Internet Name Service servers associated with the connection.

-

Since: 1.14 -

+

Since 1.14

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP6Config.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP6Config.html index 55aead66..27f0d7b4 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP6Config.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.IP6Config.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.IP6Config

-

org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set

+

org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set.

@@ -151,6 +151,6 @@ DnsPriority readable i +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.PPP.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.PPP.html index c8b3d2f7..13c99801 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.PPP.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.PPP.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@

org.freedesktop.NetworkManager.PPP

-

org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin

+

org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin.

@@ -147,6 +147,6 @@ SetIfindex (IN i ifindex); +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.SecretAgent.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.SecretAgent.html index a141eb1f..38e860ef 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.SecretAgent.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.SecretAgent.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@

org.freedesktop.NetworkManager.SecretAgent

-

org.freedesktop.NetworkManager.SecretAgent — User Secret Agent

+

org.freedesktop.NetworkManager.SecretAgent — User Secret Agent.

@@ -197,6 +197,6 @@ DeleteSecrets (IN a{sa{sv}} connection, +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.Connection.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.Connection.html index 9955af25..08c3f4d2 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.Connection.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.Connection.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Settings.Connection

-

org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile

+

org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile.

@@ -208,40 +208,84 @@ Update2 (IN a{sa{sv}} settings, IN a{sv} args, OUT a{sv} result); -

Provide an empty array, to use the current settings. - flags: optional flags argument. Currently, supported flags are: - "0x1" (to-disk), - "0x2" (in-memory), - "0x4" (in-memory-detached), - "0x8" (in-memory-only), - "0x10" (volatile), - "0x20" (block-autoconnect), - "0x40" (no-reapply). - Unknown flags cause the call to fail. - args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. - result: output argument, currently no results are returned. -

Update the connection with new settings and properties (replacing all - previous settings and properties). If the flag 0x1 is present, - the connection is persisted to disk. If the flag 0x2 is present, - the change is only made in memory (without touching an eventual - profile on disk). If neither 0x1 nor 0x2 is set, the change is made - in memory only, if the connection is already in memory only. - The flags 0x4 (in-memory-detached) and 0x8 (in-memory-only) are like - "in-memory", but behave slightly different when migrating the profile - from disk to in-memory. - The flag 0x20 (block-autoconnect) blocks auto-connect on the updated - profile, and 0x40 (no-reapply) prevents "connection.zone" and "connection.metered" - properties to take effect on currently active devices. - Secrets may be part of the update request, and will be either stored in persistent - storage or sent to a Secret Agent for storage, depending on the flags - associated with each secret. + previous settings and properties).

-

Update2 is a extensible alternative to Update, UpdateUnsaved and Save. +

Update2 is an alternative to + Update, + UpdateUnsaved + and Save + extensible with extra flags and args arguments.

-

Since: 1.12 +

The flags argument accepts the combination of following values, + logically or-ed together: +

+

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

0x1 (to-disk):

The connection is persisted to disk.

0x2 (in-memory):

The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only.

0x4 (in-memory-detached):

Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory.

0x8 (in-memory-only):

Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory.

0x10 (volatile):

0x20 (block-autoconnect):

Blocks auto-connect on the updated profile

0x40 (no-reapply):

Prevents "connection.zone" and "connection.metered" properties + to take effect on currently active devices.

+

+

+

The args argument accepts the following keys: +

+

+
++++ + + + + +

plugin:

+

The settings plugin the connection will be migrated to + such as "keyfile" or "ifcfg-rh".

+

Since 1.38

+
+

+

+

Secrets may be part of the update request, and will be either stored in persistent + storage or sent to a Secret Agent for storage, depending on the flags + associated with each secret.

@@ -251,22 +295,23 @@ Update2 (IN a{sa{sv}} settings, - + - + - + - +

IN a{sa{sv}} settings:

New connection settings, properties, and (optionally) secrets.

New connection settings, properties, and (optionally) secrets. Provide an empty array to use the current settings.

IN u flags:

Optional flags. Unknown flags cause the call to fail.

IN a{sv} args:

Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail.

OUT a{sv} result:

Currently no results are returned.

+

Since 1.12

@@ -318,8 +363,7 @@ Flags readable u

Returns: NMSettingsConnectionFlags

-

Since: 1.12 -

+

Since 1.12


@@ -329,12 +373,11 @@ Filename readable s

File that stores the connection in case the connection is file-backed.

-

Since: 1.12 -

+

Since 1.12

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.html index 555315e7..9a4365df 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.Settings.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.Settings

-

org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager

+

org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager.

@@ -191,28 +191,65 @@ AddConnection2 (IN a{sa{sv}} settings, OUT o path, OUT a{sv} result); -

"0x1" (to-disk), - "0x2" (in-memory), - "0x20" (block-autoconnect). - Unknown flags cause the call to fail. - args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. - path: Object path of the new connection that was just added. - result: output argument, currently no additional results are returned. -

Add a new connection profile.

-

Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. - The effect is whether to behave like AddConnection or AddConnectionUnsaved. - If 0x20 (block-autoconnect) is specified, autoconnect for the new profile - is blocked from the beginning. Otherwise, the profile might automatically - connect if a suitable device is around. -

-

AddConnection2 is a extensible alternative to AddConnection, and AddConnectionUnsaved. +

AddConnection2 is an alternative to + AddConnection and + AddConnectionUnsaved. The new variant can do everything that the older variants could, and more. + Its behavior is extensible via extra flags and args arguments. +

+

The flags argument accepts the combination of following values, + logically or-ed together: +

+

+
++++ + + + + + + + + + + + + + + +

0x1 (to-disk):

The connection is persisted to disk.

0x2 (in-memory):

The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only.

0x20 (block-autoconnect):

Blocks auto-connect on the new profile

+

-

Since: 1.20 +

The args argument accepts the following keys: +

+

+
++++ + + + + +

plugin:

+

The settings plugin the newly added connection will + use, such as "keyfile" or "ifcfg-rh".

+

Since 1.38

+
+

+

+

Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. + The effect is whether to behave like + AddConnection or + AddConnectionUnsaved.

@@ -226,22 +263,23 @@ AddConnection2 (IN a{sa{sv}} settings, - + - + - + - +

IN u flags:

optional flags argument. Currently, the following flags are supported:

Flags. Unknown flags cause the call to fail.

IN a{sv} args:

Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail.

OUT o path:

Object path of the new connection that was just added.

OUT a{sv} result:

Output argument, currently no additional results are returned.

+

Since 1.20


@@ -251,15 +289,16 @@ LoadConnections (IN as filenames, OUT b status, OUT as failures); -

Note that before 1.20, NetworkManager had a bug and this status value was wrong. It is better to assume success if the method does not return with a D-Bus error. On top of that, you can look at failures to know whether any of the requested files failed. - failures: Paths of connection files that could not be loaded. -

Loads or reloads the indicated connections from disk. You should call this after making changes directly to an on-disk connection file to make sure that NetworkManager sees the changes. As with AddConnection(), this operation does not necessarily start the network connection.

+

Note that before 1.20, NetworkManager had a bug and this status value was wrong. + It is better to assume success if the method does not return with a D-Bus error. + On top of that, you can look at failures to know whether any of the requested files failed. +

@@ -276,7 +315,7 @@ LoadConnections (IN as filenames, - +

OUT as failures:

Paths of connection files that could not be loaded.

@@ -403,6 +442,6 @@ CanModify readable b
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Connection.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Connection.html index 5999eb50..57355dc5 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Connection.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Connection.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.VPN.Connection

-

org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection

+

org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection.

@@ -104,6 +104,6 @@ Banner readable s +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html index 1eb6ca27..2df10f6a 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager.VPN.Plugin

-

org.freedesktop.NetworkManager.VPN.Plugin — VPN Service

+

org.freedesktop.NetworkManager.VPN.Plugin — VPN Service.

@@ -415,6 +415,6 @@ State readable u +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.WifiP2PPeer.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.WifiP2PPeer.html index 12ef5c77..3dfeb7c7 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.WifiP2PPeer.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.WifiP2PPeer.html @@ -8,7 +8,7 @@ - + @@ -28,7 +28,7 @@

org.freedesktop.NetworkManager.WifiP2PPeer

-

org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer

+

org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer.

@@ -49,8 +49,8 @@

Description

-

Since: 1.16 -

+

+

Since 1.16

Property Details

@@ -61,8 +61,7 @@ Name readable s

Device name.

-

Since: 1.16 -

+

Since 1.16


@@ -74,8 +73,7 @@ Flags readable u

Returns: NM80211ApFlags

-

Since: 1.16 -

+

Since 1.16


@@ -85,8 +83,7 @@ Manufacturer readable s

The manufacturer of the Wi-Fi P2P peer.

-

Since: 1.16 -

+

Since 1.16


@@ -96,8 +93,7 @@ Model readable s

The model of the Wi-Fi P2P peer.

-

Since: 1.16 -

+

Since 1.16


@@ -107,8 +103,7 @@ ModelNumber readable s

The model number of the Wi-Fi P2P peer.

-

Since: 1.16 -

+

Since 1.16


@@ -118,8 +113,7 @@ Serial readable s

The serial number of the Wi-Fi P2P peer.

-

Since: 1.16 -

+

Since 1.16


@@ -129,8 +123,7 @@ WfdIEs readable ay

The Wi-Fi Display Information Elements of the Wi-Fi P2P peer.

-

Since: 1.16 -

+

Since 1.16


@@ -140,8 +133,7 @@ HwAddress readable s

The hardware address (BSSID) of the access point.

-

Since: 1.16 -

+

Since 1.16


@@ -151,8 +143,7 @@ Strength readable y

The current signal quality of the access point, in percent.

-

Since: 1.16 -

+

Since 1.16


@@ -164,12 +155,11 @@ LastSeen readable i point was found in scan results. A value of -1 means the access point has never been found in scan results.

-

Since: 1.16 -

+

Since 1.16

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/gdbus-org.freedesktop.NetworkManager.html b/docs/api/html/gdbus-org.freedesktop.NetworkManager.html index b0e4d095..f6c0aae8 100644 --- a/docs/api/html/gdbus-org.freedesktop.NetworkManager.html +++ b/docs/api/html/gdbus-org.freedesktop.NetworkManager.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@

org.freedesktop.NetworkManager

-

org.freedesktop.NetworkManager — Connection Manager

+

org.freedesktop.NetworkManager — Connection Manager.

@@ -100,6 +100,7 @@ WwanHardwareEnabled readable b WimaxEnabled readwrite b WimaxHardwareEnabled readable b +RadioFlags readable u ActiveConnections readable ao PrimaryConnection readable o PrimaryConnectionType readable s @@ -155,7 +156,7 @@ Reload (IN u flags);

IN u flags:

-

optional flags to specify which parts shall be reloaded.

+

Optional flags to specify which parts shall be reloaded.

@@ -319,8 +320,6 @@ AddAndActivateConnection2 (IN a{sa{sv}} connection, OUT o active_connection, OUT a{sv} result); -

output arguments are supported. -

Adds a new connection using the given details (if any) as a template (automatically filling in missing settings with the capabilities of the given device and specific object), then activate the new connection. @@ -364,7 +363,7 @@ AddAndActivateConnection2 (IN a{sa{sv}} connection,

OUT a{sv} result:

-

a dictionary of additional output arguments for future extension. Currently, not additional

+

A dictionary of additional output arguments for future extension. Currently, not additional output arguments are supported.

@@ -635,18 +634,15 @@ CheckpointRollback (IN o checkpoint, CheckpointAdjustRollbackTimeout (IN o checkpoint, IN u add_timeout); -

timeout will expire. Set to 0 to disable the timeout. - Note that the added seconds start counting from now, - not "Created" timestamp or the previous expiration - time. Note that the "Created" property of the checkpoint - will stay unchanged by this call. However, the "RollbackTimeout" - will be recalculated to give the approximate new expiration time. - The new "RollbackTimeout" property will be approximate up to - one second precision, which is the accuracy of the property. -

Reset the timeout for rollback for the checkpoint.

-

Since: 1.12 +

Note that the added seconds start counting from now, + not "Created" timestamp or the previous expiration + time. Note that the "Created" property of the checkpoint + will stay unchanged by this call. However, the "RollbackTimeout" + will be recalculated to give the approximate new expiration time. + The new "RollbackTimeout" property will be approximate up to + one second precision, which is the accuracy of the property.

@@ -656,14 +652,15 @@ CheckpointAdjustRollbackTimeout (IN o checkpoint, - + - +

IN o checkpoint:

The checkpoint to be rolled back.

IN u add_timeout:

number of seconds from ~now~ in which the

Number of seconds from now in which the timeout will expire. Set to 0 to disable the timeout.

+

Since 1.12

@@ -837,6 +834,17 @@ WimaxHardwareEnabled readable b

+

The "RadioFlags" property

+
+RadioFlags  readable   u
+
+

Flags related to radio devices. See NMRadioFlags for the list of flags + supported. +

+

Since 1.38

+
+
+

The "ActiveConnections" property

 ActiveConnections  readable   ao
@@ -1019,6 +1027,6 @@ GlobalDnsConfiguration  readwrite  a{sv}
 
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/index.html b/docs/api/html/index.html index e215b5e9..1fbe7a13 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -7,7 +7,7 @@ - + @@ -16,7 +16,7 @@

- for NetworkManager 1.36.4 + for NetworkManager 1.37.92 The latest version of this documentation can be found on-line at https://networkmanager.dev/docs/api/latest/. @@ -79,6 +79,9 @@ NetworkManager-dispatcher — Dispatch user scripts for NetworkManager

+NetworkManager-wait-online.service — Wait for network to come online +
+
nmcli — command-line tool for controlling NetworkManager
@@ -279,156 +282,156 @@
The /org/freedesktop/NetworkManager object
-org.freedesktop.NetworkManager — Connection Manager +org.freedesktop.NetworkManager — Connection Manager.
The /org/freedesktop/NetworkManager/AgentManager object
-org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager +org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager.
The /org/freedesktop/NetworkManager/DnsManager object
-org.freedesktop.NetworkManager.DnsManager — DNS Configuration State +org.freedesktop.NetworkManager.DnsManager — DNS Configuration State.
The /org/freedesktop/NetworkManager/Settings object
-org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager +org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager.
The /org/freedesktop/NetworkManager/Settings/* objects
-org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile +org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile.
The /org/freedesktop/NetworkManager/Devices/* objects
-org.freedesktop.NetworkManager.Device — Device +org.freedesktop.NetworkManager.Device — Device.
-org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters +org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters.
-org.freedesktop.NetworkManager.Device.Adsl — ADSL Device +org.freedesktop.NetworkManager.Device.Adsl — ADSL Device.
-org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device +org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device.
-org.freedesktop.NetworkManager.Device.Bond — Bonding Device +org.freedesktop.NetworkManager.Device.Bond — Bonding Device.
-org.freedesktop.NetworkManager.Device.Bridge — Bridging Device +org.freedesktop.NetworkManager.Device.Bridge — Bridging Device.
-org.freedesktop.NetworkManager.Device.Dummy — Dummy Device +org.freedesktop.NetworkManager.Device.Dummy — Dummy Device.
-org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device +org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device.
-org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device +org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device.
-org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device +org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device.
-org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device +org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device.
-org.freedesktop.NetworkManager.Device.Macsec — MACSec Device +org.freedesktop.NetworkManager.Device.Macsec — MACSec Device.
-org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device +org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device.
-org.freedesktop.NetworkManager.Device.Modem — Modem Device +org.freedesktop.NetworkManager.Device.Modem — Modem Device.
-org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device +org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device.
-org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device +org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device.
-org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device +org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device.
-org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device +org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device.
-org.freedesktop.NetworkManager.Device.Ppp — PPP Device +org.freedesktop.NetworkManager.Device.Ppp — PPP Device.
-org.freedesktop.NetworkManager.Device.Team — Teaming Device +org.freedesktop.NetworkManager.Device.Team — Teaming Device.
-org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device +org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device.
-org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device +org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device.
-org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device +org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device.
-org.freedesktop.NetworkManager.Device.Vrf — VRF Device +org.freedesktop.NetworkManager.Device.Vrf — VRF Device.
-org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device +org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device.
-org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device +org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device.
-org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device +org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device.
-org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device +org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device.
-org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device +org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device.
-org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device +org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device.
-org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin +org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin.
The /org/freedesktop/NetworkManager/ActiveConnection/* objects
-org.freedesktop.NetworkManager.Connection.Active — Active Connection +org.freedesktop.NetworkManager.Connection.Active — Active Connection.
-org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection +org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection.
The /org/freedesktop/NetworkManager/IP4Config/* objects
-org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set +org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set.
The /org/freedesktop/NetworkManager/IP6Config/* objects
-org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set +org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set.
The /org/freedesktop/NetworkManager/DHCP4Config/* objects
-org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State +org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State.
The /org/freedesktop/NetworkManager/DHCP4Config/* objects
-org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State +org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State.
The /org/freedesktop/NetworkManager/AccessPoint/* objects
-org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point +org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point.
The /org.freedesktop.NetworkManager.WifiP2PPeer/* objects
-org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer +org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer.
The /org/freedesktop/NetworkManager/Checkpoint/* objects
-org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot +org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot.
Types
@@ -439,14 +442,14 @@
Secret agents
-org.freedesktop.NetworkManager.SecretAgent — User Secret Agent +org.freedesktop.NetworkManager.SecretAgent — User Secret Agent.
V. VPN Plugin D-Bus API Reference
VPN services
-org.freedesktop.NetworkManager.VPN.Plugin — VPN Service +org.freedesktop.NetworkManager.VPN.Plugin — VPN Service.
Types
@@ -458,6 +461,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ix01.html b/docs/api/html/ix01.html index 2854e276..6bc77760 100644 --- a/docs/api/html/ix01.html +++ b/docs/api/html/ix01.html @@ -8,7 +8,7 @@ - + @@ -974,41 +974,43 @@
org.freedesktop.NetworkManager::StateChanged, The "StateChanged" signal
-
org.freedesktop.NetworkManager:ActivatingConnection, The "ActivatingConnection" property +
org.freedesktop.NetworkManager:ActivatingConnection, The "ActivatingConnection" property
-
org.freedesktop.NetworkManager:ActiveConnections, The "ActiveConnections" property +
org.freedesktop.NetworkManager:ActiveConnections, The "ActiveConnections" property
org.freedesktop.NetworkManager:AllDevices, The "AllDevices" property
-
org.freedesktop.NetworkManager:Capabilities, The "Capabilities" property +
org.freedesktop.NetworkManager:Capabilities, The "Capabilities" property
org.freedesktop.NetworkManager:Checkpoints, The "Checkpoints" property
-
org.freedesktop.NetworkManager:Connectivity, The "Connectivity" property +
org.freedesktop.NetworkManager:Connectivity, The "Connectivity" property
-
org.freedesktop.NetworkManager:ConnectivityCheckAvailable, The "ConnectivityCheckAvailable" property +
org.freedesktop.NetworkManager:ConnectivityCheckAvailable, The "ConnectivityCheckAvailable" property
-
org.freedesktop.NetworkManager:ConnectivityCheckEnabled, The "ConnectivityCheckEnabled" property +
org.freedesktop.NetworkManager:ConnectivityCheckEnabled, The "ConnectivityCheckEnabled" property
-
org.freedesktop.NetworkManager:ConnectivityCheckUri, The "ConnectivityCheckUri" property +
org.freedesktop.NetworkManager:ConnectivityCheckUri, The "ConnectivityCheckUri" property
org.freedesktop.NetworkManager:Devices, The "Devices" property
-
org.freedesktop.NetworkManager:GlobalDnsConfiguration, The "GlobalDnsConfiguration" property +
org.freedesktop.NetworkManager:GlobalDnsConfiguration, The "GlobalDnsConfiguration" property
-
org.freedesktop.NetworkManager:Metered, The "Metered" property +
org.freedesktop.NetworkManager:Metered, The "Metered" property
org.freedesktop.NetworkManager:NetworkingEnabled, The "NetworkingEnabled" property
-
org.freedesktop.NetworkManager:PrimaryConnection, The "PrimaryConnection" property +
org.freedesktop.NetworkManager:PrimaryConnection, The "PrimaryConnection" property
-
org.freedesktop.NetworkManager:PrimaryConnectionType, The "PrimaryConnectionType" property +
org.freedesktop.NetworkManager:PrimaryConnectionType, The "PrimaryConnectionType" property
-
org.freedesktop.NetworkManager:Startup, The "Startup" property +
org.freedesktop.NetworkManager:RadioFlags, The "RadioFlags" property
-
org.freedesktop.NetworkManager:State, The "State" property +
org.freedesktop.NetworkManager:Startup, The "Startup" property
-
org.freedesktop.NetworkManager:Version, The "Version" property +
org.freedesktop.NetworkManager:State, The "State" property +
+
org.freedesktop.NetworkManager:Version, The "Version" property
org.freedesktop.NetworkManager:WimaxEnabled, The "WimaxEnabled" property
@@ -1145,6 +1147,8 @@
NMMetered, enum NMMetered
+
NMRadioFlags, enum NMRadioFlags +
NMRollbackResult, enum NMRollbackResult
NMSecretAgentCapabilities, enum NMSecretAgentCapabilities @@ -1654,6 +1658,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/license.html b/docs/api/html/license.html index 45ca298c..e1b68486 100644 --- a/docs/api/html/license.html +++ b/docs/api/html/license.html @@ -7,7 +7,7 @@ - + @@ -55,6 +55,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/manpages.html b/docs/api/html/manpages.html index d12ec76c..4ce24258 100644 --- a/docs/api/html/manpages.html +++ b/docs/api/html/manpages.html @@ -8,7 +8,7 @@ - + @@ -35,6 +35,9 @@ NetworkManager-dispatcher — Dispatch user scripts for NetworkManager
+NetworkManager-wait-online.service — Wait for network to come online +
+
nmcli — command-line tool for controlling NetworkManager
@@ -71,6 +74,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-cloud-setup.html b/docs/api/html/nm-cloud-setup.html index b5d6c808..360519fa 100644 --- a/docs/api/html/nm-cloud-setup.html +++ b/docs/api/html/nm-cloud-setup.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@
-

Overview

+

Overview

When running a virtual machine in a public cloud environment, it is desirable to automatically configure the network of that VM. In simple setups, the VM only has one network interface and the public @@ -44,7 +44,7 @@

Multiple cloud providers are supported. See the section called “Supported Cloud Providers”.

-

Use

+

Use

The goal of nm-cloud-setup is to be configuration-less and work automatically. All you need is to opt-in to the desired cloud providers (see the section called “Environment Variables”) and run /usr/libexec/nm-cloud-setup.

@@ -53,7 +53,7 @@ and a NetworkManager dispatcher script.

-

Details

+

Details

nm-cloud-setup configures the network by fetching the configuration from the well-known meta data server of the cloud provider. That means, it already @@ -74,7 +74,7 @@ With this approach, the configuration is not persisted and only preserved until the device disconnects.

-

/usr/libexec/nm-cloud-setup

+

/usr/libexec/nm-cloud-setup

The binary /usr/libexec/nm-cloud-setup does most of the work. It supports no command line arguments but can be configured via environment variables. @@ -94,7 +94,7 @@


-

nm-cloud-setup.service systemd unit

+

nm-cloud-setup.service systemd unit

Usually /usr/libexec/nm-cloud-setup is not run directly, but only by systemctl restart nm-cloud-setup.service. This ensures that the tool only runs once at any time. It also allows to integrate @@ -105,7 +105,7 @@


-

nm-cloud-setup.timer systemd timer

+

nm-cloud-setup.timer systemd timer

/usr/libexec/nm-cloud-setup is intended to run whenever an update is necessary. For example, during boot when when changing the network configuration of the virtual machine via the cloud @@ -115,7 +115,7 @@


-

/usr/lib/NetworkManager/dispatcher.d/90-nm-cloud-setup.sh

+

/usr/lib/NetworkManager/dispatcher.d/90-nm-cloud-setup.sh

There is also a NetworkManager dispatcher script that will run for example when an interface is activated by NetworkManager. Together with the nm-cloud-setup.timer systemd timer this @@ -182,7 +182,7 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst

Supported Cloud Providers

-

Amazon EC2 (AWS)

+

Amazon EC2 (AWS)

For AWS, the tools tries to fetch configuration from http://169.254.169.254/. Currently, it only configures IPv4 and does nothing about IPv6. It will do the following.

    @@ -239,7 +239,7 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst

-

Google Cloud Platform (GCP)

+

Google Cloud Platform (GCP)

For GCP, the meta data is fetched from URIs starting with http://metadata.google.internal/computeMetadata/v1/ with a HTTP header "Metadata-Flavor: Google". @@ -267,7 +267,7 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst


-

Microsoft Azure

+

Microsoft Azure

For Azure, the meta data is fetched from URIs starting with http://169.254.169.254/metadata/instance with a URL parameter "?format=text&api-version=2017-04-02" and a HTTP header "Metadata:true". @@ -299,7 +299,7 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst


-

Alibaba Cloud (Aliyun)

+

Alibaba Cloud (Aliyun)

For Aliyun, the tools tries to fetch configuration from http://100.100.100.200/. Currently, it only configures IPv4 and does nothing about IPv6. It will do the following.

    @@ -327,7 +327,7 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst
-

See Also

+

See Also

NetworkManager(8) nmcli(1) @@ -335,6 +335,6 @@ ln -s /etc/systemd/system/timers.target.wants/nm-cloud-setup.timer /usr/lib/syst

+
Generated by GTK-Doc V1.33.1
\ No newline at end of file diff --git a/docs/api/html/nm-dbus-types.html b/docs/api/html/nm-dbus-types.html index a29df6a6..6ee39f84 100644 --- a/docs/api/html/nm-dbus-types.html +++ b/docs/api/html/nm-dbus-types.html @@ -8,7 +8,7 @@ - + @@ -4058,7 +4058,7 @@

-

during rollback, by default externally added ports attached to bridge devices are preserved. With this flag, the rollback detaches all external ports. This only has an effect for bridge ports. Before 1.38, 1.36.2, this was the default behavior. Since: 1.38, 1.36.2.

+

during rollback, by default externally added ports attached to bridge devices are preserved. With this flag, the rollback detaches all external ports. This only has an effect for bridge ports. Before 1.38, this was the default behavior. Since: 1.38.

  @@ -5254,8 +5254,73 @@
+
+
+

enum NMRadioFlags

+

Flags related to radio interfaces.

+

Since: 1.38

+

+
+

Values

+
++++++ + + + + + + + + + + + + + + + + + + + + +
+

NM_RADIO_FLAG_NONE

+

+
+

= 0

+

+
+

an alias for numeric zero, no flags set.

+

+
 
+

NM_RADIO_FLAG_WLAN_AVAILABLE

+

+
+

= 0x1

+

+
+

A Wireless LAN device or rfkill switch is detected in the system.

+

+
 
+

NM_RADIO_FLAG_WWAN_AVAILABLE

+

+
+

= 0x2

+

+
+

A Wireless WAN device or rfkill switch is detected in the system.

+

+
 
+
+
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-initrd-generator.html b/docs/api/html/nm-initrd-generator.html index 214cfd67..8962d9c1 100644 --- a/docs/api/html/nm-initrd-generator.html +++ b/docs/api/html/nm-initrd-generator.html @@ -8,7 +8,7 @@ - + @@ -170,6 +170,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-online.html b/docs/api/html/nm-online.html index 84fef32f..53c2cc52 100644 --- a/docs/api/html/nm-online.html +++ b/docs/api/html/nm-online.html @@ -8,7 +8,7 @@ - + @@ -41,14 +41,8 @@ should be checked (see the return codes below).

This tool is not very useful to call directly. It is however used by NetworkManager-wait-online.service with - --wait-for-startup argument. This is used to delay - the service and indirectly network-online.target, - until networking is up. Don't order your own systemd services after - NetworkManager-wait-online.service directly. Instead - if necessary, order your services after network-online.target. - Even better is to have your services react to network changes dynamically - and don't order them with respect to network-online.target - at all. + --wait-for-startup argument + (see NetworkManager-wait-online.service(8)).

By default, connections have the ipv4.may-fail and ipv6.may-fail properties set to yes; @@ -86,18 +80,8 @@ nm-online -s will just return immediately, regardless of the current network state.

There are various ways to affect when startup complete is reached. - For example, by setting a connection profile to autoconnect, such a profile - possibly will activate during startup and thus delay startup complete being reached. - Also, a profile is considered ready when it fully reached the logical connected - state in NetworkManager. That means, properties like ipv4.may-fail and ipv6.may-fail - affect whether a certain address family is required. Also, the connection property - connection.wait-device-timeout affects whether to wait for - the driver to detect a certain device. Generally, a failure of NetworkManager-wait-online.service - indicates a configuration error, where NetworkManager won't be able to reach the - desired connectivity state during startup. An example for that are bridge or bond master - profiles, that get autoconnected but without activating any slaves. Such master devices - hang in activating state indefinitely, and cause NetworkManager-wait-online.service - to fail. + For details see + NetworkManager-wait-online.service(8).

@@ -145,10 +129,12 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-openvswitch.html b/docs/api/html/nm-openvswitch.html index 3718e83b..740989ad 100644 --- a/docs/api/html/nm-openvswitch.html +++ b/docs/api/html/nm-openvswitch.html @@ -8,7 +8,7 @@ - + @@ -29,7 +29,7 @@
-

Overview

+

Overview

NetworkManager includes basic Open vSwitch support, good enough to be capable of setting up simple Open vSwitch configurations. It is not extensive and does not expose all functionality of Open vSwitch provides. @@ -64,7 +64,7 @@

-

Bridges

+

Bridges

Bridges are represented by connections of ovs-bridge type. Due to the limitations of OVSDB, "empty" Bridges (with no Ports) can't exist. @@ -74,7 +74,7 @@


-

Ports

+

Ports

Ports are represented by connections of ovs-port type. Due to the limitations of OVSDB, "empty" Ports (with no Interfaces) can't @@ -84,7 +84,7 @@


-

Interfaces

+

Interfaces

Interfaces are represented by a connections enslaved to a Port. The system interfaces (that have a corresponding Linux link) have a respective connection.type @@ -94,9 +94,9 @@

-

Examples

+

Examples

-

Example 18. Creating a Bridge with a single internal Interface

+

Example 18. Creating a Bridge with a single internal Interface

$ nmcli conn add type ovs-bridge conn.interface bridge0
 Connection 'ovs-bridge-bridge0' (d10fc64d-1d48-4394-a1b8-e1aea72f27d5) successfully added.
@@ -113,7 +113,7 @@ Connection 'ovs-interface-iface0' (3640d2a1-a2fd-4718-92f1-cffadb5b6cdc) success
 

-

Example 19. Adding a Linux interface to a Bridge

+

Example 19. Adding a Linux interface to a Bridge

$ nmcli conn add type ovs-port conn.interface port1 master bridge0
 Connection 'ovs-port-port1' (67d041eb-8e7b-4458-afee-a1d07c9c4552) successfully added.
@@ -124,7 +124,7 @@ Connection 'ovs-slave-eth0' (d459c45c-cf78-4c1c-b4b7-505e71379624) successfully
 

-

Example 20. Creating a VLAN

+

Example 20. Creating a VLAN

$ nmcli conn add type ovs-port conn.interface port2 master bridge0 ovs-port.tag 120
 Connection 'ovs-port-port2' (3994c093-4ef7-4549-a4fd-627b831c3cb8) successfully added.
@@ -135,7 +135,7 @@ Connection 'ovs-slave-eth1' (099be06e-71ad-484d-8d5a-fcadc5f207f5) successfully
 

-

Example 21. Creating a Bond

+

Example 21. Creating a Bond

$ nmcli conn add type ovs-port conn.interface bond0 master bridge0
 Connection 'ovs-port-bond0' (d154ebf9-e999-4e1b-a084-a3de53d25d8a) successfully added.
@@ -153,7 +153,7 @@ Connection 'ovs-slave-eth3' (8dedeecb-ed12-482b-b77a-24a4fb835136) successfully
 
-

Bugs

+

Bugs

  • Not all Open vSwitch capabilities are supported.

  • Open vSwitch devices don't expose many useful properties on D-Bus.

  • @@ -161,7 +161,7 @@ Connection 'ovs-slave-eth3' (8dedeecb-ed12-482b-b77a-24a4fb835136) successfully

    Probably many more.

-

See Also

+

See Also

RFC 7047: The Open vSwitch Database Management Protocol, ovs-vsctl(8), @@ -172,6 +172,6 @@ Connection 'ovs-slave-eth3' (8dedeecb-ed12-482b-b77a-24a4fb835136) successfully

+
Generated by GTK-Doc V1.33.1
\ No newline at end of file diff --git a/docs/api/html/nm-settings-dbus.html b/docs/api/html/nm-settings-dbus.html index 885146a1..d8c9631a 100644 --- a/docs/api/html/nm-settings-dbus.html +++ b/docs/api/html/nm-settings-dbus.html @@ -8,7 +8,7 @@ - + @@ -94,7 +94,7 @@
-

connection setting

+

connection setting

General Connection Profile Settings.

@@ -122,7 +122,7 @@ autoconnect - + - + + + + + @@ -1485,6 +1514,10 @@ + + + + @@ -1799,6 +1832,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nmtui.html b/docs/api/html/nmtui.html index edf90abf..ee9ab9f0 100644 --- a/docs/api/html/nmtui.html +++ b/docs/api/html/nmtui.html @@ -8,7 +8,7 @@ - + @@ -83,6 +83,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-access-points.html b/docs/api/html/ref-dbus-access-points.html index 0b4bb69a..4ad00ffb 100644 --- a/docs/api/html/ref-dbus-access-points.html +++ b/docs/api/html/ref-dbus-access-points.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/AccessPoint/* objects

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-active-connections.html b/docs/api/html/ref-dbus-active-connections.html index 4c2cd24f..5bb979a8 100644 --- a/docs/api/html/ref-dbus-active-connections.html +++ b/docs/api/html/ref-dbus-active-connections.html @@ -8,7 +8,7 @@ - + @@ -24,14 +24,14 @@ The /org/freedesktop/NetworkManager/ActiveConnection/* objects +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-agent-manager.html b/docs/api/html/ref-dbus-agent-manager.html index eccc57bf..1c5c6f6d 100644 --- a/docs/api/html/ref-dbus-agent-manager.html +++ b/docs/api/html/ref-dbus-agent-manager.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/AgentManager object

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-checkpoint.html b/docs/api/html/ref-dbus-checkpoint.html index 1795082e..5242311c 100644 --- a/docs/api/html/ref-dbus-checkpoint.html +++ b/docs/api/html/ref-dbus-checkpoint.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/Checkpoint/* objects

-org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot +org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-devices.html b/docs/api/html/ref-dbus-devices.html index 6537de27..7d732909 100644 --- a/docs/api/html/ref-dbus-devices.html +++ b/docs/api/html/ref-dbus-devices.html @@ -8,7 +8,7 @@ - + @@ -24,101 +24,101 @@ The /org/freedesktop/NetworkManager/Devices/* objects
-org.freedesktop.NetworkManager.Device — Device +org.freedesktop.NetworkManager.Device — Device.
-org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters +org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters.
-org.freedesktop.NetworkManager.Device.Adsl — ADSL Device +org.freedesktop.NetworkManager.Device.Adsl — ADSL Device.
-org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device +org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device.
-org.freedesktop.NetworkManager.Device.Bond — Bonding Device +org.freedesktop.NetworkManager.Device.Bond — Bonding Device.
-org.freedesktop.NetworkManager.Device.Bridge — Bridging Device +org.freedesktop.NetworkManager.Device.Bridge — Bridging Device.
-org.freedesktop.NetworkManager.Device.Dummy — Dummy Device +org.freedesktop.NetworkManager.Device.Dummy — Dummy Device.
-org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device +org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device.
-org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device +org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device.
-org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device +org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device.
-org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device +org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device.
-org.freedesktop.NetworkManager.Device.Macsec — MACSec Device +org.freedesktop.NetworkManager.Device.Macsec — MACSec Device.
-org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device +org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device.
-org.freedesktop.NetworkManager.Device.Modem — Modem Device +org.freedesktop.NetworkManager.Device.Modem — Modem Device.
-org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device +org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device.
-org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device +org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device.
-org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device +org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device.
-org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device +org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device.
-org.freedesktop.NetworkManager.Device.Ppp — PPP Device +org.freedesktop.NetworkManager.Device.Ppp — PPP Device.
-org.freedesktop.NetworkManager.Device.Team — Teaming Device +org.freedesktop.NetworkManager.Device.Team — Teaming Device.
-org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device +org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device.
-org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device +org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device.
-org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device +org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device.
-org.freedesktop.NetworkManager.Device.Vrf — VRF Device +org.freedesktop.NetworkManager.Device.Vrf — VRF Device.
-org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device +org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device.
-org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device +org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device.
-org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device +org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device.
-org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device +org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device.
-org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device +org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device.
-org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device +org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device.
-org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin +org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-dhcp4-configs.html b/docs/api/html/ref-dbus-dhcp4-configs.html index 1f222e0e..ca0f9a8d 100644 --- a/docs/api/html/ref-dbus-dhcp4-configs.html +++ b/docs/api/html/ref-dbus-dhcp4-configs.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/DHCP4Config/* objects

-org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State +org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-dhcp6-configs.html b/docs/api/html/ref-dbus-dhcp6-configs.html index 0845bf07..dd747c61 100644 --- a/docs/api/html/ref-dbus-dhcp6-configs.html +++ b/docs/api/html/ref-dbus-dhcp6-configs.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/DHCP4Config/* objects

-org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State +org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-dns-manager.html b/docs/api/html/ref-dbus-dns-manager.html index 1ab7f8a5..d33bc1dc 100644 --- a/docs/api/html/ref-dbus-dns-manager.html +++ b/docs/api/html/ref-dbus-dns-manager.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/DnsManager object

-org.freedesktop.NetworkManager.DnsManager — DNS Configuration State +org.freedesktop.NetworkManager.DnsManager — DNS Configuration State.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-ip4-configs.html b/docs/api/html/ref-dbus-ip4-configs.html index 2bc3e165..a45f8ff3 100644 --- a/docs/api/html/ref-dbus-ip4-configs.html +++ b/docs/api/html/ref-dbus-ip4-configs.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/IP4Config/* objects

-org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set +org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-ip6-configs.html b/docs/api/html/ref-dbus-ip6-configs.html index befd32ea..e9c50240 100644 --- a/docs/api/html/ref-dbus-ip6-configs.html +++ b/docs/api/html/ref-dbus-ip6-configs.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/IP6Config/* objects

-org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set +org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-manager.html b/docs/api/html/ref-dbus-manager.html index ba94fe42..4b2230fd 100644 --- a/docs/api/html/ref-dbus-manager.html +++ b/docs/api/html/ref-dbus-manager.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager object

-org.freedesktop.NetworkManager — Connection Manager +org.freedesktop.NetworkManager — Connection Manager.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-settings-manager.html b/docs/api/html/ref-dbus-settings-manager.html index d122fcc9..e4b8fb89 100644 --- a/docs/api/html/ref-dbus-settings-manager.html +++ b/docs/api/html/ref-dbus-settings-manager.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/Settings object

-org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager +org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-settings.html b/docs/api/html/ref-dbus-settings.html index d1d5c70f..2da4ae49 100644 --- a/docs/api/html/ref-dbus-settings.html +++ b/docs/api/html/ref-dbus-settings.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org/freedesktop/NetworkManager/Settings/* objects

-org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile +org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-dbus-wifi-p2p-peers.html b/docs/api/html/ref-dbus-wifi-p2p-peers.html index 99d0470f..bca9f9b8 100644 --- a/docs/api/html/ref-dbus-wifi-p2p-peers.html +++ b/docs/api/html/ref-dbus-wifi-p2p-peers.html @@ -8,7 +8,7 @@ - + @@ -23,10 +23,10 @@

The /org.freedesktop.NetworkManager.WifiP2PPeer/* objects

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html index b2bacf2e..5e7e464d 100644 --- a/docs/api/html/ref-settings.html +++ b/docs/api/html/ref-settings.html @@ -8,7 +8,7 @@ - + @@ -196,6 +196,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/secret-agents.html b/docs/api/html/secret-agents.html index b3df856d..fa1d052f 100644 --- a/docs/api/html/secret-agents.html +++ b/docs/api/html/secret-agents.html @@ -8,7 +8,7 @@ - + @@ -27,12 +27,12 @@
Secret agents
-org.freedesktop.NetworkManager.SecretAgent — User Secret Agent +org.freedesktop.NetworkManager.SecretAgent — User Secret Agent.
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/secrets-flags.html b/docs/api/html/secrets-flags.html index 1d59a930..66c07cef 100644 --- a/docs/api/html/secrets-flags.html +++ b/docs/api/html/secrets-flags.html @@ -8,7 +8,7 @@ - + @@ -58,6 +58,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-6lowpan.html b/docs/api/html/settings-6lowpan.html index 7daf602d..fd163b30 100644 --- a/docs/api/html/settings-6lowpan.html +++ b/docs/api/html/settings-6lowpan.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-802-11-olpc-mesh.html b/docs/api/html/settings-802-11-olpc-mesh.html index 1dd33145..b5370389 100644 --- a/docs/api/html/settings-802-11-olpc-mesh.html +++ b/docs/api/html/settings-802-11-olpc-mesh.html @@ -8,7 +8,7 @@ - + @@ -78,6 +78,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-802-11-wireless-security.html b/docs/api/html/settings-802-11-wireless-security.html index 033d365e..d2926389 100644 --- a/docs/api/html/settings-802-11-wireless-security.html +++ b/docs/api/html/settings-802-11-wireless-security.html @@ -8,7 +8,7 @@ - + @@ -180,6 +180,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-802-11-wireless.html b/docs/api/html/settings-802-11-wireless.html index ecdbfab9..68d7e07c 100644 --- a/docs/api/html/settings-802-11-wireless.html +++ b/docs/api/html/settings-802-11-wireless.html @@ -8,7 +8,7 @@ - + @@ -180,6 +180,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-802-1x.html b/docs/api/html/settings-802-1x.html index a1f6f6cf..91015533 100644 --- a/docs/api/html/settings-802-1x.html +++ b/docs/api/html/settings-802-1x.html @@ -8,7 +8,7 @@ - + @@ -342,6 +342,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-802-3-ethernet.html b/docs/api/html/settings-802-3-ethernet.html index 3b38ba11..b743783e 100644 --- a/docs/api/html/settings-802-3-ethernet.html +++ b/docs/api/html/settings-802-3-ethernet.html @@ -8,7 +8,7 @@ - + @@ -156,6 +156,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-adsl.html b/docs/api/html/settings-adsl.html index baa6ce9c..10cdb8d2 100644 --- a/docs/api/html/settings-adsl.html +++ b/docs/api/html/settings-adsl.html @@ -8,7 +8,7 @@ - + @@ -102,6 +102,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-bluetooth.html b/docs/api/html/settings-bluetooth.html index 76216b18..91bdf443 100644 --- a/docs/api/html/settings-bluetooth.html +++ b/docs/api/html/settings-bluetooth.html @@ -8,7 +8,7 @@ - + @@ -72,6 +72,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-bond-port.html b/docs/api/html/settings-bond-port.html index 4516d8c5..6496b891 100644 --- a/docs/api/html/settings-bond-port.html +++ b/docs/api/html/settings-bond-port.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-bond.html b/docs/api/html/settings-bond.html index 77da2c93..30fc8781 100644 --- a/docs/api/html/settings-bond.html +++ b/docs/api/html/settings-bond.html @@ -8,7 +8,7 @@ - + @@ -72,6 +72,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-bridge-port.html b/docs/api/html/settings-bridge-port.html index 5c2aa4f7..7b72a526 100644 --- a/docs/api/html/settings-bridge-port.html +++ b/docs/api/html/settings-bridge-port.html @@ -8,7 +8,7 @@ - + @@ -84,6 +84,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-bridge.html b/docs/api/html/settings-bridge.html index b19b3f0f..244f728a 100644 --- a/docs/api/html/settings-bridge.html +++ b/docs/api/html/settings-bridge.html @@ -8,7 +8,7 @@ - + @@ -228,6 +228,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-cdma.html b/docs/api/html/settings-cdma.html index fb29acc4..054dee32 100644 --- a/docs/api/html/settings-cdma.html +++ b/docs/api/html/settings-cdma.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-connection.html b/docs/api/html/settings-connection.html index 0756d597..f8e3c6c3 100644 --- a/docs/api/html/settings-connection.html +++ b/docs/api/html/settings-connection.html @@ -8,7 +8,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -177,7 +177,7 @@ - + @@ -216,6 +216,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-dcb.html b/docs/api/html/settings-dcb.html index 784cff03..b4df6ea6 100644 --- a/docs/api/html/settings-dcb.html +++ b/docs/api/html/settings-dcb.html @@ -8,7 +8,7 @@ - + @@ -150,6 +150,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-dummy.html b/docs/api/html/settings-dummy.html index d5c7d25c..027121fe 100644 --- a/docs/api/html/settings-dummy.html +++ b/docs/api/html/settings-dummy.html @@ -8,7 +8,7 @@ - + @@ -59,6 +59,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ethtool.html b/docs/api/html/settings-ethtool.html index 011f8cb5..42717eb2 100644 --- a/docs/api/html/settings-ethtool.html +++ b/docs/api/html/settings-ethtool.html @@ -8,7 +8,7 @@ - + @@ -59,6 +59,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-generic.html b/docs/api/html/settings-generic.html index 2e03accd..c6a5a552 100644 --- a/docs/api/html/settings-generic.html +++ b/docs/api/html/settings-generic.html @@ -8,7 +8,7 @@ - + @@ -59,6 +59,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-gsm.html b/docs/api/html/settings-gsm.html index a0c4cca8..682118ee 100644 --- a/docs/api/html/settings-gsm.html +++ b/docs/api/html/settings-gsm.html @@ -8,7 +8,7 @@ - + @@ -144,6 +144,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-hostname.html b/docs/api/html/settings-hostname.html index f93dd8f9..52e0d5fe 100644 --- a/docs/api/html/settings-hostname.html +++ b/docs/api/html/settings-hostname.html @@ -8,7 +8,7 @@ - + @@ -84,6 +84,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-infiniband.html b/docs/api/html/settings-infiniband.html index b14cc1c7..2d7ffa9a 100644 --- a/docs/api/html/settings-infiniband.html +++ b/docs/api/html/settings-infiniband.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ip-tunnel.html b/docs/api/html/settings-ip-tunnel.html index 4a154d49..859675bc 100644 --- a/docs/api/html/settings-ip-tunnel.html +++ b/docs/api/html/settings-ip-tunnel.html @@ -8,7 +8,7 @@ - + @@ -138,6 +138,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ipv4.html b/docs/api/html/settings-ipv4.html index 20cd3236..f4a9c416 100644 --- a/docs/api/html/settings-ipv4.html +++ b/docs/api/html/settings-ipv4.html @@ -8,7 +8,7 @@ - + @@ -222,6 +222,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ipv6.html b/docs/api/html/settings-ipv6.html index af20a399..e0965661 100644 --- a/docs/api/html/settings-ipv6.html +++ b/docs/api/html/settings-ipv6.html @@ -8,7 +8,7 @@ - + @@ -234,6 +234,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-macsec.html b/docs/api/html/settings-macsec.html index de743ee4..27228aa6 100644 --- a/docs/api/html/settings-macsec.html +++ b/docs/api/html/settings-macsec.html @@ -8,7 +8,7 @@ - + @@ -114,6 +114,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-macvlan.html b/docs/api/html/settings-macvlan.html index b09ca148..554d61d5 100644 --- a/docs/api/html/settings-macvlan.html +++ b/docs/api/html/settings-macvlan.html @@ -8,7 +8,7 @@ - + @@ -84,6 +84,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-match.html b/docs/api/html/settings-match.html index 172d0694..20a077fc 100644 --- a/docs/api/html/settings-match.html +++ b/docs/api/html/settings-match.html @@ -8,7 +8,7 @@ - + @@ -84,6 +84,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-bridge.html b/docs/api/html/settings-ovs-bridge.html index 011e49bc..9754e4bf 100644 --- a/docs/api/html/settings-ovs-bridge.html +++ b/docs/api/html/settings-ovs-bridge.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-dpdk.html b/docs/api/html/settings-ovs-dpdk.html index 40b560ae..74445249 100644 --- a/docs/api/html/settings-ovs-dpdk.html +++ b/docs/api/html/settings-ovs-dpdk.html @@ -8,7 +8,7 @@ - + @@ -72,6 +72,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-external-ids.html b/docs/api/html/settings-ovs-external-ids.html index 1a196728..d3f0657f 100644 --- a/docs/api/html/settings-ovs-external-ids.html +++ b/docs/api/html/settings-ovs-external-ids.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-interface.html b/docs/api/html/settings-ovs-interface.html index 931527db..41f2c8a3 100644 --- a/docs/api/html/settings-ovs-interface.html +++ b/docs/api/html/settings-ovs-interface.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-patch.html b/docs/api/html/settings-ovs-patch.html index c916043d..2b755089 100644 --- a/docs/api/html/settings-ovs-patch.html +++ b/docs/api/html/settings-ovs-patch.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ovs-port.html b/docs/api/html/settings-ovs-port.html index 2aa91ff7..6ca34831 100644 --- a/docs/api/html/settings-ovs-port.html +++ b/docs/api/html/settings-ovs-port.html @@ -8,7 +8,7 @@ - + @@ -96,6 +96,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-ppp.html b/docs/api/html/settings-ppp.html index 493cf752..fea6add6 100644 --- a/docs/api/html/settings-ppp.html +++ b/docs/api/html/settings-ppp.html @@ -8,7 +8,7 @@ - + @@ -168,6 +168,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-pppoe.html b/docs/api/html/settings-pppoe.html index 277dde3d..f91ed115 100644 --- a/docs/api/html/settings-pppoe.html +++ b/docs/api/html/settings-pppoe.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-proxy.html b/docs/api/html/settings-proxy.html index 8c1104d3..3f5a6248 100644 --- a/docs/api/html/settings-proxy.html +++ b/docs/api/html/settings-proxy.html @@ -8,7 +8,7 @@ - + @@ -69,7 +69,7 @@ - + @@ -84,6 +84,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-serial.html b/docs/api/html/settings-serial.html index ff473d40..20ddfb5b 100644 --- a/docs/api/html/settings-serial.html +++ b/docs/api/html/settings-serial.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-sriov.html b/docs/api/html/settings-sriov.html index 9f7fded6..a9daf616 100644 --- a/docs/api/html/settings-sriov.html +++ b/docs/api/html/settings-sriov.html @@ -8,7 +8,7 @@ - + @@ -78,6 +78,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-tc.html b/docs/api/html/settings-tc.html index ebcf0f23..9f4d53ee 100644 --- a/docs/api/html/settings-tc.html +++ b/docs/api/html/settings-tc.html @@ -8,7 +8,7 @@ - + @@ -72,6 +72,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-team-port.html b/docs/api/html/settings-team-port.html index 7fe18f0a..dbbe038d 100644 --- a/docs/api/html/settings-team-port.html +++ b/docs/api/html/settings-team-port.html @@ -8,7 +8,7 @@ - + @@ -102,6 +102,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-team.html b/docs/api/html/settings-team.html index 99cd91ee..412c7380 100644 --- a/docs/api/html/settings-team.html +++ b/docs/api/html/settings-team.html @@ -8,7 +8,7 @@ - + @@ -162,6 +162,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-tun.html b/docs/api/html/settings-tun.html index 46e23d62..f860607c 100644 --- a/docs/api/html/settings-tun.html +++ b/docs/api/html/settings-tun.html @@ -8,7 +8,7 @@ - + @@ -96,6 +96,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-user.html b/docs/api/html/settings-user.html index 33e64f03..1c8e4626 100644 --- a/docs/api/html/settings-user.html +++ b/docs/api/html/settings-user.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-veth.html b/docs/api/html/settings-veth.html index d53121c9..ea702cc6 100644 --- a/docs/api/html/settings-veth.html +++ b/docs/api/html/settings-veth.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-vlan.html b/docs/api/html/settings-vlan.html index be1e1d1f..ef3df77d 100644 --- a/docs/api/html/settings-vlan.html +++ b/docs/api/html/settings-vlan.html @@ -8,7 +8,7 @@ - + @@ -96,6 +96,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-vpn.html b/docs/api/html/settings-vpn.html index afd1ac72..9f8d5473 100644 --- a/docs/api/html/settings-vpn.html +++ b/docs/api/html/settings-vpn.html @@ -8,7 +8,7 @@ - + @@ -96,6 +96,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-vrf.html b/docs/api/html/settings-vrf.html index 6c49c512..12ba3b34 100644 --- a/docs/api/html/settings-vrf.html +++ b/docs/api/html/settings-vrf.html @@ -8,7 +8,7 @@ - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-vxlan.html b/docs/api/html/settings-vxlan.html index a0ec0963..b497855d 100644 --- a/docs/api/html/settings-vxlan.html +++ b/docs/api/html/settings-vxlan.html @@ -8,7 +8,7 @@ - + @@ -156,6 +156,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-wifi-p2p.html b/docs/api/html/settings-wifi-p2p.html index 9fe0a90b..8328b1d8 100644 --- a/docs/api/html/settings-wifi-p2p.html +++ b/docs/api/html/settings-wifi-p2p.html @@ -8,7 +8,7 @@ - + @@ -78,6 +78,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-wimax.html b/docs/api/html/settings-wimax.html index d733d7fd..919bfe4e 100644 --- a/docs/api/html/settings-wimax.html +++ b/docs/api/html/settings-wimax.html @@ -8,7 +8,7 @@ - + @@ -72,6 +72,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-wireguard.html b/docs/api/html/settings-wireguard.html index 01157792..850c85ab 100644 --- a/docs/api/html/settings-wireguard.html +++ b/docs/api/html/settings-wireguard.html @@ -8,7 +8,7 @@ - + @@ -114,6 +114,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/settings-wpan.html b/docs/api/html/settings-wpan.html index b0e3b24b..474d1155 100644 --- a/docs/api/html/settings-wpan.html +++ b/docs/api/html/settings-wpan.html @@ -8,7 +8,7 @@ - + @@ -90,6 +90,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html index 4138e610..8de008d9 100644 --- a/docs/api/html/spec.html +++ b/docs/api/html/spec.html @@ -8,7 +8,7 @@ - + @@ -27,156 +27,156 @@
The /org/freedesktop/NetworkManager object
-org.freedesktop.NetworkManager — Connection Manager +org.freedesktop.NetworkManager — Connection Manager.
The /org/freedesktop/NetworkManager/AgentManager object
-org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager +org.freedesktop.NetworkManager.AgentManager — Secret Agent Manager.
The /org/freedesktop/NetworkManager/DnsManager object
-org.freedesktop.NetworkManager.DnsManager — DNS Configuration State +org.freedesktop.NetworkManager.DnsManager — DNS Configuration State.
The /org/freedesktop/NetworkManager/Settings object
-org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager +org.freedesktop.NetworkManager.Settings — Connection Settings Profile Manager.
The /org/freedesktop/NetworkManager/Settings/* objects
-org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile +org.freedesktop.NetworkManager.Settings.Connection — Connection Settings Profile.
The /org/freedesktop/NetworkManager/Devices/* objects
-org.freedesktop.NetworkManager.Device — Device +org.freedesktop.NetworkManager.Device — Device.
-org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters +org.freedesktop.NetworkManager.Device.Statistics — Device Statistic Counters.
-org.freedesktop.NetworkManager.Device.Adsl — ADSL Device +org.freedesktop.NetworkManager.Device.Adsl — ADSL Device.
-org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device +org.freedesktop.NetworkManager.Device.Bluetooth — Bluetooth Device.
-org.freedesktop.NetworkManager.Device.Bond — Bonding Device +org.freedesktop.NetworkManager.Device.Bond — Bonding Device.
-org.freedesktop.NetworkManager.Device.Bridge — Bridging Device +org.freedesktop.NetworkManager.Device.Bridge — Bridging Device.
-org.freedesktop.NetworkManager.Device.Dummy — Dummy Device +org.freedesktop.NetworkManager.Device.Dummy — Dummy Device.
-org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device +org.freedesktop.NetworkManager.Device.Generic — Unrecognized Device.
-org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device +org.freedesktop.NetworkManager.Device.IPTunnel — IP Tunneling Device.
-org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device +org.freedesktop.NetworkManager.Device.Infiniband — Infiniband Device.
-org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device +org.freedesktop.NetworkManager.Device.Lowpan — 6LoWPAN Device.
-org.freedesktop.NetworkManager.Device.Macsec — MACSec Device +org.freedesktop.NetworkManager.Device.Macsec — MACSec Device.
-org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device +org.freedesktop.NetworkManager.Device.Macvlan — MAC VLAN Device.
-org.freedesktop.NetworkManager.Device.Modem — Modem Device +org.freedesktop.NetworkManager.Device.Modem — Modem Device.
-org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device +org.freedesktop.NetworkManager.Device.OlpcMesh — OLPC Wireless Mesh Device.
-org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device +org.freedesktop.NetworkManager.Device.OvsBridge — OvsBridge Device.
-org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device +org.freedesktop.NetworkManager.Device.OvsInterface — OvsInterface Device.
-org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device +org.freedesktop.NetworkManager.Device.OvsPort — OvsPort Device.
-org.freedesktop.NetworkManager.Device.Ppp — PPP Device +org.freedesktop.NetworkManager.Device.Ppp — PPP Device.
-org.freedesktop.NetworkManager.Device.Team — Teaming Device +org.freedesktop.NetworkManager.Device.Team — Teaming Device.
-org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device +org.freedesktop.NetworkManager.Device.Tun — Userspace Tunneling Device.
-org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device +org.freedesktop.NetworkManager.Device.Veth — Virtual Ethernet Device.
-org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device +org.freedesktop.NetworkManager.Device.Vlan — Virtual LAN Device.
-org.freedesktop.NetworkManager.Device.Vrf — VRF Device +org.freedesktop.NetworkManager.Device.Vrf — VRF Device.
-org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device +org.freedesktop.NetworkManager.Device.Vxlan — VXLAN Device.
-org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device +org.freedesktop.NetworkManager.Device.WifiP2P — Wi-Fi P2P Device.
-org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device +org.freedesktop.NetworkManager.Device.WireGuard — WireGuard Device.
-org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device +org.freedesktop.NetworkManager.Device.Wired — Wired Ethernet Device.
-org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device +org.freedesktop.NetworkManager.Device.Wireless — Wi-Fi Device.
-org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device +org.freedesktop.NetworkManager.Device.Wpan — IEEE 802.15.4 (WPAN) MAC Layer Device.
-org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin +org.freedesktop.NetworkManager.PPP — Helper interface for a PPP plugin.
The /org/freedesktop/NetworkManager/ActiveConnection/* objects
-org.freedesktop.NetworkManager.Connection.Active — Active Connection +org.freedesktop.NetworkManager.Connection.Active — Active Connection.
-org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection +org.freedesktop.NetworkManager.VPN.Connection — Active VPN Connection.
The /org/freedesktop/NetworkManager/IP4Config/* objects
-org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set +org.freedesktop.NetworkManager.IP4Config — IPv4 Configuration Set.
The /org/freedesktop/NetworkManager/IP6Config/* objects
-org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set +org.freedesktop.NetworkManager.IP6Config — IPv6 Configuration Set.
The /org/freedesktop/NetworkManager/DHCP4Config/* objects
-org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State +org.freedesktop.NetworkManager.DHCP4Config — IPv4 DHCP Client State.
The /org/freedesktop/NetworkManager/DHCP4Config/* objects
-org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State +org.freedesktop.NetworkManager.DHCP6Config — IPv6 DHCP Client State.
The /org/freedesktop/NetworkManager/AccessPoint/* objects
-org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point +org.freedesktop.NetworkManager.AccessPoint — Wi-Fi Access Point.
The /org.freedesktop.NetworkManager.WifiP2PPeer/* objects
-org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer +org.freedesktop.NetworkManager.WifiP2PPeer — Wi-Fi P2P Peer.
The /org/freedesktop/NetworkManager/Checkpoint/* objects
-org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot +org.freedesktop.NetworkManager.Checkpoint — Configuration and State Snapshot.
Types
@@ -190,6 +190,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/vpn-plugins.html b/docs/api/html/vpn-plugins.html index 76cfc099..9989a5bf 100644 --- a/docs/api/html/vpn-plugins.html +++ b/docs/api/html/vpn-plugins.html @@ -8,7 +8,7 @@ - + @@ -27,7 +27,7 @@
VPN services
-org.freedesktop.NetworkManager.VPN.Plugin — VPN Service +org.freedesktop.NetworkManager.VPN.Plugin — VPN Service.
Types
@@ -37,6 +37,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/network-manager-docs.xml b/docs/api/network-manager-docs.xml index 77b7e017..442b05aa 100644 --- a/docs/api/network-manager-docs.xml +++ b/docs/api/network-manager-docs.xml @@ -71,6 +71,7 @@ + diff --git a/docs/api/settings-spec.xml b/docs/api/settings-spec.xml index 25be59d9..749c952b 100644 --- a/docs/api/settings-spec.xml +++ b/docs/api/settings-spec.xml @@ -2,7 +2,7 @@ Configuration SettingsconnectionGeneral Connection Profile Settings Properties -
boolean TRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times.
@@ -255,7 +255,7 @@ stable-id string  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.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. See NetworkManager(8) manual about the secret-key and the host identity. 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.
@@ -297,7 +297,7 @@
-

6lowpan setting

+

6lowpan setting

6LoWPAN Settings.

@@ -323,7 +323,7 @@
-

802-1x setting

+

802-1x setting

IEEE 802.1x Authentication Settings.

@@ -673,7 +673,7 @@
-

adsl setting

+

adsl setting

ADSL Settings.

@@ -743,7 +743,7 @@
-

bluetooth setting

+

bluetooth setting

Bluetooth Settings.

@@ -778,7 +778,7 @@
-

bond setting

+

bond setting

Bonding Settings.

@@ -813,7 +813,7 @@
-

bridge setting

+

bridge setting

Bridging Settings.

@@ -1030,7 +1030,7 @@
-

bridge-port setting

+

bridge-port setting

Bridge Port Settings.

@@ -1079,7 +1079,7 @@
-

cdma setting

+

cdma setting

CDMA-based Mobile Broadband Settings.

@@ -1135,7 +1135,7 @@
-

dcb setting

+

dcb setting

Data Center Bridging Settings.

@@ -1261,7 +1261,7 @@
-

dummy setting

+

dummy setting

Dummy Link Settings.

@@ -1281,7 +1281,7 @@
-

ethtool setting

+

ethtool setting

Ethtool Ethernet Settings.

@@ -1301,7 +1301,7 @@
-

generic setting

+

generic setting

Generic Link Settings.

@@ -1321,7 +1321,7 @@
-

gsm setting

+

gsm setting

GSM-based Mobile Broadband Settings.

@@ -1440,7 +1440,7 @@
-

infiniband setting

+

infiniband setting

Infiniband Settings.

@@ -1496,7 +1496,7 @@
-

ipv4 setting

+

ipv4 setting

IPv4 Settings.

@@ -1706,7 +1706,7 @@
-

ipv6 setting

+

ipv6 setting

IPv6 Settings.

@@ -1930,7 +1930,7 @@
-

ip-tunnel setting

+

ip-tunnel setting

IP Tunneling Settings.

@@ -2042,7 +2042,7 @@
-

macsec setting

+

macsec setting

MACSec Settings.

@@ -2126,7 +2126,7 @@
-

macvlan setting

+

macvlan setting

MAC VLAN Settings.

@@ -2175,7 +2175,7 @@
-

match setting

+

match setting

Match settings.

@@ -2224,7 +2224,7 @@
-

802-11-olpc-mesh setting

+

802-11-olpc-mesh setting

OLPC Wireless Mesh Settings.

@@ -2266,7 +2266,7 @@
-

ovs-bridge setting

+

ovs-bridge setting

OvsBridge Link Settings.

@@ -2322,7 +2322,7 @@
-

ovs-dpdk setting

+

ovs-dpdk setting

OvsDpdk Link Settings.

@@ -2357,7 +2357,7 @@
-

ovs-interface setting

+

ovs-interface setting

Open vSwitch Interface Settings.

@@ -2383,7 +2383,7 @@
-

ovs-patch setting

+

ovs-patch setting

OvsPatch Link Settings.

@@ -2409,7 +2409,7 @@
-

ovs-port setting

+

ovs-port setting

OvsPort Link Settings.

@@ -2472,7 +2472,7 @@
-

ppp setting

+

ppp setting

Point-to-Point Protocol Settings.

@@ -2619,7 +2619,7 @@
-

pppoe setting

+

pppoe setting

PPP-over-Ethernet Settings.

@@ -2675,7 +2675,7 @@
-

proxy setting

+

proxy setting

WWW Proxy Settings.

@@ -2710,7 +2710,7 @@ pac-script - + + + + +
string  PAC script for the connection.PAC script for the connection. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function.
@@ -2724,7 +2724,7 @@
-

serial setting

+

serial setting

Serial Link Settings.

@@ -2780,7 +2780,7 @@
-

sriov setting

+

sriov setting

SR-IOV settings.

@@ -2822,7 +2822,7 @@
-

tc setting

+

tc setting

Linux Traffic Control Settings.

@@ -2857,7 +2857,7 @@
-

team setting

+

team setting

Teaming Settings.

@@ -2997,7 +2997,7 @@
-

team-port setting

+

team-port setting

Team Port Settings.

@@ -3067,7 +3067,7 @@
-

tun setting

+

tun setting

Tunnel Settings.

@@ -3130,7 +3130,7 @@
-

user setting

+

user setting

General User Profile Settings.

@@ -3156,7 +3156,7 @@
-

vlan setting

+

vlan setting

VLAN Settings.

@@ -3219,7 +3219,7 @@
-

vpn setting

+

vpn setting

VPN Settings.

@@ -3282,7 +3282,7 @@
-

vrf setting

+

vrf setting

VRF settings.

@@ -3308,7 +3308,7 @@
-

vxlan setting

+

vxlan setting

VXLAN Settings.

@@ -3441,7 +3441,7 @@
-

wifi-p2p setting

+

wifi-p2p setting

Wi-Fi P2P Settings.

@@ -3483,7 +3483,7 @@
-

wimax setting

+

wimax setting

WiMax Settings.

@@ -3518,7 +3518,7 @@
-

802-3-ethernet setting

+

802-3-ethernet setting

Wired Ethernet Settings.

@@ -3651,7 +3651,7 @@
-

wireguard setting

+

wireguard setting

WireGuard Settings.

@@ -3735,7 +3735,7 @@
-

802-11-wireless setting

+

802-11-wireless setting

Wi-Fi Settings.

@@ -3896,7 +3896,7 @@
-

802-11-wireless-security setting

+

802-11-wireless-security setting

Wi-Fi Security Settings.

@@ -4057,7 +4057,7 @@
-

wpan setting

+

wpan setting

IEEE 802.15.4 (WPAN) MAC Settings.

@@ -4113,7 +4113,7 @@
-

bond-port setting

+

bond-port setting

Bond Port Settings.

@@ -4139,7 +4139,7 @@
-

hostname setting

+

hostname setting

Hostname settings.

@@ -4188,7 +4188,7 @@
-

ovs-external-ids setting

+

ovs-external-ids setting

OVS External IDs Settings.

@@ -4214,7 +4214,7 @@
-

veth setting

+

veth setting

Veth Settings.

@@ -4278,6 +4278,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-settings-ifcfg-rh.html b/docs/api/html/nm-settings-ifcfg-rh.html index b0db2efd..390509ad 100644 --- a/docs/api/html/nm-settings-ifcfg-rh.html +++ b/docs/api/html/nm-settings-ifcfg-rh.html @@ -8,7 +8,7 @@ - + @@ -256,7 +256,7 @@ DEVICETYPE=TeamPort are NetworkManager specific extensions not understood by traditional initscripts.

-

Table 11. 6lowpan setting

+

Table 11. 6lowpan setting

@@ -274,7 +274,7 @@ DEVICETYPE=TeamPort

-

Table 12. 802-1x setting

+

Table 12. 802-1x setting

@@ -602,7 +602,7 @@ Example: IEEE_8021X_PRIVATE_KEY=/home/joe/mykey.p12

-

Table 13. bond-port setting

+

Table 13. bond-port setting

@@ -627,7 +627,7 @@ Allowed values: 0 - 65535

-

Table 14. bond setting

+

Table 14. bond setting

@@ -652,7 +652,7 @@ Example: BONDING_OPTS="miimon=100 mode=broadcast"

-

Table 15. bridge-port setting

+

Table 15. bridge-port setting

@@ -701,7 +701,7 @@ Example: BRIDGE_PORT_VLANS="1 pvid untagged,20,300-400 untagged"

-

Table 16. bridge setting

+

Table 16. bridge setting

@@ -940,7 +940,7 @@ Example: BRIDGING_OPTS="multicast_startup_query_interval=4000"
-

Table 17. connection setting

+

Table 17. connection setting

@@ -1167,7 +1167,7 @@ Allowed values: a valid URL that points to recommended policy fo

-

Table 18. dcb setting

+

Table 18. dcb setting

@@ -1302,7 +1302,7 @@ Example: DCB_PG_UP2TC=01623701 used explicitly to enable DCB so that the rest of the DCB_* variables can apply.

-

Table 19. ethtool setting

+

Table 19. ethtool setting

@@ -1320,7 +1320,7 @@ Example: DCB_PG_UP2TC=01623701

-

Table 20. hostname setting

+

Table 20. hostname setting

@@ -1375,7 +1375,7 @@ Example: HOSTNAME_ONLY_FROM_DEFAULT=0,1

-

Table 21. infiniband setting

+

Table 21. infiniband setting

@@ -1430,7 +1430,7 @@ Example: PHYSDEV=ib0

-

Table 22. ipv4 setting

+

Table 22. ipv4 setting

@@ -1607,7 +1607,7 @@ Example: DHCP_VENDOR_CLASS_IDENTIFIER=foo

-

Table 23. ipv6 setting

+

Table 23. ipv6 setting

@@ -1796,7 +1796,7 @@ Example: DHCPV6_DUID=LL; DHCPV6_DUID=0301deadbeef0001; DHCPV6_DU

-

Table 24. match setting

+

Table 24. match setting

@@ -1821,7 +1821,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 25. ovs-bridge setting

+

Table 25. ovs-bridge setting

@@ -1839,7 +1839,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 26. ovs-dpdk setting

+

Table 26. ovs-dpdk setting

@@ -1857,7 +1857,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 27. ovs-external-ids setting

+

Table 27. ovs-external-ids setting

@@ -1875,7 +1875,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 28. ovs-interface setting

+

Table 28. ovs-interface setting

@@ -1893,7 +1893,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 29. ovs-patch setting

+

Table 29. ovs-patch setting

@@ -1911,7 +1911,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 30. ovs-port setting

+

Table 30. ovs-port setting

@@ -1929,7 +1929,7 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0"

-

Table 31. proxy setting

+

Table 31. proxy setting

@@ -1974,15 +1974,15 @@ Example: PAC_URL=http://wpad.mycompany.com/wpad.dat - +Example: PAC_SCRIPT="function FindProxyForURL (url, host) { return 'PROXY proxy.example.com:8080; DIRECT'; }"
PAC_SCRIPT(+)  Path of the PAC script. +The PAC script. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function. -Example: PAC_SCRIPT=/home/joe/proxy.pac

-

Table 32. sriov setting

+

Table 32. sriov setting

@@ -2027,7 +2027,7 @@ Example: SRIOV_AUTOPROBE_DRIVERS=0,1

-

Table 33. tc setting

+

Table 33. tc setting

@@ -2064,7 +2064,7 @@ Example: FILTER1="parent ffff: matchall action simple sdata Inpu

-

Table 34. team-port setting

+

Table 34. team-port setting

@@ -2087,7 +2087,7 @@ Example: FILTER1="parent ffff: matchall action simple sdata Inpu

-

Table 35. team setting

+

Table 35. team setting

@@ -2110,7 +2110,7 @@ Example: FILTER1="parent ffff: matchall action simple sdata Inpu

-

Table 36. user setting

+

Table 36. user setting

@@ -2135,7 +2135,7 @@ Example: NM_USER_FOO__BAR=something

-

Table 37. veth setting

+

Table 37. veth setting

@@ -2153,7 +2153,7 @@ Example: NM_USER_FOO__BAR=something

-

Table 38. vlan setting

+

Table 38. vlan setting

@@ -2216,7 +2216,7 @@ Example: PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12

-

Table 39. vrf setting

+

Table 39. vrf setting

@@ -2234,7 +2234,7 @@ Example: PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12

-

Table 40. wifi-p2p setting

+

Table 40. wifi-p2p setting

@@ -2252,7 +2252,7 @@ Example: PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12

-

Table 41. 802-3-ethernet setting

+

Table 41. 802-3-ethernet setting

@@ -2373,7 +2373,7 @@ Example: ETHTOOL_OPTS="wol gs sopass 00:11:22:33:44:55"

-

Table 42. wireguard setting

+

Table 42. wireguard setting

@@ -2391,7 +2391,7 @@ Example: ETHTOOL_OPTS="wol gs sopass 00:11:22:33:44:55"

-

Table 43. 802-11-wireless-security setting

+

Table 43. 802-11-wireless-security setting

@@ -2573,7 +2573,7 @@ Allowed values: default, disable, optional, required

-

Table 44. 802-11-wireless setting

+

Table 44. 802-11-wireless setting

@@ -2730,7 +2730,7 @@ Allowed values: "yes", "no"

-

Table 45. wpan setting

+

Table 45. wpan setting

@@ -2789,6 +2789,6 @@ Allowed values: "yes", "no" +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-settings-keyfile.html b/docs/api/html/nm-settings-keyfile.html index 67754ad9..69bb333c 100644 --- a/docs/api/html/nm-settings-keyfile.html +++ b/docs/api/html/nm-settings-keyfile.html @@ -8,7 +8,7 @@ - + @@ -189,7 +189,7 @@ id=4
802-11-wireless-security = wifi-security
-

Table 1. bridge setting (section)

+

Table 1. bridge setting (section)

@@ -214,7 +214,7 @@ Example: mac-address=00:22:68:12:79:A2 mac-address=0;34;104;18;1

-

Table 2. infiniband setting (section)

+

Table 2. infiniband setting (section)

@@ -239,7 +239,7 @@ Example: mac-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:

-

Table 3. ipv4 setting (section)

+

Table 3. ipv4 setting (section)

@@ -290,7 +290,7 @@ Example: route1=8.8.8.0/24,10.1.1.1,77 route2=7.7.0.0/16

-

Table 4. ipv6 setting (section)

+

Table 4. ipv6 setting (section)

@@ -341,7 +341,7 @@ Example: route1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11

-

Table 5. serial setting (section)

+

Table 5. serial setting (section)

@@ -366,7 +366,7 @@ Example: parity=n

-

Table 6. vpn setting (section)

+

Table 6. vpn setting (section)

@@ -401,7 +401,7 @@ Example: password=Popocatepetl

-

Table 7. wifi-p2p setting (section)

+

Table 7. wifi-p2p setting (section)

@@ -424,7 +424,7 @@ Example: password=Popocatepetl

-

Table 8. 802-3-ethernet setting (section)

+

Table 8. 802-3-ethernet setting (section)

@@ -463,7 +463,7 @@ Example: mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79

-

Table 9. 802-11-wireless setting (section)

+

Table 9. 802-11-wireless setting (section)

@@ -510,7 +510,7 @@ Example: mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79

-

Table 10. wpan setting (section)

+

Table 10. wpan setting (section)

@@ -567,6 +567,6 @@ Example: mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79 +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-settings-nmcli.html b/docs/api/html/nm-settings-nmcli.html index 15de2854..e54b049c 100644 --- a/docs/api/html/nm-settings-nmcli.html +++ b/docs/api/html/nm-settings-nmcli.html @@ -8,7 +8,7 @@ - + @@ -67,7 +67,7 @@ property.

-

connection setting

+

connection setting

General Connection Profile Settings.

Properties: @@ -91,7 +91,7 @@

@@ -251,7 +251,7 @@ @@ -303,7 +303,7 @@
-

6lowpan setting

+

6lowpan setting

6LoWPAN Settings.

Properties: @@ -327,7 +327,7 @@


-

802-1x setting

+

802-1x setting

IEEE 802.1x Authentication Settings.

Properties: @@ -737,7 +737,7 @@


-

adsl setting

+

adsl setting

ADSL Settings.

Properties: @@ -819,7 +819,7 @@


-

bluetooth setting

+

bluetooth setting

Bluetooth Settings.

Properties: @@ -855,7 +855,7 @@


-

bond setting

+

bond setting

Bonding Settings.

Properties: @@ -877,7 +877,7 @@


-

bridge setting

+

bridge setting

Bridging Settings.

Properties: @@ -1127,7 +1127,7 @@


-

bridge-port setting

+

bridge-port setting

Bridge Port Settings.

Properties: @@ -1181,7 +1181,7 @@


-

cdma setting

+

cdma setting

CDMA-based Mobile Broadband Settings.

Properties: @@ -1243,7 +1243,7 @@


-

dcb setting

+

dcb setting

Data Center Bridging Settings.

Properties: @@ -1379,7 +1379,7 @@


-

ethtool setting

+

ethtool setting

Ethtool Ethernet Settings.

Properties: @@ -1743,7 +1743,7 @@


-

gsm setting

+

gsm setting

GSM-based Mobile Broadband Settings.

Properties: @@ -1881,7 +1881,7 @@


-

infiniband setting

+

infiniband setting

Infiniband Settings.

Properties: @@ -1947,7 +1947,7 @@


-

ipv4 setting

+

ipv4 setting

IPv4 Settings.

Properties: @@ -2182,7 +2182,8 @@ Various attributes are supported:

  • "table" - an unsigned 32 bit integer. The default depends on ipv4.route-table.

  • "tos" - an unsigned 8 bit integer. IPv4 only.

  • "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast.

  • +unavailable, prohibit, throw. +The default is unicast.

  • "window" - an unsigned 32 bit integer.

  • @@ -2215,7 +2216,7 @@ Example: priority 5 from 192.167.4.0/24 table 45


    -

    ipv6 setting

    +

    ipv6 setting

    IPv6 Settings.

    Properties: @@ -2239,7 +2240,7 @@ Example: priority 5 from 192.167.4.0/24 table 45

    @@ -2440,7 +2441,8 @@ Various attributes are supported:
  • "src" - an IPv6 address.

  • "table" - an unsigned 32 bit integer. The default depends on ipv6.route-table.

  • "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast.

  • +unavailable, prohibit, throw. +The default is unicast.

  • "window" - an unsigned 32 bit integer.

  • @@ -2481,7 +2483,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ip-tunnel setting

    +

    ip-tunnel setting

    IP Tunneling Settings.

    Properties: @@ -2609,7 +2611,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    macsec setting

    +

    macsec setting

    MACSec Settings.

    Properties: @@ -2711,7 +2713,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    macvlan setting

    +

    macvlan setting

    MAC VLAN Settings.

    Properties: @@ -2765,7 +2767,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    match setting

    +

    match setting

    Match settings.

    Properties: @@ -2813,7 +2815,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    802-11-olpc-mesh setting

    +

    802-11-olpc-mesh setting

    Alias: olpc-mesh

    OLPC Wireless Mesh Settings.

    @@ -2861,7 +2863,7 @@ Example: priority 5 from 1:2:3::5/128 table 45

    -

    ovs-bridge setting

    +

    ovs-bridge setting

    OvsBridge Link Settings.

    Properties: @@ -2917,7 +2919,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ovs-dpdk setting

    +

    ovs-dpdk setting

    OvsDpdk Link Settings.

    Properties: @@ -2949,7 +2951,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ovs-interface setting

    +

    ovs-interface setting

    Open vSwitch Interface Settings.

    Properties: @@ -2971,7 +2973,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ovs-patch setting

    +

    ovs-patch setting

    OvsPatch Link Settings.

    Properties: @@ -2993,7 +2995,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ovs-port setting

    +

    ovs-port setting

    OvsPort Link Settings.

    Properties: @@ -3057,7 +3059,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    ppp setting

    +

    ppp setting

    Point-to-Point Protocol Settings.

    Properties: @@ -3217,7 +3219,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    pppoe setting

    +

    pppoe setting

    PPP-over-Ethernet Settings.

    Properties: @@ -3283,7 +3285,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    proxy setting

    +

    proxy setting

    WWW Proxy Settings.

    Properties: @@ -3319,7 +3321,7 @@ Example: priority 5 from 1:2:3::5/128 table 45

    @@ -3339,7 +3341,7 @@ Example: priority 5 from 1:2:3::5/128 table 45
    -

    serial setting

    +

    serial setting

    Serial Link Settings.

    Properties: @@ -3395,7 +3397,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    sriov setting

    +

    sriov setting

    SR-IOV settings.

    Properties: @@ -3435,7 +3437,7 @@ Example: priority 5 from 1:2:3::5/128 table 45


    -

    tc setting

    +

    tc setting

    Linux Traffic Control Settings.

    Properties: @@ -3812,7 +3814,7 @@ The actual string to print.


    -

    team setting

    +

    team setting

    Teaming Settings.

    Properties: @@ -3958,7 +3960,7 @@ The actual string to print.


    -

    team-port setting

    +

    team-port setting

    Team Port Settings.

    Properties: @@ -4032,7 +4034,7 @@ The actual string to print.


    -

    tun setting

    +

    tun setting

    Tunnel Settings.

    Properties: @@ -4108,7 +4110,7 @@ The actual string to print.


    -

    vlan setting

    +

    vlan setting

    VLAN Settings.

    Properties: @@ -4174,7 +4176,7 @@ The actual string to print.


    -

    vpn setting

    +

    vpn setting

    VPN Settings.

    Properties: @@ -4242,7 +4244,7 @@ The actual string to print.


    -

    vrf setting

    +

    vrf setting

    VRF settings.

    Properties: @@ -4266,7 +4268,7 @@ The actual string to print.


    -

    vxlan setting

    +

    vxlan setting

    VXLAN Settings.

    Properties: @@ -4424,7 +4426,7 @@ The actual string to print.


    -

    wifi-p2p setting

    +

    wifi-p2p setting

    Wi-Fi P2P Settings.

    Properties: @@ -4466,7 +4468,7 @@ The actual string to print.


    -

    wimax setting

    +

    wimax setting

    WiMax Settings.

    Properties: @@ -4502,7 +4504,7 @@ The actual string to print.


    -

    802-3-ethernet setting

    +

    802-3-ethernet setting

    Alias: ethernet

    Wired Ethernet Settings.

    @@ -4646,7 +4648,7 @@ The actual string to print.

    -

    wireguard setting

    +

    wireguard setting

    WireGuard Settings.

    Properties: @@ -4728,7 +4730,7 @@ The actual string to print.


    -

    802-11-wireless setting

    +

    802-11-wireless setting

    Alias: wifi

    Wi-Fi Settings.

    @@ -4900,7 +4902,7 @@ The actual string to print.

    -

    802-11-wireless-security setting

    +

    802-11-wireless-security setting

    Alias: wifi-sec

    Wi-Fi Security Settings.

    @@ -5084,7 +5086,7 @@ The actual string to print.

    -

    wpan setting

    +

    wpan setting

    IEEE 802.15.4 (WPAN) MAC Settings.

    Properties: @@ -5150,7 +5152,7 @@ The actual string to print.


    -

    bond-port setting

    +

    bond-port setting

    Bond Port Settings.

    Properties: @@ -5174,7 +5176,7 @@ The actual string to print.


    -

    hostname setting

    +

    hostname setting

    Hostname settings.

    Properties: @@ -5222,7 +5224,7 @@ The actual string to print.


    -

    veth setting

    +

    veth setting

    Veth Settings.

    Properties: @@ -5284,6 +5286,6 @@ The actual string to print.

    +
    Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nm-vpn-dbus-types.html b/docs/api/html/nm-vpn-dbus-types.html index 7673b32e..31c1d323 100644 --- a/docs/api/html/nm-vpn-dbus-types.html +++ b/docs/api/html/nm-vpn-dbus-types.html @@ -8,7 +8,7 @@ - + @@ -555,6 +555,6 @@ +
    Generated by GTK-Doc V1.33.1 \ No newline at end of file diff --git a/docs/api/html/nmcli-examples.html b/docs/api/html/nmcli-examples.html index 1ea0c026..2bc6cbc2 100644 --- a/docs/api/html/nmcli-examples.html +++ b/docs/api/html/nmcli-examples.html @@ -8,7 +8,7 @@ - + @@ -33,7 +33,7 @@

    nmcli [OPTIONS...]

    -

    Description

    +

    Description

    nmcli is a command-line client for NetworkManager. It allows controlling NetworkManager and reporting its status. For more information @@ -46,9 +46,9 @@

    -

    Examples

    +

    Examples

    -

    Example 1. Listing available Wi-Fi APs

    +

    Example 1. Listing available Wi-Fi APs

    $ nmcli device wifi list
     *  SSID               MODE    CHAN  RATE       SIGNAL  BARS  SECURITY
    @@ -71,14 +71,14 @@
     

    -

    Example 2. Connect to a password-protected wifi network

    +

    Example 2. Connect to a password-protected wifi network

    $ nmcli device wifi connect "$SSID" password "$PASSWORD"
    $ nmcli --ask device wifi connect "$SSID"

    -

    Example 3. Showing general information and properties for a Wi-Fi interface

    +

    Example 3. Showing general information and properties for a Wi-Fi interface

    $ nmcli -p -f general,wifi-properties device show wlan0
     ===========================================================================
    @@ -120,7 +120,7 @@ WIFI-PROPERTIES.ADHOC:    yes
     

    -

    Example 4. Listing NetworkManager polkit permissions

    +

    Example 4. Listing NetworkManager polkit permissions

    $ nmcli general permissions
     PERMISSION                                                VALUE
    @@ -153,7 +153,7 @@ org.freedesktop.NetworkManager.reload                     auth

    -

    Example 5. Listing NetworkManager log level and domains

    +

    Example 5. Listing NetworkManager log level and domains

    $ nmcli general logging
     LEVEL  DOMAINS
    @@ -167,7 +167,7 @@ B,DISPATCH

    -

    Example 6. Changing NetworkManager logging

    +

    Example 6. Changing NetworkManager logging

    $ nmcli g log level DEBUG domains CORE,ETHER,IP
     $ nmcli g log level INFO domains DEFAULT
    @@ -180,7 +180,7 @@ B,DISPATCH

    -

    Example 7. Activating a VPN connection profile requiring interactive password input

    +

    Example 7. Activating a VPN connection profile requiring interactive password input

    $ nmcli --ask con up my-vpn-con

    @@ -195,7 +195,7 @@ B,DISPATCH


    -

    Example 8. Adding a bonding master and two slave connection profiles

    +

    Example 8. Adding a bonding master and two slave connection profiles

    $ nmcli con add type bond ifname mybond0 mode active-backup
     $ nmcli con add type ethernet ifname eth1 master mybond0
    @@ -211,7 +211,7 @@ B,DISPATCH

    -

    Example 9. Adding a team master and two slave connection profiles

    +

    Example 9. Adding a team master and two slave connection profiles

    $ nmcli con add type team con-name Team1 ifname Team1 config team1-master-json.conf
     $ nmcli con add type ethernet con-name Team1-slave1 ifname em1 master Team1
    @@ -239,7 +239,7 @@ B,DISPATCH

    -

    Example 10. Adding a bridge and two slave profiles

    +

    Example 10. Adding a bridge and two slave profiles

    $ nmcli con add type bridge con-name TowerBridge ifname TowerBridge
     $ nmcli con add type ethernet con-name br-slave-1 ifname ens3 master TowerBridge
    @@ -258,7 +258,7 @@ B,DISPATCH

    -

    Example 11. Adding an ethernet connection profile with manual IP configuration

    +

    Example 11. Adding an ethernet connection profile with manual IP configuration

    $ nmcli con add con-name my-con-em1 ifname em1 type ethernet \
       ip4 192.168.100.100/24 gw4 192.168.100.1 ip4 1.2.3.4 ip6 abbe::cafe
    @@ -281,7 +281,7 @@ B,DISPATCH

    -

    Example 12. Convenient field values retrieval for scripting

    +

    Example 12. Convenient field values retrieval for scripting

    $ nmcli -g ip4.address connection show my-con-eth0
     192.168.1.12/24
    @@ -301,7 +301,7 @@ IP4:192.168.1.12/24:192.168.1.1::192.168.1.1::

    -

    Example 13. Adding an Ethernet connection and configuring SR-IOV VFs

    +

    Example 13. Adding an Ethernet connection and configuring SR-IOV VFs

    $ nmcli con add type ethernet con-name EthernetPF ifname em1
     $ nmcli con modify EthernetPF sriov.total-vfs 3 sriov.autoprobe-drivers false
    @@ -321,7 +321,7 @@ IP4:192.168.1.12/24:192.168.1.1::192.168.1.1::

    -

    Example 14. Escaping colon characters in tabular mode

    +

    Example 14. Escaping colon characters in tabular mode

    $ nmcli -t -f general -e yes -m tab dev show eth0
     GENERAL:eth0:ethernet:Intel Corporation:82567LM Gigabit Network Connection:
    @@ -336,7 +336,7 @@ nager/ActiveConnection/9

    -

    Example 15. nmcli usage in a NetworkManager dispatcher script to make Ethernet and Wi-Fi mutually exclusive

    +

    Example 15. nmcli usage in a NetworkManager dispatcher script to make Ethernet and Wi-Fi mutually exclusive

     #!/bin/bash
    @@ -374,7 +374,7 @@ fi
     

    Example sessions of interactive connection editor

    -

    Example 16. Adding an ethernet connection profile in interactive editor (a)

    +

    Example 16. Adding an ethernet connection profile in interactive editor (a)

    $ nmcli connection edit type ethernet
     
    @@ -610,7 +610,7 @@ Connection 'ethernet-4' (de89cdeb-a3e1-4d53-8fa0-c22546c775f4) successfully
     

    -

    Example 17. Bluetooth connection profiles

    +

    Example 17. Bluetooth connection profiles

    NetworkManger supports both connecting to NAP and DUN devices as a client. It also supports sharing the network via a NAP server. @@ -636,7 +636,7 @@ Connection 'ethernet-4' (de89cdeb-a3e1-4d53-8fa0-c22546c775f4) successfully

    -

    See Also

    +

    See Also

    nmcli(1), NetworkManager(8), @@ -649,6 +649,6 @@ Connection 'ethernet-4' (de89cdeb-a3e1-4d53-8fa0-c22546c775f4) successfully

    +
    Generated by GTK-Doc V1.33.1
    \ No newline at end of file diff --git a/docs/api/html/nmcli.html b/docs/api/html/nmcli.html index 2c63c69b..5ca8f1f4 100644 --- a/docs/api/html/nmcli.html +++ b/docs/api/html/nmcli.html @@ -6,9 +6,9 @@ - + - + @@ -16,7 +16,7 @@
    - +

    Alias: autoconnect

    -

    Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.

    +

    Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times.

    Format: boolean

    stable-id

    -

    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.

    +

    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. See NetworkManager(8) manual about the secret-key and the host identity. 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.

    Format: string

    Alias: ip6

    -

    A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in increasing priority, meaning the last address will be the primary address.

    +

    A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5).

    Format: a comma separated list of addresses

    Alias: pac-script

    -

    PAC script for the connection.

    +

    The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two.

    Format: string

    Home UpPrevPrev Next
    @@ -427,7 +427,7 @@

    Connection Management Commands

    -

    nmcli connection { show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export } [ARGUMENTS...]

    +

    nmcli connection { show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export | migrate } [ARGUMENTS...]

    NetworkManager stores all network configuration as "connections", which are collections of data (Layer2 details, IP addressing, etc.) that describe how to create or connect to a network. A connection is "active" @@ -934,6 +934,31 @@ data will be printed to standard output.

    + migrate + [ + --plugin + plugin... + ] + [ id | uuid | path ] + [ID...] +

    +

    Migrate connection profiles to a different settings plugin, such + as keyfile (default) or ifcfg-rh.

    +

    The connection to be migrated is identified by its name, UUID or D-Bus path. + If ID is ambiguous, a keyword id, + uuid or path can be used. See connection + show above for the description of the + ID-specifying keywords.

    +

    If no connections are specified, the command acts on all available + connections. Therefore, with no arguments, the command migrates all connection + profiles to the keyfile plugin.

    +

    If --wait option is not specified, the default timeout will be 10 + seconds.

    +
    @@ -1357,6 +1382,10 @@

    Connection whose details is the user not permitted to see.

    connection-deprecated

    Connection that uses deprecated settings. It might not be possible to activate it.

    connectivity-full

    Connectivity state when Internet is reachable.

    Wi-Fi network that hasn't been actually seen (a hidden AP).

    wifi-deprecated

    Wi-Fi network that might be impossible to connect to due to use of deprecated functionality.

    disabled

    A property that is turned off.

    autoconnect
    boolean
    TRUE
    Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times.
    autoconnect-priority
    stable-id
    string
    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.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. See NetworkManager(8) manual about the secret-key and the host identity. 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.
    timestamp
    pac-script
    string
    PAC script for the connection.PAC script for the connection. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function.
    pac-url
    Key NameValue TypeDefault ValueValue Descriptionauth-retriesauth-retriesint32-1The 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.autoconnectautoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.autoconnect-priorityautoconnect-priorityint320The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.autoconnect-retriesautoconnect-retriesint32-1The 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.autoconnect-slavesautoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)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.dns-over-tlsdns-over-tlsint32-1Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.gateway-ping-timeoutgateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.ididstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-nameinterface-namestringThe 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.lldplldpint32-1Whether LLDP is enabled for the connection.llmnrllmnrint32-1Whether 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.mastermasterstringInterface name of the master device or UUID of the master connection.mdnsmdnsint32-1Whether 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.meteredmeteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlmud-urlstringIf 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".multi-connectmulti-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionspermissionsarray of stringAn 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.read-onlyread-onlybooleanFALSEFALSE 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.secondariessecondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typeslave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstable-idstringThis 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.timestamptimestampuint640The 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).typetypestringBase 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).uuiduuidstringA 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 "-").wait-device-timeoutwait-device-timeoutint32-1Timeout 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.zonezonestringThe 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.
    6lowpan6LoWPAN Settings + Key NameValue TypeDefault ValueValue Descriptionauth-retriesauth-retriesint32-1The 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.autoconnectautoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times.autoconnect-priorityautoconnect-priorityint320The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.autoconnect-retriesautoconnect-retriesint32-1The 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.autoconnect-slavesautoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)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.dns-over-tlsdns-over-tlsint32-1Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.gateway-ping-timeoutgateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.ididstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-nameinterface-namestringThe 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.lldplldpint32-1Whether LLDP is enabled for the connection.llmnrllmnrint32-1Whether 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.mastermasterstringInterface name of the master device or UUID of the master connection.mdnsmdnsint32-1Whether 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.meteredmeteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlmud-urlstringIf 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".multi-connectmulti-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionspermissionsarray of stringAn 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.read-onlyread-onlybooleanFALSEFALSE 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.secondariessecondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typeslave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstable-idstringThis 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. See NetworkManager(8) manual about the secret-key and the host identity. 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.timestamptimestampuint640The 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).typetypestringBase 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).uuiduuidstringA 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 "-").wait-device-timeoutwait-device-timeoutint32-1Timeout 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.zonezonestringThe 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.
    6lowpan6LoWPAN Settings Properties Key NameValue TypeDefault ValueValue DescriptionparentparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.
    802-1xIEEE 802.1x Authentication Settings Properties @@ -60,7 +60,7 @@ Properties Key NameValue TypeDefault ValueValue DescriptionparentparentstringIf 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.passwordpasswordstringPassword used to authenticate with the PPPoE service.password-flagspassword-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property.serviceservicestringIf 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.usernameusernamestringUsername used to authenticate with the PPPoE service.
    proxyWWW Proxy Settings Properties - Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodmethodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptpac-scriptstringPAC script for the connection.pac-urlpac-urlstringPAC URL for obtaining PAC file.
    serialSerial Link Settings + Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodmethodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptpac-scriptstringPAC script for the connection. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function.pac-urlpac-urlstringPAC URL for obtaining PAC file.
    serialSerial Link Settings Properties Key NameValue TypeDefault ValueValue Descriptionbaudbauduint3257600Speed 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.bitsbitsuint328Byte-width of the serial communication. The 8 in "8n1" for example.parityparitybyteThe connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.send-delaysend-delayuint640Time to delay between each byte sent to the modem, in microseconds.stopbitsstopbitsuint321Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.
    sriovSR-IOV settings Properties diff --git a/docs/api/version.xml b/docs/api/version.xml index 08a6a38d..f2363fea 100644 --- a/docs/api/version.xml +++ b/docs/api/version.xml @@ -1 +1 @@ -1.36.4 +1.37.92 diff --git a/docs/libnm/Makefile.in b/docs/libnm/Makefile.in index 2d29b0ef..9a7915d4 100644 --- a/docs/libnm/Makefile.in +++ b/docs/libnm/Makefile.in @@ -171,7 +171,6 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BLACK = @BLACK@ BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@ BLUEZ5_LIBS = @BLUEZ5_LIBS@ CC = @CC@ @@ -591,6 +590,7 @@ DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ + $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ @@ -652,9 +652,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libnm/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/libnm/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu docs/libnm/Makefile + $(AUTOMAKE) --foreign docs/libnm/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ diff --git a/docs/libnm/html/NMAccessPoint.html b/docs/libnm/html/NMAccessPoint.html index e587fdf9..e12e1c6f 100644 --- a/docs/libnm/html/NMAccessPoint.html +++ b/docs/libnm/html/NMAccessPoint.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMVpnConnection.html" title="NMVpnConnection"> <link rel="next" href="NMWifiP2PPeer.html" title="NMWifiP2PPeer"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -300,7 +300,7 @@ nm_access_point_get_ssid (<em class="parameter"><code><a class="link" href="NMAc <a name="nm-access-point-get-ssid.returns"></a><h4>Returns</h4> <p>the <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> containing the SSID, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the SSID is unknown. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -494,7 +494,7 @@ with this function.</p> </tr> <tr> <td class="parameter_name"><p>connections</p></td> -<td class="parameter_description"><p>an array of <span class="type">NMConnections</span> to +<td class="parameter_description"><p>an array of <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> to filter. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></td> </tr> @@ -504,13 +504,13 @@ filter. </p></td> <div class="refsect3"> <a name="nm-access-point-filter-connections.returns"></a><h4>Returns</h4> <p>an array of -<span class="type">NMConnections</span> that could be activated with the given <em class="parameter"><code>ap</code></em> +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>ap</code></em> . The array should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</code></a> when it is no longer required.</p> <p>WARNING: the transfer annotation for this function may not work correctly with bindings. See https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/305. You can filter the list yourself with <a class="link" href="NMAccessPoint.html#nm-access-point-connection-valid" title="nm_access_point_connection_valid ()"><code class="function">nm_access_point_connection_valid()</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> </div> </div> <hr> @@ -625,6 +625,6 @@ against</p></td> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMActiveConnection.html b/docs/libnm/html/NMActiveConnection.html index 4bbd1472..b385dc60 100644 --- a/docs/libnm/html/NMActiveConnection.html +++ b/docs/libnm/html/NMActiveConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceWpan.html" title="NMDeviceWpan"> <link rel="next" href="NMVpnConnection.html" title="NMVpnConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -278,7 +278,7 @@ nm_active_connection_get_connection (<em class="parameter"><code><a class="link" <a name="nm-active-connection-get-connection.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> which this <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> is an active instance of. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -529,7 +529,7 @@ nm_active_connection_get_master (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-active-connection-get-master.returns"></a><h4>Returns</h4> <p>the master <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> of the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -584,7 +584,7 @@ nm_active_connection_get_ip4_config (<em class="parameter"><code><a class="link" <a name="nm-active-connection-get-ip4-config.returns"></a><h4>Returns</h4> <p>the IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection is not in the <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> state. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -614,7 +614,7 @@ nm_active_connection_get_dhcp4_config (<em class="parameter"><code><a class="lin <p>the IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection does not use DHCP, or is not in the <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> state. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -669,7 +669,7 @@ nm_active_connection_get_ip6_config (<em class="parameter"><code><a class="link" <a name="nm-active-connection-get-ip6-config.returns"></a><h4>Returns</h4> <p>the IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection is not in the <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> state. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -699,7 +699,7 @@ nm_active_connection_get_dhcp6_config (<em class="parameter"><code><a class="lin <p>the IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection does not use DHCPv6, or is not in the <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> state. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -829,6 +829,6 @@ nm_active_connection_get_vpn (<em class="parameter"><code><a class="link" href=" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMCheckpoint.html b/docs/libnm/html/NMCheckpoint.html index c9283c0b..87f2a9c8 100644 --- a/docs/libnm/html/NMCheckpoint.html +++ b/docs/libnm/html/NMCheckpoint.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDhcpConfig.html" title="NMDhcpConfig"> <link rel="next" href="ch05.html" title="Utility API Reference"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -199,6 +199,6 @@ nm_checkpoint_get_rollback_timeout (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMClient.html b/docs/libnm/html/NMClient.html index 38c4877d..2e9f557a 100644 --- a/docs/libnm/html/NMClient.html +++ b/docs/libnm/html/NMClient.html @@ -8,7 +8,7 @@ <link rel="up" href="ch02.html" title="Client Object API Reference"> <link rel="prev" href="ch02.html" title="Client Object API Reference"> <link rel="next" href="NMSecretAgentOld.html" title="NMSecretAgentOld"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -300,6 +300,14 @@ </tr> <tr> <td class="function_type"> +<a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags"><span class="returnvalue">NMRadioFlags</span></a> +</td> +<td class="function_name"> +<a class="link" href="NMClient.html#nm-client-get-radio-flags" title="nm_client_get_radio_flags ()">nm_client_get_radio_flags</a> <span class="c_punctuation">()</span> +</td> +</tr> +<tr> +<td class="function_type"> <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> </td> <td class="function_name"> @@ -801,6 +809,30 @@ <a class="link" href="NMClient.html#nm-utils-print" title="nm_utils_print ()">nm_utils_print</a> <span class="c_punctuation">()</span> </td> </tr> +<tr> +<td class="function_type"> +<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +</td> +<td class="function_name"> +<a class="link" href="NMClient.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</a> <span class="c_punctuation">()</span> +</td> +</tr> +<tr> +<td class="function_type"> +<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +</td> +<td class="function_name"> +<a class="link" href="NMClient.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a> <span class="c_punctuation">()</span> +</td> +</tr> +<tr> +<td class="function_type"> +<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +</td> +<td class="function_name"> +<a class="link" href="NMClient.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a> <span class="c_punctuation">()</span> +</td> +</tr> </tbody> </table></div> </div> @@ -874,6 +906,10 @@ </tr> <tr> <td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-RADIO-FLAGS:CAPS" title="NM_CLIENT_RADIO_FLAGS">NM_CLIENT_RADIO_FLAGS</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> <td class="function_name"><a class="link" href="NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" title="NM_CLIENT_ACTIVE_CONNECTIONS">NM_CLIENT_ACTIVE_CONNECTIONS</a></td> </tr> <tr> @@ -1068,7 +1104,7 @@ nm_dns_entry_get_interface (<em class="parameter"><code><a class="link" href="NM <div class="refsect3"> <a name="nm-dns-entry-get-interface.returns"></a><h4>Returns</h4> <p>the interface name. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -1096,7 +1132,7 @@ nm_dns_entry_get_nameservers (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-dns-entry-get-nameservers.returns"></a><h4>Returns</h4> <p>the list of name servers. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -1124,7 +1160,7 @@ nm_dns_entry_get_domains (<em class="parameter"><code><a class="link" href="NMCl <div class="refsect3"> <a name="nm-dns-entry-get-domains.returns"></a><h4>Returns</h4> <p>the list of DNS domains. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -1385,7 +1421,7 @@ automatically initialized during async/sync init.</p> <div class="refsect3"> <a name="nm-client-get-dbus-connection.returns"></a><h4>Returns</h4> <p>the D-Bus connection of the client, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is set. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.22</p> </div> @@ -1420,7 +1456,7 @@ the <a class="link" href="NMClient.html#nm-client-get-context-busy-watcher" titl <div class="refsect3"> <a name="nm-client-get-main-context.returns"></a><h4>Returns</h4> <p>the <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> of the client. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.22</p> </div> @@ -1470,7 +1506,7 @@ references on this object to not keep it alive longer.</p> you may not need to worry about these "leaks". Also, if you anyway plan to continue iterating the <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> afterwards, then you don't need to care when exactly NMClient is gone completely. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.22</p> </div> @@ -1497,7 +1533,7 @@ nm_client_get_dbus_name_owner (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-client-get-dbus-name-owner.returns"></a><h4>Returns</h4> <p>the current name owner of the D-Bus service of NetworkManager. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.22</p> </div> @@ -1639,7 +1675,7 @@ nm_client_get_object_by_path (<em class="parameter"><code><a class="link" href=" <p>the <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a> instance that is cached under <em class="parameter"><code>dbus_path</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no such object exists. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -1732,7 +1768,7 @@ The numeric values correspond to <a class="link" href="libnm-nm-dbus-interface.h The array is terminated by a numeric zero sentinel at position <em class="parameter"><code>length</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -2054,6 +2090,33 @@ nm_client_wimax_hardware_get_enabled (<em class="parameter"><code><a class="link </div> <hr> <div class="refsect2"> +<a name="nm-client-get-radio-flags"></a><h3>nm_client_get_radio_flags ()</h3> +<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags"><span class="returnvalue">NMRadioFlags</span></a> +nm_client_get_radio_flags (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre> +<p>Get radio flags.</p> +<div class="refsect3"> +<a name="nm-client-get-radio-flags.parameters"></a><h4>Parameters</h4> +<div class="informaltable"><table class="informaltable" width="100%" border="0"> +<colgroup> +<col width="150px" class="parameters_name"> +<col class="parameters_description"> +<col width="200px" class="parameters_annotations"> +</colgroup> +<tbody><tr> +<td class="parameter_name"><p>client</p></td> +<td class="parameter_description"><p>a <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a></p></td> +<td class="parameter_annotations"> </td> +</tr></tbody> +</table></div> +</div> +<div class="refsect3"> +<a name="nm-client-get-radio-flags.returns"></a><h4>Returns</h4> +<p> the <a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags"><span class="type">NMRadioFlags</span></a>.</p> +</div> +<p class="since">Since: 1.38</p> +</div> +<hr> +<div class="refsect2"> <a name="nm-client-connectivity-check-get-available"></a><h3>nm_client_connectivity_check_get_available ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_client_connectivity_check_get_available @@ -2174,7 +2237,7 @@ connectivity.</p> <div class="refsect3"> <a name="nm-client-connectivity-check-get-uri.returns"></a><h4>Returns</h4> <p>the connectivity URI in use. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.20</p> </div> @@ -2686,7 +2749,7 @@ methods such as <a class="link" href="NMDeviceEthernet.html#nm-device-ethernet-g <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the <span class="type">NMDevices</span>. The returned array is owned by the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDevice]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDevice]</span></p> </div> </div> <hr> @@ -2722,7 +2785,7 @@ use device-specific methods such as <a class="link" href="NMDeviceEthernet.html# <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the <span class="type">NMDevices</span>. The returned array is owned by the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDevice]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDevice]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2759,7 +2822,7 @@ nm_client_get_device_by_path (<em class="parameter"><code><a class="link" href=" <a name="nm-client-get-device-by-path.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>object_path</code></em> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2795,7 +2858,7 @@ nm_client_get_device_by_iface (<em class="parameter"><code><a class="link" href= <a name="nm-client-get-device-by-iface.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> for the given <em class="parameter"><code>iface</code></em> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2824,7 +2887,7 @@ nm_client_get_active_connections (<em class="parameter"><code><a class="link" hr <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the active <span class="type">NMActiveConnections</span>. The returned array is owned by the client and should not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMActiveConnection]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMActiveConnection]</span></p> </div> </div> <hr> @@ -2860,7 +2923,7 @@ non-NetworkManager-recognized device, this will return <a href="https://develope <a name="nm-client-get-primary-connection.returns"></a><h4>Returns</h4> <p>the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if any. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2870,7 +2933,7 @@ any. </p> nm_client_get_activating_connection (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</code></em>);</pre> <p>Gets the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> corresponding to a currently-activating connection that is expected to become the new -<span class="type">“primary-connection”</span> upon successful activation.</p> +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--primary-connection"><span class="type">“primary-connection”</span></a> upon successful activation.</p> <div class="refsect3"> <a name="nm-client-get-activating-connection.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -2890,7 +2953,7 @@ currently-activating connection that is expected to become the new <a name="nm-client-get-activating-connection.returns"></a><h4>Returns</h4> <p>the appropriate <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>, if any. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2920,7 +2983,7 @@ in <em class="parameter"><code>connection</code></em> picks the best available connection for the device and activates it.</p> <p>Note that the callback is invoked when NetworkManager has started activating the new connection, not when it finishes. You can use the returned -<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <span class="type">“state”</span>) to +<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--state"><span class="type">“state”</span></a>) to track the activation to its completion.</p> <div class="refsect3"> <a name="nm-client-activate-connection-async.parameters"></a><h4>Parameters</h4> @@ -3018,7 +3081,7 @@ nm_client_activate_connection_finish (<em class="parameter"><code><a class="link <p>the new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> on success, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure, in which case <em class="parameter"><code>error</code></em> will be set. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -3040,7 +3103,7 @@ activated as with <a class="link" href="NMClient.html#nm-client-activate-connect VPN connections at this time.</p> <p>Note that the callback is invoked when NetworkManager has started activating the new connection, not when it finishes. You can used the returned -<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <span class="type">“state”</span>) to +<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--state"><span class="type">“state”</span></a>) to track the activation to its completion.</p> <div class="refsect3"> <a name="nm-client-add-and-activate-connection-async.parameters"></a><h4>Parameters</h4> @@ -3146,7 +3209,7 @@ nm_client_add_and_activate_connection_finish <p>the new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> on success, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure, in which case <em class="parameter"><code>error</code></em> will be set. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -3169,7 +3232,7 @@ activated as with <a class="link" href="NMClient.html#nm-client-activate-connect VPN connections at this time.</p> <p>Note that the callback is invoked when NetworkManager has started activating the new connection, not when it finishes. You can used the returned -<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <span class="type">“state”</span>) to +<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--state"><span class="type">“state”</span></a>) to track the activation to its completion.</p> <p>This is identical to <a class="link" href="NMClient.html#nm-client-add-and-activate-connection-async" title="nm_client_add_and_activate_connection_async ()"><code class="function">nm_client_add_and_activate_connection_async()</code></a> but takes a further <em class="parameter"><code>options</code></em> @@ -3291,7 +3354,7 @@ nm_client_add_and_activate_connection2_finish <td class="parameter_description"><p>the output result of type "a{sv}" returned by D-Bus' AddAndActivate2 call. Currently, no output is implemented yet. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -3301,7 +3364,7 @@ output is implemented yet. </p></td> <p>the new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> on success, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure, in which case <em class="parameter"><code>error</code></em> will be set. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -3471,7 +3534,7 @@ containing all connections provided by the remote settings service. The returned array is owned by the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified.</p> <p>The connections are as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMRemoteConnection]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMRemoteConnection]</span></p> </div> </div> <hr> @@ -3510,7 +3573,7 @@ nm_client_get_connection_by_id (<em class="parameter"><code><a class="link" href matching object was found.</p> <p>The connection is as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3549,7 +3612,7 @@ nm_client_get_connection_by_path (<em class="parameter"><code><a class="link" hr not known</p> <p>The connection is as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3588,7 +3651,7 @@ nm_client_get_connection_by_uuid (<em class="parameter"><code><a class="link" hr not known</p> <p>The connection is as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3703,7 +3766,7 @@ nm_client_add_connection_finish (<em class="parameter"><code><a class="link" hre <p>the new <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> on success, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure, in which case <em class="parameter"><code>error</code></em> will be set. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -3814,7 +3877,7 @@ nm_client_add_connection2_finish (<em class="parameter"><code><a class="link" hr from <code class="function">AddConnection2()</code>. If you care about the output result, then the "ignore_out_result" parameter of <a class="link" href="NMClient.html#nm-client-add-connection2" title="nm_client_add_connection2 ()"><code class="function">nm_client_add_connection2()</code></a> must not be set to <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>error</p></td> @@ -3828,7 +3891,7 @@ parameter of <a class="link" href="NMClient.html#nm-client-add-connection2" titl <a name="nm-client-add-connection2-finish.returns"></a><h4>Returns</h4> <p>on success, a pointer to the added <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.20</p> </div> @@ -3880,7 +3943,7 @@ filenames that failed to load.</p> <td class="parameter_name"><p>failures</p></td> <td class="parameter_description"><p>on return, a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of filenames that failed to load. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>cancellable</p></td> @@ -3991,7 +4054,7 @@ nm_client_load_connections_finish (<em class="parameter"><code><a class="link" h <td class="parameter_name"><p>failures</p></td> <td class="parameter_description"><p>on return, a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of filenames that failed to load. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td> </tr> <tr> <td class="parameter_name"><p>result</p></td> @@ -4227,7 +4290,7 @@ nm_client_get_dns_configuration (<em class="parameter"><code><a class="link" hre containing <a class="link" href="NMClient.html#NMDnsEntry"><span class="type">NMDnsEntry</span></a> elements or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case the value is not available. The returned array is owned by the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDnsEntry]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMDnsEntry]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -4257,7 +4320,7 @@ nm_client_get_checkpoints (<em class="parameter"><code><a class="link" href="NMC <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing all the <a class="link" href="NMCheckpoint.html" title="NMCheckpoint"><span class="type">NMCheckpoint</span></a>. The returned array is owned by the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> object and should not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMCheckpoint]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMCheckpoint]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -4369,7 +4432,7 @@ nm_client_checkpoint_create_finish (<em class="parameter"><code><a class="link" <p>the new <a class="link" href="NMCheckpoint.html" title="NMCheckpoint"><span class="type">NMCheckpoint</span></a> on success, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure, in which case <em class="parameter"><code>error</code></em> will be set. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -4556,7 +4619,7 @@ nm_client_checkpoint_rollback_finish (<em class="parameter"><code><a class="link <p>an hash table of devices and results. Devices are represented by their original D-Bus path; each result is a <a class="link" href="libnm-nm-dbus-interface.html#NMRollbackResult" title="enum NMRollbackResult"><span class="type">NMRollbackResult</span></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -4888,7 +4951,7 @@ nm_client_dbus_call_finish (<em class="parameter"><code><a class="link" href="NM <div class="refsect3"> <a name="nm-client-dbus-call-finish.returns"></a><h4>Returns</h4> <p>the result <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -5050,6 +5113,99 @@ a trailing newline.</p></td> </div> <p class="since">Since: 1.30</p> </div> +<hr> +<div class="refsect2"> +<a name="nm-utils-file-is-certificate"></a><h3>nm_utils_file_is_certificate ()</h3> +<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +nm_utils_file_is_certificate (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre> +<p>Tests if <em class="parameter"><code>filename</code></em> + has a valid extension for an X.509 certificate file +(".cer", ".crt", ".der", or ".pem"), and contains a certificate in a format +recognized by NetworkManager.</p> +<div class="refsect3"> +<a name="nm-utils-file-is-certificate.parameters"></a><h4>Parameters</h4> +<div class="informaltable"><table class="informaltable" width="100%" border="0"> +<colgroup> +<col width="150px" class="parameters_name"> +<col class="parameters_description"> +<col width="200px" class="parameters_annotations"> +</colgroup> +<tbody><tr> +<td class="parameter_name"><p>filename</p></td> +<td class="parameter_description"><p>name of the file to test</p></td> +<td class="parameter_annotations"> </td> +</tr></tbody> +</table></div> +</div> +<div class="refsect3"> +<a name="nm-utils-file-is-certificate.returns"></a><h4>Returns</h4> +<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is a certificate, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> +</div> +</div> +<hr> +<div class="refsect2"> +<a name="nm-utils-file-is-private-key"></a><h3>nm_utils_file_is_private_key ()</h3> +<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +nm_utils_file_is_private_key (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>, + <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *out_encrypted</code></em>);</pre> +<p>Tests if <em class="parameter"><code>filename</code></em> + has a valid extension for an X.509 private key file +(".der", ".key", ".pem", or ".p12"), and contains a private key in a format +recognized by NetworkManager.</p> +<div class="refsect3"> +<a name="nm-utils-file-is-private-key.parameters"></a><h4>Parameters</h4> +<div class="informaltable"><table class="informaltable" width="100%" border="0"> +<colgroup> +<col width="150px" class="parameters_name"> +<col class="parameters_description"> +<col width="200px" class="parameters_annotations"> +</colgroup> +<tbody> +<tr> +<td class="parameter_name"><p>filename</p></td> +<td class="parameter_description"><p>name of the file to test</p></td> +<td class="parameter_annotations"> </td> +</tr> +<tr> +<td class="parameter_name"><p>out_encrypted</p></td> +<td class="parameter_description"><p>on return, whether the file is encrypted. </p></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> +</tr> +</tbody> +</table></div> +</div> +<div class="refsect3"> +<a name="nm-utils-file-is-private-key.returns"></a><h4>Returns</h4> +<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is a private key, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> +</div> +</div> +<hr> +<div class="refsect2"> +<a name="nm-utils-file-is-pkcs12"></a><h3>nm_utils_file_is_pkcs12 ()</h3> +<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> +nm_utils_file_is_pkcs12 (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre> +<p>Tests if <em class="parameter"><code>filename</code></em> + is a PKCS#12 file.</p> +<div class="refsect3"> +<a name="nm-utils-file-is-pkcs12.parameters"></a><h4>Parameters</h4> +<div class="informaltable"><table class="informaltable" width="100%" border="0"> +<colgroup> +<col width="150px" class="parameters_name"> +<col class="parameters_description"> +<col width="200px" class="parameters_annotations"> +</colgroup> +<tbody><tr> +<td class="parameter_name"><p>filename</p></td> +<td class="parameter_description"><p>name of the file to test</p></td> +<td class="parameter_annotations"> </td> +</tr></tbody> +</table></div> +</div> +<div class="refsect3"> +<a name="nm-utils-file-is-pkcs12.returns"></a><h4>Returns</h4> +<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is PKCS#12, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> +</div> +</div> </div> <div class="refsect1"> <a name="NMClient.other_details"></a><h2>Types and Values</h2> @@ -5178,6 +5334,12 @@ to know whether the permissions are up to date.</p> </div> <hr> <div class="refsect2"> +<a name="NM-CLIENT-RADIO-FLAGS:CAPS"></a><h3>NM_CLIENT_RADIO_FLAGS</h3> +<pre class="programlisting">#define NM_CLIENT_RADIO_FLAGS "radio-flags" +</pre> +</div> +<hr> +<div class="refsect2"> <a name="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS"></a><h3>NM_CLIENT_ACTIVE_CONNECTIONS</h3> <pre class="programlisting">#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections" </pre> @@ -5398,6 +5560,6 @@ operation succeeded, but the object that was allegedly created (eg, </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMConnection.html b/docs/libnm/html/NMConnection.html index 7112ef08..28c120c1 100644 --- a/docs/libnm/html/NMConnection.html +++ b/docs/libnm/html/NMConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="ch03.html" title="Connection and Setting API Reference"> <link rel="next" href="NMSimpleConnection.html" title="NMSimpleConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -664,7 +664,7 @@ the setting object's reference count.</p> <tr> <td class="parameter_name"><p>setting</p></td> <td class="parameter_description"><p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> to add to the connection object. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -735,7 +735,7 @@ to the <a class="link" href="NMConnection.html" title="NMConnection"><span class <a name="nm-connection-get-setting.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting of that type was previously added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -772,7 +772,7 @@ the <a class="link" href="NMConnection.html" title="NMConnection"><span class="t <a name="nm-connection-get-setting-by-name.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no setting with that name was previously added to the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -810,7 +810,7 @@ marshalling over D-Bus or otherwise serializing.</p> <a name="nm-connection-to-dbus.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> describing the connection, its settings, and each setting's properties. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1182,7 +1182,7 @@ return points to an allocated <a href="https://developer.gnome.org/glib/unstable secrets of the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which may be required; the caller owns the array and must free the array itself with <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-free"><code class="function">g_ptr_array_free()</code></a>, but not free its elements. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1318,7 +1318,7 @@ failed (tried to update secrets for a setting that doesn't exist, etc)</p> nm_connection_set_path (<em class="parameter"><code><a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> *connection</code></em>, <em class="parameter"><code>const <span class="type">char</span> *path</code></em>);</pre> <p>Sets the D-Bus path of the connection. This property is not serialized, and -is only for the reference of the caller. Sets the <span class="type">“path”</span> +is only for the reference of the caller. Sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection--path"><span class="type">“path”</span></a> property.</p> <div class="refsect3"> <a name="nm-connection-set-path.parameters"></a><h4>Parameters</h4> @@ -1409,7 +1409,7 @@ nm_connection_is_type (<em class="parameter"><code><a class="link" href="NMConne <em class="parameter"><code>const <span class="type">char</span> *type</code></em>);</pre> <p>A convenience function to check if the given <em class="parameter"><code>connection</code></em> is a particular -type (ie wired, Wi-Fi, ppp, etc). Checks the <span class="type">“type”</span> +type (ie wired, Wi-Fi, ppp, etc). Checks the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--type"><span class="type">“type”</span></a> property of the connection and matches that against <em class="parameter"><code>type</code></em> .</p> <div class="refsect3"> @@ -1517,7 +1517,7 @@ nm_connection_get_settings (<em class="parameter"><code><a class="link" href="NM <em class="parameter"><code>connection</code></em> . If the connection has no settings, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -1684,7 +1684,7 @@ Eg, "VLAN (eth1.1)".</p> 's device, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>connection</code></em> is not a virtual connection type. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1711,7 +1711,7 @@ nm_connection_get_setting_802_1x (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-connection-get-setting-802-1x.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1738,7 +1738,7 @@ nm_connection_get_setting_bluetooth (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-bluetooth.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1765,7 +1765,7 @@ nm_connection_get_setting_bond (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-connection-get-setting-bond.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1792,7 +1792,7 @@ nm_connection_get_setting_team (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-connection-get-setting-team.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1819,7 +1819,7 @@ nm_connection_get_setting_team_port (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-team-port.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1846,7 +1846,7 @@ nm_connection_get_setting_bridge (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-connection-get-setting-bridge.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1873,7 +1873,7 @@ nm_connection_get_setting_bridge_port (<em class="parameter"><code><a class="lin <div class="refsect3"> <a name="nm-connection-get-setting-bridge-port.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1900,7 +1900,7 @@ nm_connection_get_setting_cdma (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-connection-get-setting-cdma.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingCdma.html" title="NMSettingCdma"><span class="type">NMSettingCdma</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1927,7 +1927,7 @@ nm_connection_get_setting_connection (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-connection-get-setting-connection.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1954,7 +1954,7 @@ nm_connection_get_setting_dcb (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-connection-get-setting-dcb.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> if the connection contains one, otherwise NULL. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1981,7 +1981,7 @@ nm_connection_get_setting_dummy (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-dummy.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingDummy.html" title="NMSettingDummy"><span class="type">NMSettingDummy</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.8</p> </div> @@ -2009,7 +2009,7 @@ nm_connection_get_setting_generic (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-connection-get-setting-generic.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> if the connection contains one, otherwise NULL. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2036,7 +2036,7 @@ nm_connection_get_setting_gsm (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-connection-get-setting-gsm.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="type">NMSettingGsm</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2063,7 +2063,7 @@ nm_connection_get_setting_infiniband (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-connection-get-setting-infiniband.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2090,7 +2090,7 @@ nm_connection_get_setting_ip_tunnel (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-ip-tunnel.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingIPTunnel.html" title="NMSettingIPTunnel"><span class="type">NMSettingIPTunnel</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2122,7 +2122,7 @@ majority of IPv4-setting-related methods are on that type, not <a name="nm-connection-get-setting-ip4-config.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP4Config][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP4Config][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2153,7 +2153,7 @@ majority of IPv6-setting-related methods are on that type, not <a name="nm-connection-get-setting-ip6-config.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP6Config][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP6Config][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2180,7 +2180,7 @@ nm_connection_get_setting_macsec (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-connection-get-setting-macsec.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingMacsec.html" title="NMSettingMacsec"><span class="type">NMSettingMacsec</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -2208,7 +2208,7 @@ nm_connection_get_setting_macvlan (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-connection-get-setting-macvlan.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingMacvlan.html" title="NMSettingMacvlan"><span class="type">NMSettingMacvlan</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2236,7 +2236,7 @@ nm_connection_get_setting_olpc_mesh (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-olpc-mesh.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2263,7 +2263,7 @@ nm_connection_get_setting_ovs_bridge (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-connection-get-setting-ovs-bridge.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingOvsBridge.html" title="NMSettingOvsBridge"><span class="type">NMSettingOvsBridge</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -2292,7 +2292,7 @@ nm_connection_get_setting_ovs_interface <div class="refsect3"> <a name="nm-connection-get-setting-ovs-interface.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingOvsInterface.html" title="NMSettingOvsInterface"><span class="type">NMSettingOvsInterface</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -2320,7 +2320,7 @@ nm_connection_get_setting_ovs_patch (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-ovs-patch.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingOvsPatch.html" title="NMSettingOvsPatch"><span class="type">NMSettingOvsPatch</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -2348,7 +2348,7 @@ nm_connection_get_setting_ovs_port (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-ovs-port.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingOvsPort.html" title="NMSettingOvsPort"><span class="type">NMSettingOvsPort</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -2376,7 +2376,7 @@ nm_connection_get_setting_ppp (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-connection-get-setting-ppp.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingPpp.html" title="NMSettingPpp"><span class="type">NMSettingPpp</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2403,7 +2403,7 @@ nm_connection_get_setting_pppoe (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-pppoe.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe"><span class="type">NMSettingPppoe</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2430,7 +2430,7 @@ nm_connection_get_setting_proxy (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-proxy.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingProxy.html" title="NMSettingProxy"><span class="type">NMSettingProxy</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -2458,7 +2458,7 @@ nm_connection_get_setting_serial (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-connection-get-setting-serial.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2485,7 +2485,7 @@ nm_connection_get_setting_tc_config (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-tc-config.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingTCConfig.html" title="NMSettingTCConfig"><span class="type">NMSettingTCConfig</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -2513,7 +2513,7 @@ nm_connection_get_setting_tun (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-connection-get-setting-tun.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingTun.html" title="NMSettingTun"><span class="type">NMSettingTun</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2541,7 +2541,7 @@ nm_connection_get_setting_vpn (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-connection-get-setting-vpn.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingVpn.html" title="NMSettingVpn"><span class="type">NMSettingVpn</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2568,7 +2568,7 @@ nm_connection_get_setting_wimax (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-wimax.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="type">NMSettingWimax</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2595,7 +2595,7 @@ nm_connection_get_setting_adsl (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-connection-get-setting-adsl.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="type">NMSettingAdsl</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2622,7 +2622,7 @@ nm_connection_get_setting_wired (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-wired.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2649,7 +2649,7 @@ nm_connection_get_setting_wireless (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-connection-get-setting-wireless.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2677,7 +2677,7 @@ nm_connection_get_setting_wireless_security <div class="refsect3"> <a name="nm-connection-get-setting-wireless-security.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2704,7 +2704,7 @@ nm_connection_get_setting_vlan (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-connection-get-setting-vlan.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2731,7 +2731,7 @@ nm_connection_get_setting_vxlan (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-connection-get-setting-vxlan.returns"></a><h4>Returns</h4> <p>an <a class="link" href="NMSettingVxlan.html" title="NMSettingVxlan"><span class="type">NMSettingVxlan</span></a> if the connection contains one, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2912,6 +2912,6 @@ are marked as never saved. Since: 1.32.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDevice.html b/docs/libnm/html/NMDevice.html index 655b559c..98ecddb8 100644 --- a/docs/libnm/html/NMDevice.html +++ b/docs/libnm/html/NMDevice.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="next" href="NMDevice6Lowpan.html" title="NMDevice6Lowpan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -1225,7 +1225,7 @@ works with VPN connections.</p> <a name="nm-device-get-ip4-config.returns"></a><h4>Returns</h4> <p>the IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1255,7 +1255,7 @@ works with VPN connections.</p> <a name="nm-device-get-dhcp4-config.returns"></a><h4>Returns</h4> <p>the IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not using DHCP. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1284,7 +1284,7 @@ works with VPN connections.</p> <div class="refsect3"> <a name="nm-device-get-ip6-config.returns"></a><h4>Returns</h4> <p>the IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1314,7 +1314,7 @@ works with VPN connections.</p> <a name="nm-device-get-dhcp6-config.returns"></a><h4>Returns</h4> <p>the IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not activated or not using DHCPv6. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1431,7 +1431,7 @@ nm_device_get_active_connection (<em class="parameter"><code><a class="link" hre <a name="nm-device-get-active-connection.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the device is not part of an active connection. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1546,7 +1546,7 @@ nm_device_is_real (<em class="parameter"><code><a class="link" href="NMDevice.ht <a name="nm-device-is-real.returns"></a><h4>Returns</h4> <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device exists, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is a placeholder device that could be automatically created by NetworkManager if one of its -<span class="type">“available-connections”</span> was activated.</p> +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--available-connections"><span class="type">“available-connections”</span></a> was activated.</p> </div> <p class="since">Since: 1.2</p> </div> @@ -1718,7 +1718,7 @@ nm_device_get_lldp_neighbors (<em class="parameter"><code><a class="link" href=" containing <a class="link" href="NMDevice.html#NMLldpNeighbor"><span class="type">NMLldpNeighbor</span></a>s. This is the internal copy used by the device and must not be modified. The library never modifies the returned array and thus it is safe for callers to reference and keep using it. </p> -<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMLldpNeighbor][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMLldpNeighbor][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -1784,7 +1784,7 @@ devices in <em class="parameter"><code>devices</code></em> <div class="refsect3"> <a name="nm-device-disambiguate-names.returns"></a><h4>Returns</h4> <p>the device names. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></p> </div> </div> <hr> @@ -2022,7 +2022,7 @@ the applied connection. </p></td> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error.</p> <p>The connection is as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2126,7 +2126,7 @@ connection. </p></td> of error.</p> <p>The connection is as received from D-Bus and might not validate according to <a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2425,7 +2425,7 @@ incompatible with the device. To get the full list of connections see </tr> <tr> <td class="parameter_name"><p>connections</p></td> -<td class="parameter_description"><p>an array of <span class="type">NMConnections</span> to filter. </p></td> +<td class="parameter_description"><p>an array of <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> to filter. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></td> </tr> </tbody> @@ -2434,13 +2434,13 @@ incompatible with the device. To get the full list of connections see <div class="refsect3"> <a name="nm-device-filter-connections.returns"></a><h4>Returns</h4> <p>an array of -<span class="type">NMConnections</span> that could be activated with the given <em class="parameter"><code>device</code></em> +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>device</code></em> . The array should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</code></a> when it is no longer required.</p> <p>WARNING: the transfer annotation for this function may not work correctly with bindings. See https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/305. You can filter the list yourself with <a class="link" href="NMDevice.html#nm-device-connection-valid" title="nm_device_connection_valid ()"><code class="function">nm_device_connection_valid()</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> </div> </div> <hr> @@ -2643,7 +2643,7 @@ nm_lldp_neighbor_get_attr_names (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-lldp-neighbor-get-attr-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2683,7 +2683,7 @@ nm_lldp_neighbor_get_attr_value (<em class="parameter"><code><a class="link" hre <p>the value or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the attribute with <em class="parameter"><code>name</code></em> was not found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -2702,7 +2702,7 @@ actually modify the (empty) instance.</p> <div class="refsect3"> <a name="nm-lldp-neighbor-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMDevice.html#NMLldpNeighbor"><span class="type">NMLldpNeighbor</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -2739,7 +2739,7 @@ nm_lldp_neighbor_get_attr_string_value <tr> <td class="parameter_name"><p>out_value</p></td> <td class="parameter_description"><p>on return, the attribute value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -3112,6 +3112,6 @@ all the VLANs.</p></li> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDevice6Lowpan.html b/docs/libnm/html/NMDevice6Lowpan.html index d5d37721..e111db8f 100644 --- a/docs/libnm/html/NMDevice6Lowpan.html +++ b/docs/libnm/html/NMDevice6Lowpan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDevice.html" title="NMDevice"> <link rel="next" href="NMDeviceAdsl.html" title="NMDeviceAdsl"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -104,7 +104,7 @@ nm_device_6lowpan_get_parent (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-device-6lowpan-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -132,6 +132,6 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceAdsl.html b/docs/libnm/html/NMDeviceAdsl.html index 0e8a73ae..b314c32e 100644 --- a/docs/libnm/html/NMDeviceAdsl.html +++ b/docs/libnm/html/NMDeviceAdsl.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDevice6Lowpan.html" title="NMDevice6Lowpan"> <link rel="next" href="NMDeviceBond.html" title="NMDeviceBond"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -102,6 +102,6 @@ nm_device_adsl_get_carrier (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceBond.html b/docs/libnm/html/NMDeviceBond.html index e8e145c0..5113d883 100644 --- a/docs/libnm/html/NMDeviceBond.html +++ b/docs/libnm/html/NMDeviceBond.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceAdsl.html" title="NMDeviceAdsl"> <link rel="next" href="NMDeviceBridge.html" title="NMDeviceBridge"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -207,6 +207,6 @@ copy used by the device, and must not be modified. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceBridge.html b/docs/libnm/html/NMDeviceBridge.html index c0832466..50e2a4cb 100644 --- a/docs/libnm/html/NMDeviceBridge.html +++ b/docs/libnm/html/NMDeviceBridge.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceBond.html" title="NMDeviceBond"> <link rel="next" href="NMDeviceBt.html" title="NMDeviceBt"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -207,6 +207,6 @@ copy used by the device, and must not be modified. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceBt.html b/docs/libnm/html/NMDeviceBt.html index 576f152c..203f66f0 100644 --- a/docs/libnm/html/NMDeviceBt.html +++ b/docs/libnm/html/NMDeviceBt.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceBridge.html" title="NMDeviceBridge"> <link rel="next" href="NMDeviceDummy.html" title="NMDeviceDummy"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -198,6 +198,6 @@ nm_device_bt_get_capabilities (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceDummy.html b/docs/libnm/html/NMDeviceDummy.html index 6b20f59d..0ec953c8 100644 --- a/docs/libnm/html/NMDeviceDummy.html +++ b/docs/libnm/html/NMDeviceDummy.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceBt.html" title="NMDeviceBt"> <link rel="next" href="NMDeviceEthernet.html" title="NMDeviceEthernet"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -83,6 +83,6 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceEthernet.html b/docs/libnm/html/NMDeviceEthernet.html index 69c6b370..8d4f2afe 100644 --- a/docs/libnm/html/NMDeviceEthernet.html +++ b/docs/libnm/html/NMDeviceEthernet.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceDummy.html" title="NMDeviceDummy"> <link rel="next" href="NMDeviceGeneric.html" title="NMDeviceGeneric"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -252,7 +252,7 @@ nm_device_ethernet_get_s390_subchannels <a name="nm-device-ethernet-get-s390-subchannels.returns"></a><h4>Returns</h4> <p>array of strings, each specifying one subchannel the s390 device uses to communicate to the host. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -291,6 +291,6 @@ one subchannel the s390 device uses to communicate to the host. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceGeneric.html b/docs/libnm/html/NMDeviceGeneric.html index ad57f2be..3adb4419 100644 --- a/docs/libnm/html/NMDeviceGeneric.html +++ b/docs/libnm/html/NMDeviceGeneric.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceEthernet.html" title="NMDeviceEthernet"> <link rel="next" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -119,6 +119,6 @@ device, and must not be modified.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceIPTunnel.html b/docs/libnm/html/NMDeviceIPTunnel.html index b4fa2952..fcc97c2a 100644 --- a/docs/libnm/html/NMDeviceIPTunnel.html +++ b/docs/libnm/html/NMDeviceIPTunnel.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband"> <link rel="next" href="NMDeviceMacsec.html" title="NMDeviceMacsec"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -220,7 +220,7 @@ nm_device_ip_tunnel_get_parent (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-device-ip-tunnel-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -590,6 +590,6 @@ nm_device_ip_tunnel_get_flags (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceInfiniband.html b/docs/libnm/html/NMDeviceInfiniband.html index 6e035cc3..2be02c05 100644 --- a/docs/libnm/html/NMDeviceInfiniband.html +++ b/docs/libnm/html/NMDeviceInfiniband.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceGeneric.html" title="NMDeviceGeneric"> <link rel="next" href="NMDeviceIPTunnel.html" title="NMDeviceIPTunnel"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -155,6 +155,6 @@ nm_device_infiniband_get_carrier (<em class="parameter"><code><a class="link" hr </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceMacsec.html b/docs/libnm/html/NMDeviceMacsec.html index e8b49b95..b5bc353a 100644 --- a/docs/libnm/html/NMDeviceMacsec.html +++ b/docs/libnm/html/NMDeviceMacsec.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceIPTunnel.html" title="NMDeviceIPTunnel"> <link rel="next" href="NMDeviceMacvlan.html" title="NMDeviceMacvlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -247,7 +247,7 @@ nm_device_macsec_get_parent (<em class="parameter"><code><a class="link" href="N <div class="refsect3"> <a name="nm-device-macsec-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -676,6 +676,6 @@ nm_device_macsec_get_replay_protect (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceMacvlan.html b/docs/libnm/html/NMDeviceMacvlan.html index 21dd5f5d..70be76fa 100644 --- a/docs/libnm/html/NMDeviceMacvlan.html +++ b/docs/libnm/html/NMDeviceMacvlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceMacsec.html" title="NMDeviceMacsec"> <link rel="next" href="NMDeviceModem.html" title="NMDeviceModem"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -139,7 +139,7 @@ nm_device_macvlan_get_parent (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-device-macvlan-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -267,6 +267,6 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceModem.html b/docs/libnm/html/NMDeviceModem.html index af31343d..3bc2f5c1 100644 --- a/docs/libnm/html/NMDeviceModem.html +++ b/docs/libnm/html/NMDeviceModem.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceMacvlan.html" title="NMDeviceMacvlan"> <link rel="next" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -291,6 +291,6 @@ nm_device_modem_get_apn (<em class="parameter"><code><a class="link" href="NMDev </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceOlpcMesh.html b/docs/libnm/html/NMDeviceOlpcMesh.html index d1c9e9e5..e005a5b4 100644 --- a/docs/libnm/html/NMDeviceOlpcMesh.html +++ b/docs/libnm/html/NMDeviceOlpcMesh.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceModem.html" title="NMDeviceModem"> <link rel="next" href="NMDeviceOvsBridge.html" title="NMDeviceOvsBridge"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -148,7 +148,7 @@ nm_device_olpc_mesh_get_companion (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-device-olpc-mesh-get-companion.returns"></a><h4>Returns</h4> <p>the companion of the device of <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -201,6 +201,6 @@ nm_device_olpc_mesh_get_active_channel </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceOvsBridge.html b/docs/libnm/html/NMDeviceOvsBridge.html index 00799da2..e88a734d 100644 --- a/docs/libnm/html/NMDeviceOvsBridge.html +++ b/docs/libnm/html/NMDeviceOvsBridge.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh"> <link rel="next" href="NMDeviceOvsInterface.html" title="NMDeviceOvsInterface"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -111,6 +111,6 @@ copy used by the device, and must not be modified. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceOvsInterface.html b/docs/libnm/html/NMDeviceOvsInterface.html index 407048ff..e629de36 100644 --- a/docs/libnm/html/NMDeviceOvsInterface.html +++ b/docs/libnm/html/NMDeviceOvsInterface.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceOvsBridge.html" title="NMDeviceOvsBridge"> <link rel="next" href="NMDeviceOvsPort.html" title="NMDeviceOvsPort"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -40,6 +40,6 @@ </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceOvsPort.html b/docs/libnm/html/NMDeviceOvsPort.html index 965f2099..faa9abfc 100644 --- a/docs/libnm/html/NMDeviceOvsPort.html +++ b/docs/libnm/html/NMDeviceOvsPort.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceOvsInterface.html" title="NMDeviceOvsInterface"> <link rel="next" href="NMDevicePpp.html" title="NMDevicePpp"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -111,6 +111,6 @@ copy used by the device, and must not be modified. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDevicePpp.html b/docs/libnm/html/NMDevicePpp.html index 8485b5d4..0dfb0074 100644 --- a/docs/libnm/html/NMDevicePpp.html +++ b/docs/libnm/html/NMDevicePpp.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceOvsPort.html" title="NMDeviceOvsPort"> <link rel="next" href="NMDeviceTeam.html" title="NMDeviceTeam"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -40,6 +40,6 @@ </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceTeam.html b/docs/libnm/html/NMDeviceTeam.html index fb195140..f37b15aa 100644 --- a/docs/libnm/html/NMDeviceTeam.html +++ b/docs/libnm/html/NMDeviceTeam.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDevicePpp.html" title="NMDevicePpp"> <link rel="next" href="NMDeviceTun.html" title="NMDeviceTun"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -252,6 +252,6 @@ device, and must not be modified.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceTun.html b/docs/libnm/html/NMDeviceTun.html index 2cd9edc2..9d41ed96 100644 --- a/docs/libnm/html/NMDeviceTun.html +++ b/docs/libnm/html/NMDeviceTun.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceTeam.html" title="NMDeviceTeam"> <link rel="next" href="NMDeviceVeth.html" title="NMDeviceVeth"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -335,6 +335,6 @@ nm_device_tun_get_multi_queue (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceVeth.html b/docs/libnm/html/NMDeviceVeth.html index d972fb70..dd03515c 100644 --- a/docs/libnm/html/NMDeviceVeth.html +++ b/docs/libnm/html/NMDeviceVeth.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceTun.html" title="NMDeviceTun"> <link rel="next" href="NMDeviceVlan.html" title="NMDeviceVlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -88,7 +88,7 @@ nm_device_veth_get_peer (<em class="parameter"><code><a class="link" href="NMDev <div class="refsect3"> <a name="nm-device-veth-get-peer.returns"></a><h4>Returns</h4> <p>the device's peer device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -103,6 +103,6 @@ nm_device_veth_get_peer (<em class="parameter"><code><a class="link" href="NMDev </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceVlan.html b/docs/libnm/html/NMDeviceVlan.html index 301fc988..463b4216 100644 --- a/docs/libnm/html/NMDeviceVlan.html +++ b/docs/libnm/html/NMDeviceVlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceVeth.html" title="NMDeviceVeth"> <link rel="next" href="NMDeviceVrf.html" title="NMDeviceVrf"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -185,7 +185,7 @@ nm_device_vlan_get_parent (<em class="parameter"><code><a class="link" href="NMD <div class="refsect3"> <a name="nm-device-vlan-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -242,6 +242,6 @@ nm_device_vlan_get_vlan_id (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceVrf.html b/docs/libnm/html/NMDeviceVrf.html index 8681e7f7..8eef1ea5 100644 --- a/docs/libnm/html/NMDeviceVrf.html +++ b/docs/libnm/html/NMDeviceVrf.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceVlan.html" title="NMDeviceVlan"> <link rel="next" href="NMDeviceVxlan.html" title="NMDeviceVxlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -102,6 +102,6 @@ nm_device_vrf_get_table (<em class="parameter"><code><a class="link" href="NMDev </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceVxlan.html b/docs/libnm/html/NMDeviceVxlan.html index 62c1fba9..745d07a3 100644 --- a/docs/libnm/html/NMDeviceVxlan.html +++ b/docs/libnm/html/NMDeviceVxlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceVrf.html" title="NMDeviceVrf"> <link rel="next" href="NMDeviceWifiP2P.html" title="NMDeviceWifiP2P"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -328,7 +328,7 @@ nm_device_vxlan_get_parent (<em class="parameter"><code><a class="link" href="NM <div class="refsect3"> <a name="nm-device-vxlan-get-parent.returns"></a><h4>Returns</h4> <p>the device's parent device. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -837,6 +837,6 @@ nm_device_vxlan_get_l3miss (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceWifi.html b/docs/libnm/html/NMDeviceWifi.html index 3d28400e..b479313b 100644 --- a/docs/libnm/html/NMDeviceWifi.html +++ b/docs/libnm/html/NMDeviceWifi.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceWifiP2P.html" title="NMDeviceWifiP2P"> <link rel="next" href="NMDeviceWimax.html" title="NMDeviceWimax"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -361,7 +361,7 @@ nm_device_wifi_get_active_access_point <div class="refsect3"> <a name="nm-device-wifi-get-active-access-point.returns"></a><h4>Returns</h4> <p>the access point or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -397,7 +397,7 @@ nm_device_wifi_get_access_point_by_path <div class="refsect3"> <a name="nm-device-wifi-get-access-point-by-path.returns"></a><h4>Returns</h4> <p>the access point or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -775,6 +775,6 @@ set.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceWifiP2P.html b/docs/libnm/html/NMDeviceWifiP2P.html index 3ccd1f7a..e40f0699 100644 --- a/docs/libnm/html/NMDeviceWifiP2P.html +++ b/docs/libnm/html/NMDeviceWifiP2P.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceVxlan.html" title="NMDeviceVxlan"> <link rel="next" href="NMDeviceWifi.html" title="NMDeviceWifi"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -163,7 +163,7 @@ nm_device_wifi_p2p_get_peer_by_path (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-device-wifi-p2p-get-peer-by-path.returns"></a><h4>Returns</h4> <p>the peer or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -402,6 +402,6 @@ nm_device_wifi_p2p_stop_find_finish (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceWimax.html b/docs/libnm/html/NMDeviceWimax.html index 71044299..dea41ffe 100644 --- a/docs/libnm/html/NMDeviceWimax.html +++ b/docs/libnm/html/NMDeviceWimax.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceWifi.html" title="NMDeviceWifi"> <link rel="next" href="NMDeviceWireGuard.html" title="NMDeviceWireGuard"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -217,7 +217,7 @@ nm_device_wimax_get_active_nsp (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-device-wimax-get-active-nsp.returns"></a><h4>Returns</h4> <p>the access point or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is active. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -256,7 +256,7 @@ nm_device_wimax_get_nsp_by_path (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-device-wimax-get-nsp-by-path.returns"></a><h4>Returns</h4> <p>the access point or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is found. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -504,6 +504,6 @@ nm_device_wimax_get_bsid (<em class="parameter"><code><a class="link" href="NMDe </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceWireGuard.html b/docs/libnm/html/NMDeviceWireGuard.html index 8e87bc77..f31103fb 100644 --- a/docs/libnm/html/NMDeviceWireGuard.html +++ b/docs/libnm/html/NMDeviceWireGuard.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceWimax.html" title="NMDeviceWimax"> <link rel="next" href="NMDeviceWpan.html" title="NMDeviceWpan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -117,7 +117,7 @@ nm_device_wireguard_get_public_key (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-device-wireguard-get-public-key.returns"></a><h4>Returns</h4> <p>the <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> containing the 32-byte public key. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -200,6 +200,6 @@ See: ip-rule(8)</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDeviceWpan.html b/docs/libnm/html/NMDeviceWpan.html index 080a6dd7..5455ddf7 100644 --- a/docs/libnm/html/NMDeviceWpan.html +++ b/docs/libnm/html/NMDeviceWpan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMDeviceWireGuard.html" title="NMDeviceWireGuard"> <link rel="next" href="NMActiveConnection.html" title="NMActiveConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -83,6 +83,6 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMDhcpConfig.html b/docs/libnm/html/NMDhcpConfig.html index f4cc1bd4..d0b57743 100644 --- a/docs/libnm/html/NMDhcpConfig.html +++ b/docs/libnm/html/NMDhcpConfig.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMIPConfig.html" title="NMIPConfig"> <link rel="next" href="NMCheckpoint.html" title="NMCheckpoint"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -141,7 +141,7 @@ nm_dhcp_config_get_options (<em class="parameter"><code><a class="link" href="NM <p>the <a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> containing strings for keys and values. This is the internal copy used by the configuration, and must not be modified. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 utf8]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 utf8]</span></p> </div> </div> <hr> @@ -196,6 +196,6 @@ configuration, and must not be modified.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMIPConfig.html b/docs/libnm/html/NMIPConfig.html index b3d4adbf..2c9c22b6 100644 --- a/docs/libnm/html/NMIPConfig.html +++ b/docs/libnm/html/NMIPConfig.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMWimaxNsp.html" title="NMWimaxNsp"> <link rel="next" href="NMDhcpConfig.html" title="NMDhcpConfig"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -199,7 +199,7 @@ nm_ip_config_get_gateway (<em class="parameter"><code><a class="link" href="NMIP <div class="refsect3"> <a name="nm-ip-config-get-gateway.returns"></a><h4>Returns</h4> <p>the IP address of the gateway. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -229,7 +229,7 @@ nm_ip_config_get_addresses (<em class="parameter"><code><a class="link" href="NM containing <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>es. This is the internal copy used by the configuration and must not be modified. The library never modifies the returned array and thus it is safe for callers to reference and keep using it. </p> -<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -259,7 +259,7 @@ nm_ip_config_get_routes (<em class="parameter"><code><a class="link" href="NMIPC <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>s. This is the internal copy used by the configuration, and must not be modified. The library never modifies the returned array and thus it is safe for callers to reference and keep using it. </p> -<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -286,7 +286,7 @@ nm_ip_config_get_nameservers (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-ip-config-get-nameservers.returns"></a><h4>Returns</h4> <p>the array of nameserver IP addresses. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -314,7 +314,7 @@ nm_ip_config_get_domains (<em class="parameter"><code><a class="link" href="NMIP <a name="nm-ip-config-get-domains.returns"></a><h4>Returns</h4> <p>the array of domains. (This is never <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -342,7 +342,7 @@ nm_ip_config_get_searches (<em class="parameter"><code><a class="link" href="NMI <a name="nm-ip-config-get-searches.returns"></a><h4>Returns</h4> <p>the array of DNS search strings. (This is never <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -370,7 +370,7 @@ nm_ip_config_get_wins_servers (<em class="parameter"><code><a class="link" href= <a name="nm-ip-config-get-wins-servers.returns"></a><h4>Returns</h4> <p>the arry of WINS server IP address strings. (This is never <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length.). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> </div> @@ -426,6 +426,6 @@ nm_ip_config_get_wins_servers (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMObject.html b/docs/libnm/html/NMObject.html index 19e4fd94..12dd2b28 100644 --- a/docs/libnm/html/NMObject.html +++ b/docs/libnm/html/NMObject.html @@ -8,7 +8,7 @@ <link rel="up" href="ch02.html" title="Client Object API Reference"> <link rel="prev" href="NMSecretAgentOld.html" title="NMSecretAgentOld"> <link rel="next" href="libnm-nm-errors.html" title="nm-errors"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -139,7 +139,7 @@ object is still alive.</p> <p>the <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> cache in which the object can be found, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the object is no longer cached. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -160,6 +160,6 @@ cached. </p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMRemoteConnection.html b/docs/libnm/html/NMRemoteConnection.html index 84980e94..f589f9ed 100644 --- a/docs/libnm/html/NMRemoteConnection.html +++ b/docs/libnm/html/NMRemoteConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSimpleConnection.html" title="NMSimpleConnection"> <link rel="next" href="NMSetting.html" title="NMSetting"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -327,7 +327,7 @@ nm_remote_connection_update2_finish (<em class="parameter"><code><a class="link" <a name="nm-remote-connection-update2-finish.returns"></a><h4>Returns</h4> <p>on success, a <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type "a{sv}" with the result. On failure, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -793,7 +793,7 @@ not a simple property accessor.</p> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> containing <em class="parameter"><code>connection</code></em> 's secrets, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -887,7 +887,7 @@ nm_remote_connection_get_secrets_finish <p>a <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> containing <em class="parameter"><code>connection</code></em> 's secrets, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1044,6 +1044,6 @@ user, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.ht </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSecretAgentOld.html b/docs/libnm/html/NMSecretAgentOld.html index e5405a7a..7ca38400 100644 --- a/docs/libnm/html/NMSecretAgentOld.html +++ b/docs/libnm/html/NMSecretAgentOld.html @@ -8,7 +8,7 @@ <link rel="up" href="ch02.html" title="Client Object API Reference"> <link rel="prev" href="NMClient.html" title="NMClient"> <link rel="next" href="NMObject.html" title="NMObject"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -365,7 +365,7 @@ something like this:</p> note that this object will be unrefed after the callback has returned, use <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback has returned. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>secrets</p></td> @@ -422,7 +422,7 @@ should be called.</p> note that this object will be unrefed after the callback has returned, use <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback has returned. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>error</p></td> @@ -469,7 +469,7 @@ should be called.</p> note that this object will be unrefed after the callback has returned, use <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a>/<a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> if you want to use this object after the callback has returned. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>error</p></td> @@ -511,7 +511,7 @@ nm_secret_agent_old_get_dbus_connection <p>the <a href="https://developer.gnome.org/gio/unstable/GDBusConnection.html#GDBusConnection-struct"><span class="type">GDBusConnection</span></a> used by the secret agent. You may either set this as construct property <a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-DBUS-CONNECTION:CAPS" title="NM_SECRET_AGENT_OLD_DBUS_CONNECTION"><code class="literal">NM_SECRET_AGENT_OLD_DBUS_CONNECTION</code></a>, or it will automatically set during initialization. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -540,7 +540,7 @@ nm_secret_agent_old_get_main_context (<em class="parameter"><code><a class="link <p>the <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> instance associate with the instance. This is the <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#g-main-context-get-thread-default"><code class="function">g_main_context_get_thread_default()</code></a> at the time when creating the instance. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -579,7 +579,7 @@ that all remains are cleaned up.</p> <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> that you may register a weak pointer to know that the <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> is still kept busy by <em class="parameter"><code>self</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -1152,6 +1152,6 @@ of 3 characters. An example valid identifier is 'org.gnome.nm-applet' </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSetting.html b/docs/libnm/html/NMSetting.html index d7b87b47..36675132 100644 --- a/docs/libnm/html/NMSetting.html +++ b/docs/libnm/html/NMSetting.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMRemoteConnection.html" title="NMRemoteConnection"> <link rel="next" href="NMSettingConnection.html" title="NMSettingConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -440,7 +440,7 @@ nm_setting_duplicate (<em class="parameter"><code><a class="link" href="NMSettin <a name="nm-setting-duplicate.returns"></a><h4>Returns</h4> <p>a new <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> containing the same properties and values as the source <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -659,7 +659,7 @@ settings differ, on return a hash table mapping the differing keys to one or more <a class="link" href="NMSetting.html#NMSettingDiffResult" title="enum NMSettingDiffResult"><code class="literal">NMSettingDiffResult</code></a> values OR-ed together. If the settings do not differ, any hash table passed in is unmodified. If no hash table is passed in and the settings differ, a new one is created and returned. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 guint32]</span></td> </tr> </tbody> </table></div> @@ -866,7 +866,7 @@ nm_setting_option_get (<em class="parameter"><code><a class="link" href="NMSetti <a name="nm-setting-option-get.returns"></a><h4>Returns</h4> <p>the <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the option is not set. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.26.</p> </div> @@ -1097,7 +1097,7 @@ nm_setting_option_get_all_names (<em class="parameter"><code><a class="link" hre <p>A <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of key names. If no names are present, this returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. The returned array and the names are owned by <a class="link" href="NMSetting.html" title="NMSetting"><code class="literal">NMSetting</code></a> and might be invalidated by the next operation. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len zero-terminated=1][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len zero-terminated=1][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.26</p> </div> @@ -1458,6 +1458,6 @@ if you specify <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_W </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSetting6Lowpan.html b/docs/libnm/html/NMSetting6Lowpan.html index a00b307f..f179af2b 100644 --- a/docs/libnm/html/NMSetting6Lowpan.html +++ b/docs/libnm/html/NMSetting6Lowpan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingConnection.html" title="NMSettingConnection"> <link rel="next" href="NMSetting8021x.html" title="NMSetting8021x"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -91,7 +91,7 @@ nm_setting_6lowpan_new (<em class="parameter"><code><span class="type">void</spa <div class="refsect3"> <a name="nm-setting-6lowpan-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSetting6Lowpan.html" title="NMSetting6Lowpan"><span class="type">NMSetting6Lowpan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -138,6 +138,6 @@ nm_setting_6lowpan_get_parent (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSetting8021x.html b/docs/libnm/html/NMSetting8021x.html index da4624a4..c79db83f 100644 --- a/docs/libnm/html/NMSetting8021x.html +++ b/docs/libnm/html/NMSetting8021x.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSetting6Lowpan.html" title="NMSetting6Lowpan"> <link rel="next" href="NMSettingAdsl.html" title="NMSettingAdsl"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -1106,7 +1106,7 @@ nm_setting_802_1x_get_eap_method (<em class="parameter"><code><a class="link" hr nm_setting_802_1x_add_eap_method (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>, <em class="parameter"><code>const <span class="type">char</span> *eap</code></em>);</pre> <p>Adds an allowed EAP method. The setting is not valid until at least one -EAP method has been added. See <span class="type">“eap”</span> property for a list of +EAP method has been added. See <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--eap"><span class="type">“eap”</span></a> property for a list of allowed EAP methods.</p> <div class="refsect3"> <a name="nm-setting-802-1x-add-eap-method.parameters"></a><h4>Parameters</h4> @@ -1259,7 +1259,7 @@ nm_setting_802_1x_get_anonymous_identity (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre> <p>Returns the anonymous identifier used by some EAP methods (like TTLS) to authenticate the user in the outer unencrypted "phase 1" authentication. The -inner "phase 2" authentication will use the <span class="type">“identity”</span> in +inner "phase 2" authentication will use the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--identity"><span class="type">“identity”</span></a> in a secure form, if applicable for that EAP method.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-anonymous-identity.parameters"></a><h4>Parameters</h4> @@ -1312,9 +1312,9 @@ nm_setting_802_1x_get_pac_file (<em class="parameter"><code><a class="link" href <a name="nm-setting-802-1x-get-system-ca-certs"></a><h3>nm_setting_802_1x_get_system_ca_certs ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_802_1x_get_system_ca_certs (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre> -<p>Sets the <span class="type">“system-ca-certs”</span> property. The -<span class="type">“ca-path”</span> and <span class="type">“phase2-ca-path”</span> -properties are ignored if the <span class="type">“system-ca-certs”</span> property is +<p>Sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--system-ca-certs"><span class="type">“system-ca-certs”</span></a> property. The +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-path"><span class="type">“ca-path”</span></a> and <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-path"><span class="type">“phase2-ca-path”</span></a> +properties are ignored if the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--system-ca-certs"><span class="type">“system-ca-certs”</span></a> property is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, in which case a system-wide CA certificate directory specified at compile time (using the --system-ca-path configure option) is used in place of these properties.</p> @@ -1346,7 +1346,7 @@ nm_setting_802_1x_get_ca_path (<em class="parameter"><code><a class="link" href= <p>Returns the path of the CA certificate directory if previously set. Systems will often have a directory that contains multiple individual CA certificates which the supplicant can then add to the verification chain. This may be -used in addition to the <span class="type">“ca-cert”</span> property to add more CA +used in addition to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-cert"><span class="type">“ca-cert”</span></a> property to add more CA certificates for verifying the network to client.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-ca-path.parameters"></a><h4>Parameters</h4> @@ -1376,7 +1376,7 @@ nm_setting_802_1x_get_phase2_ca_path (<em class="parameter"><code><a class="link <p>Returns the path of the "phase 2" CA certificate directory if previously set. Systems will often have a directory that contains multiple individual CA certificates which the supplicant can then add to the verification chain. -This may be used in addition to the <span class="type">“phase2-ca-cert”</span> property +This may be used in addition to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-cert"><span class="type">“phase2-ca-cert”</span></a> property to add more CA certificates for verifying the network to client.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-ca-path.parameters"></a><h4>Parameters</h4> @@ -1456,7 +1456,7 @@ of the network cannot be confirmed by the client.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-ca-cert-blob.returns"></a><h4>Returns</h4> <p>the CA certificate data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1531,7 +1531,7 @@ nm_setting_802_1x_set_ca_cert (<em class="parameter"><code><a class="link" href= <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>, <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre> -<p>Reads a certificate from disk and sets the <span class="type">“ca-cert”</span> property +<p>Reads a certificate from disk and sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-cert"><span class="type">“ca-cert”</span></a> property with the raw certificate data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> @@ -1606,7 +1606,7 @@ nm_setting_802_1x_get_ca_cert_password <div class="refsect3"> <a name="nm-setting-802-1x-get-ca-cert-password.returns"></a><h4>Returns</h4> <p> the password used to access the CA certificate stored in -<span class="type">“ca-cert”</span> property. Only makes sense if the certificate +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-cert"><span class="type">“ca-cert”</span></a> property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.</p> </div> <p class="since">Since: 1.8</p> @@ -1661,7 +1661,7 @@ nm_setting_802_1x_get_subject_match (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-802-1x-get-subject-match.returns"></a><h4>Returns</h4> -<p> the <span class="type">“subject-match”</span> property. This is the +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--subject-match"><span class="type">“subject-match”</span></a> property. This is the substring to be matched against the subject of the authentication server certificate, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification is to be performed.</p> @@ -1674,7 +1674,7 @@ performed.</p> nm_setting_802_1x_get_num_altsubject_matches (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre> <p>Returns the number of entries in the -<span class="type">“altsubject-matches”</span> property of this setting.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--altsubject-matches"><span class="type">“altsubject-matches”</span></a> property of this setting.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-num-altsubject-matches.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1971,7 +1971,7 @@ authentication method.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-client-cert-blob.returns"></a><h4>Returns</h4> <p>the client certificate data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2044,7 +2044,7 @@ nm_setting_802_1x_set_client_cert (<em class="parameter"><code><a class="link" h <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>, <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre> -<p>Reads a certificate from disk and sets the <span class="type">“client-cert”</span> +<p>Reads a certificate from disk and sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--client-cert"><span class="type">“client-cert”</span></a> property with the raw certificate data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> @@ -2123,7 +2123,7 @@ nm_setting_802_1x_get_client_cert_password <div class="refsect3"> <a name="nm-setting-802-1x-get-client-cert-password.returns"></a><h4>Returns</h4> <p> the password used to access the client certificate stored in -<span class="type">“client-cert”</span> property. Only makes sense if the certificate +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--client-cert"><span class="type">“client-cert”</span></a> property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.</p> </div> <p class="since">Since: 1.8</p> @@ -2179,7 +2179,7 @@ nm_setting_802_1x_get_phase1_peapver (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-setting-802-1x-get-phase1-peapver.returns"></a><h4>Returns</h4> <p> the "phase 1" PEAP version to be used when authenticating with -EAP-PEAP as contained in the <span class="type">“phase1-peapver”</span> property. Valid +EAP-PEAP as contained in the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-peapver"><span class="type">“phase1-peapver”</span></a> property. Valid values are <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset), "0" (PEAP version 0), and "1" (PEAP version 1).</p> </div> </div> @@ -2208,7 +2208,7 @@ nm_setting_802_1x_get_phase1_peaplabel <a name="nm-setting-802-1x-get-phase1-peaplabel.returns"></a><h4>Returns</h4> <p> whether the "phase 1" PEAP label is new-style or old-style, to be used when authenticating with EAP-PEAP, as contained in the -<span class="type">“phase1-peaplabel”</span> property. Valid values are <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset), +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-peaplabel"><span class="type">“phase1-peaplabel”</span></a> property. Valid values are <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (unset), "0" (use old-style label), and "1" (use new-style label). See the wpa_supplicant documentation for more details.</p> </div> @@ -2237,7 +2237,7 @@ nm_setting_802_1x_get_phase1_fast_provisioning <div class="refsect3"> <a name="nm-setting-802-1x-get-phase1-fast-provisioning.returns"></a><h4>Returns</h4> <p> whether "phase 1" PEAP fast provisioning should be used, as specified -by the <span class="type">“phase1-fast-provisioning”</span> property. See the +by the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning"><span class="type">“phase1-fast-provisioning”</span></a> property. See the wpa_supplicant documentation for more details.</p> </div> </div> @@ -2264,7 +2264,7 @@ nm_setting_802_1x_get_phase2_auth (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-auth.returns"></a><h4>Returns</h4> <p> the "phase 2" non-EAP (ex MD5) allowed authentication method as -specified by the <span class="type">“phase2-auth”</span> property.</p> +specified by the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-auth"><span class="type">“phase2-auth”</span></a> property.</p> </div> </div> <hr> @@ -2290,7 +2290,7 @@ nm_setting_802_1x_get_phase2_autheap (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-autheap.returns"></a><h4>Returns</h4> <p> the "phase 2" EAP-based (ex TLS) allowed authentication method as -specified by the <span class="type">“phase2-autheap”</span> property.</p> +specified by the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-autheap"><span class="type">“phase2-autheap”</span></a> property.</p> </div> </div> <hr> @@ -2354,7 +2354,7 @@ of the network cannot be confirmed by the client.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-ca-cert-blob.returns"></a><h4>Returns</h4> <p>the "phase 2" CA certificate data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2431,7 +2431,7 @@ nm_setting_802_1x_set_phase2_ca_cert (<em class="parameter"><code><a class="link <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>, <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre> -<p>Reads a certificate from disk and sets the <span class="type">“phase2-ca-cert”</span> +<p>Reads a certificate from disk and sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-cert"><span class="type">“phase2-ca-cert”</span></a> property with the raw certificate data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> @@ -2506,7 +2506,7 @@ nm_setting_802_1x_get_phase2_ca_cert_password <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-ca-cert-password.returns"></a><h4>Returns</h4> <p> the password used to access the "phase2" CA certificate stored in -<span class="type">“phase2-ca-cert”</span> property. Only makes sense if the certificate +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-cert"><span class="type">“phase2-ca-cert”</span></a> property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.</p> </div> <p class="since">Since: 1.8</p> @@ -2535,7 +2535,7 @@ nm_setting_802_1x_get_phase2_ca_cert_password_flags <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-ca-cert-password-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“phase2-private-key-password”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"><span class="type">“phase2-private-key-password”</span></a></p> </div> <p class="since">Since: 1.8</p> </div> @@ -2562,7 +2562,7 @@ nm_setting_802_1x_get_phase2_subject_match </div> <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-subject-match.returns"></a><h4>Returns</h4> -<p> the <span class="type">“phase2-subject-match”</span> property. This is +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-subject-match"><span class="type">“phase2-subject-match”</span></a> property. This is the substring to be matched against the subject of the "phase 2" authentication server certificate, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> no subject verification is to be performed.</p> @@ -2575,7 +2575,7 @@ is to be performed.</p> nm_setting_802_1x_get_num_phase2_altsubject_matches (<em class="parameter"><code><a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> *setting</code></em>);</pre> <p>Returns the number of entries in the -<span class="type">“phase2-altsubject-matches”</span> property of this setting.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches"><span class="type">“phase2-altsubject-matches”</span></a> property of this setting.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-num-phase2-altsubject-matches.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -2877,7 +2877,7 @@ authentication method.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-client-cert-blob.returns"></a><h4>Returns</h4> <p>the "phase 2" client certificate data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2952,7 +2952,7 @@ nm_setting_802_1x_set_phase2_client_cert <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme"><span class="type">NMSetting8021xCKScheme</span></a> scheme</code></em>, <em class="parameter"><code><a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat"><span class="type">NMSetting8021xCKFormat</span></a> *out_format</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre> -<p>Reads a certificate from disk and sets the <span class="type">“phase2-client-cert”</span> +<p>Reads a certificate from disk and sets the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-client-cert"><span class="type">“phase2-client-cert”</span></a> property with the raw certificate data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the certificate file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> @@ -3031,7 +3031,7 @@ nm_setting_802_1x_get_phase2_client_cert_password <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-client-cert-password.returns"></a><h4>Returns</h4> <p> the password used to access the "phase2" client certificate stored in -<span class="type">“phase2-client-cert”</span> property. Only makes sense if the certificate +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-client-cert"><span class="type">“phase2-client-cert”</span></a> property. Only makes sense if the certificate is stored on a PKCS#11 token that requires a login.</p> </div> <p class="since">Since: 1.8</p> @@ -3087,7 +3087,7 @@ nm_setting_802_1x_get_password (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-setting-802-1x-get-password.returns"></a><h4>Returns</h4> <p> the password used by the authentication method, if any, as specified -by the <span class="type">“password”</span> property</p> +by the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password"><span class="type">“password”</span></a> property</p> </div> </div> <hr> @@ -3112,7 +3112,7 @@ nm_setting_802_1x_get_password_flags (<em class="parameter"><code><a class="link </div> <div class="refsect3"> <a name="nm-setting-802-1x-get-password-flags.returns"></a><h4>Returns</h4> -<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <span class="type">“password”</span></p> +<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password"><span class="type">“password”</span></a></p> </div> </div> <hr> @@ -3139,8 +3139,8 @@ nm_setting_802_1x_get_password_raw (<em class="parameter"><code><a class="link" <a name="nm-setting-802-1x-get-password-raw.returns"></a><h4>Returns</h4> <p>the password used by the authentication method as a UTF-8-encoded array of bytes, as specified by the -<span class="type">“password-raw”</span> property. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password-raw"><span class="type">“password-raw”</span></a> property. </p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3167,7 +3167,7 @@ nm_setting_802_1x_get_password_raw_flags <div class="refsect3"> <a name="nm-setting-802-1x-get-password-raw-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“password-raw”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password-raw"><span class="type">“password-raw”</span></a></p> </div> </div> <hr> @@ -3193,7 +3193,7 @@ nm_setting_802_1x_get_pin (<em class="parameter"><code><a class="link" href="NMS <div class="refsect3"> <a name="nm-setting-802-1x-get-pin.returns"></a><h4>Returns</h4> <p> the PIN used by the authentication method, if any, as specified -by the <span class="type">“pin”</span> property</p> +by the <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--pin"><span class="type">“pin”</span></a> property</p> </div> </div> <hr> @@ -3219,7 +3219,7 @@ nm_setting_802_1x_get_pin_flags (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-setting-802-1x-get-pin-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“pin”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--pin"><span class="type">“pin”</span></a></p> </div> </div> <hr> @@ -3285,7 +3285,7 @@ keys should always be encrypted with a private key password.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-private-key-blob.returns"></a><h4>Returns</h4> <p>the private key data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3363,14 +3363,14 @@ nm_setting_802_1x_set_private_key (<em class="parameter"><code><a class="link" h when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x authentication method.</p> <p>This function reads a private key from disk and sets the -<span class="type">“private-key”</span> property with the private key file data if using +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key"><span class="type">“private-key”</span></a> property with the private key file data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the private key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> <p>If <em class="parameter"><code>password</code></em> is given, this function attempts to decrypt the private key to verify that <em class="parameter"><code>password</code></em> is correct, and if it is, updates the -<span class="type">“private-key-password”</span> property with the given <em class="parameter"><code>password</code></em> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key-password"><span class="type">“private-key-password”</span></a> property with the given <em class="parameter"><code>password</code></em> . If the decryption is unsuccessful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em> is set, and no @@ -3461,7 +3461,7 @@ nm_setting_802_1x_get_private_key_password <a name="nm-setting-802-1x-get-private-key-password.returns"></a><h4>Returns</h4> <p> the private key password used to decrypt the private key if previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-private-key" title="nm_setting_802_1x_set_private_key ()"><code class="function">nm_setting_802_1x_set_private_key()</code></a>, or the -<span class="type">“private-key-password”</span> property.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key-password"><span class="type">“private-key-password”</span></a> property.</p> </div> </div> <hr> @@ -3488,7 +3488,7 @@ nm_setting_802_1x_get_private_key_password_flags <div class="refsect3"> <a name="nm-setting-802-1x-get-private-key-password-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“private-key-password”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key-password"><span class="type">“private-key-password”</span></a></p> </div> </div> <hr> @@ -3515,7 +3515,7 @@ nm_setting_802_1x_get_private_key_format <div class="refsect3"> <a name="nm-setting-802-1x-get-private-key-format.returns"></a><h4>Returns</h4> <p> the data format of the private key data stored in the -<span class="type">“private-key”</span> property</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key"><span class="type">“private-key”</span></a> property</p> </div> </div> <hr> @@ -3581,7 +3581,7 @@ keys should always be encrypted with a private key password.</p> <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-private-key-blob.returns"></a><h4>Returns</h4> <p>the "phase 2" private key data. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -3661,14 +3661,14 @@ nm_setting_802_1x_set_phase2_private_key when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x authentication method.</p> <p>This function reads a private key from disk and sets the -<span class="type">“phase2-private-key”</span> property with the private key file data if +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key"><span class="type">“phase2-private-key”</span></a> property with the private key file data if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_BLOB</code></a> scheme, or with the path to the private key file if using the <a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS"><code class="literal">NM_SETTING_802_1X_CK_SCHEME_PATH</code></a> scheme.</p> <p>If <em class="parameter"><code>password</code></em> is given, this function attempts to decrypt the private key to verify that <em class="parameter"><code>password</code></em> is correct, and if it is, updates the -<span class="type">“phase2-private-key-password”</span> property with the given +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"><span class="type">“phase2-private-key-password”</span></a> property with the given <em class="parameter"><code>password</code></em> . If the decryption is unsuccessful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned, <em class="parameter"><code>error</code></em> is @@ -3760,7 +3760,7 @@ nm_setting_802_1x_get_phase2_private_key_password <a name="nm-setting-802-1x-get-phase2-private-key-password.returns"></a><h4>Returns</h4> <p> the private key password used to decrypt the private key if previously set with <a class="link" href="NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key" title="nm_setting_802_1x_set_phase2_private_key ()"><code class="function">nm_setting_802_1x_set_phase2_private_key()</code></a> or the -<span class="type">“phase2-private-key-password”</span> property.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"><span class="type">“phase2-private-key-password”</span></a> property.</p> </div> </div> <hr> @@ -3787,7 +3787,7 @@ nm_setting_802_1x_get_phase2_private_key_password_flags <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-private-key-password-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“phase2-private-key-password”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password"><span class="type">“phase2-private-key-password”</span></a></p> </div> </div> <hr> @@ -3814,7 +3814,7 @@ nm_setting_802_1x_get_phase2_private_key_format <div class="refsect3"> <a name="nm-setting-802-1x-get-phase2-private-key-format.returns"></a><h4>Returns</h4> <p> the data format of the "phase 2" private key data stored in the -<span class="type">“phase2-private-key”</span> property</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key"><span class="type">“phase2-private-key”</span></a> property</p> </div> </div> <hr> @@ -4360,6 +4360,6 @@ type.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingAdsl.html b/docs/libnm/html/NMSettingAdsl.html index be71a24a..1aa75c7c 100644 --- a/docs/libnm/html/NMSettingAdsl.html +++ b/docs/libnm/html/NMSettingAdsl.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSetting8021x.html" title="NMSetting8021x"> <link rel="next" href="NMSettingBluetooth.html" title="NMSettingBluetooth"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -204,7 +204,7 @@ nm_setting_adsl_get_username (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-adsl-get-username.returns"></a><h4>Returns</h4> -<p> the <span class="type">“username”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--username"><span class="type">“username”</span></a> property of the setting</p> </div> </div> <hr> @@ -229,7 +229,7 @@ nm_setting_adsl_get_password (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-adsl-get-password.returns"></a><h4>Returns</h4> -<p> the <span class="type">“password”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--password"><span class="type">“password”</span></a> property of the setting</p> </div> </div> <hr> @@ -254,7 +254,7 @@ nm_setting_adsl_get_protocol (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-adsl-get-protocol.returns"></a><h4>Returns</h4> -<p> the <span class="type">“protocol”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--protocol"><span class="type">“protocol”</span></a> property of the setting</p> </div> </div> <hr> @@ -279,7 +279,7 @@ nm_setting_adsl_get_encapsulation (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-adsl-get-encapsulation.returns"></a><h4>Returns</h4> -<p> the <span class="type">“encapsulation”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--encapsulation"><span class="type">“encapsulation”</span></a> property of the setting</p> </div> </div> <hr> @@ -304,7 +304,7 @@ nm_setting_adsl_get_vpi (<em class="parameter"><code><a class="link" href="NMSet </div> <div class="refsect3"> <a name="nm-setting-adsl-get-vpi.returns"></a><h4>Returns</h4> -<p> the <span class="type">“vpi”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--vpi"><span class="type">“vpi”</span></a> property of the setting</p> </div> </div> <hr> @@ -329,7 +329,7 @@ nm_setting_adsl_get_vci (<em class="parameter"><code><a class="link" href="NMSet </div> <div class="refsect3"> <a name="nm-setting-adsl-get-vci.returns"></a><h4>Returns</h4> -<p> the <span class="type">“vci”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--vci"><span class="type">“vci”</span></a> property of the setting</p> </div> </div> <hr> @@ -354,7 +354,7 @@ nm_setting_adsl_get_password_flags (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-adsl-get-password-flags.returns"></a><h4>Returns</h4> -<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <span class="type">“password”</span></p> +<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--password"><span class="type">“password”</span></a></p> </div> </div> </div> @@ -440,6 +440,6 @@ nm_setting_adsl_get_password_flags (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingBluetooth.html b/docs/libnm/html/NMSettingBluetooth.html index dc649be1..389812b6 100644 --- a/docs/libnm/html/NMSettingBluetooth.html +++ b/docs/libnm/html/NMSettingBluetooth.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingAdsl.html" title="NMSettingAdsl"> <link rel="next" href="NMSettingBondPort.html" title="NMSettingBondPort"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -116,7 +116,7 @@ nm_setting_bluetooth_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-bluetooth-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth"><span class="type">NMSettingBluetooth</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -222,6 +222,6 @@ which accepts PANU clients.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingBond.html b/docs/libnm/html/NMSettingBond.html index 7c23901f..7f850594 100644 --- a/docs/libnm/html/NMSettingBond.html +++ b/docs/libnm/html/NMSettingBond.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingBondPort.html" title="NMSettingBondPort"> <link rel="next" href="NMSettingBridgePort.html" title="NMSettingBridgePort"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -264,7 +264,7 @@ nm_setting_bond_new (<em class="parameter"><code><span class="type">void</span>< <div class="refsect3"> <a name="nm-setting-bond-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="type">NMSettingBond</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -332,14 +332,14 @@ such as during option iteration.</p> <td class="parameter_name"><p>out_name</p></td> <td class="parameter_description"><p>on return, the name of the bonding option; this value is owned by the setting and should not be modified. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_value</p></td> <td class="parameter_description"><p>on return, the value of the name of the bonding option; this value is owned by the setting and should not be modified. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -543,7 +543,7 @@ nm_setting_bond_get_valid_options (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-setting-bond-get-valid-options.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of strings of valid bond options. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -577,7 +577,7 @@ nm_setting_bond_get_option_default (<em class="parameter"><code><a class="link" <div class="refsect3"> <a name="nm-setting-bond-get-option-default.returns"></a><h4>Returns</h4> <p> the value of the bond option if not overridden by an entry in -the <span class="type">“options”</span> property.</p> +the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBond.html#NMSettingBond--options"><span class="type">“options”</span></a> property.</p> </div> </div> <hr> @@ -801,6 +801,6 @@ to the connection.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingBondPort.html b/docs/libnm/html/NMSettingBondPort.html index e8f55039..323d19da 100644 --- a/docs/libnm/html/NMSettingBondPort.html +++ b/docs/libnm/html/NMSettingBondPort.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingBluetooth.html" title="NMSettingBluetooth"> <link rel="next" href="NMSettingBond.html" title="NMSettingBond"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -92,7 +92,7 @@ nm_setting_bond_port_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-bond-port-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingBondPort.html" title="NMSettingBondPort"><span class="type">NMSettingBondPort</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.34</p> </div> @@ -139,6 +139,6 @@ nm_setting_bond_port_get_queue_id (<em class="parameter"><code><a class="link" h </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingBridge.html b/docs/libnm/html/NMSettingBridge.html index 645a3387..3171089a 100644 --- a/docs/libnm/html/NMSettingBridge.html +++ b/docs/libnm/html/NMSettingBridge.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingBridgePort.html" title="NMSettingBridgePort"> <link rel="next" href="NMSettingCdma.html" title="NMSettingCdma"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -567,7 +567,7 @@ nm_setting_bridge_new (<em class="parameter"><code><span class="type">void</span <div class="refsect3"> <a name="nm-setting-bridge-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingBridge.html" title="NMSettingBridge"><span class="type">NMSettingBridge</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -592,7 +592,7 @@ nm_setting_bridge_get_mac_address (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-bridge-get-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--mac-address"><span class="type">“mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -617,7 +617,7 @@ nm_setting_bridge_get_stp (<em class="parameter"><code><a class="link" href="NMS </div> <div class="refsect3"> <a name="nm-setting-bridge-get-stp.returns"></a><h4>Returns</h4> -<p> the <span class="type">“stp”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--stp"><span class="type">“stp”</span></a> property of the setting</p> </div> </div> <hr> @@ -642,7 +642,7 @@ nm_setting_bridge_get_priority (<em class="parameter"><code><a class="link" href </div> <div class="refsect3"> <a name="nm-setting-bridge-get-priority.returns"></a><h4>Returns</h4> -<p> the <span class="type">“priority”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--priority"><span class="type">“priority”</span></a> property of the setting</p> </div> </div> <hr> @@ -667,7 +667,7 @@ nm_setting_bridge_get_forward_delay (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-bridge-get-forward-delay.returns"></a><h4>Returns</h4> -<p> the <span class="type">“forward-delay”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--forward-delay"><span class="type">“forward-delay”</span></a> property of the setting</p> </div> </div> <hr> @@ -692,7 +692,7 @@ nm_setting_bridge_get_hello_time (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-bridge-get-hello-time.returns"></a><h4>Returns</h4> -<p> the <span class="type">“hello-time”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--hello-time"><span class="type">“hello-time”</span></a> property of the setting</p> </div> </div> <hr> @@ -717,7 +717,7 @@ nm_setting_bridge_get_max_age (<em class="parameter"><code><a class="link" href= </div> <div class="refsect3"> <a name="nm-setting-bridge-get-max-age.returns"></a><h4>Returns</h4> -<p> the <span class="type">“max-age”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--max-age"><span class="type">“max-age”</span></a> property of the setting</p> </div> </div> <hr> @@ -742,7 +742,7 @@ nm_setting_bridge_get_ageing_time (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-bridge-get-ageing-time.returns"></a><h4>Returns</h4> -<p> the <span class="type">“ageing-time”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--ageing-time"><span class="type">“ageing-time”</span></a> property of the setting</p> </div> </div> <hr> @@ -942,7 +942,7 @@ nm_setting_bridge_get_vlan (<em class="parameter"><code><a class="link" href="NM <a name="nm-setting-bridge-get-vlan.returns"></a><h4>Returns</h4> <p>the VLAN at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -1086,7 +1086,7 @@ and 4094.</p></td> <div class="refsect3"> <a name="nm-bridge-vlan-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingBridge.html#NMBridgeVlan"><span class="type">NMBridgeVlan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -1167,7 +1167,7 @@ nm_bridge_vlan_new_clone (<em class="parameter"><code>const <a class="link" href <p>a clone of <em class="parameter"><code>vlan</code></em> . This instance is always unsealed. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -2081,6 +2081,6 @@ nm_setting_bridge_get_multicast_startup_query_interval </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingBridgePort.html b/docs/libnm/html/NMSettingBridgePort.html index 9a72cdb8..d6044d66 100644 --- a/docs/libnm/html/NMSettingBridgePort.html +++ b/docs/libnm/html/NMSettingBridgePort.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingBond.html" title="NMSettingBond"> <link rel="next" href="NMSettingBridge.html" title="NMSettingBridge"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -168,7 +168,7 @@ nm_setting_bridge_port_new (<em class="parameter"><code><span class="type">void< <div class="refsect3"> <a name="nm-setting-bridge-port-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="type">NMSettingBridgePort</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -193,7 +193,7 @@ nm_setting_bridge_port_get_priority (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-bridge-port-get-priority.returns"></a><h4>Returns</h4> -<p> the <span class="type">“priority”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--priority"><span class="type">“priority”</span></a> property of the setting</p> </div> </div> <hr> @@ -218,7 +218,7 @@ nm_setting_bridge_port_get_path_cost (<em class="parameter"><code><a class="link </div> <div class="refsect3"> <a name="nm-setting-bridge-port-get-path-cost.returns"></a><h4>Returns</h4> -<p> the <span class="type">“path-cost”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--path-cost"><span class="type">“path-cost”</span></a> property of the setting</p> </div> </div> <hr> @@ -244,7 +244,7 @@ nm_setting_bridge_port_get_hairpin_mode </div> <div class="refsect3"> <a name="nm-setting-bridge-port-get-hairpin-mode.returns"></a><h4>Returns</h4> -<p> the <span class="type">“hairpin-mode”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode"><span class="type">“hairpin-mode”</span></a> property of the setting</p> </div> </div> <hr> @@ -337,7 +337,7 @@ nm_setting_bridge_port_get_vlan (<em class="parameter"><code><a class="link" hre <a name="nm-setting-bridge-port-get-vlan.returns"></a><h4>Returns</h4> <p>the VLAN at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -480,6 +480,6 @@ nm_setting_bridge_port_clear_vlans (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingCdma.html b/docs/libnm/html/NMSettingCdma.html index f8f9df3e..e0e96e90 100644 --- a/docs/libnm/html/NMSettingCdma.html +++ b/docs/libnm/html/NMSettingCdma.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingBridge.html" title="NMSettingBridge"> <link rel="next" href="NMSettingDcb.html" title="NMSettingDcb"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -162,7 +162,7 @@ nm_setting_cdma_get_number (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-cdma-get-number.returns"></a><h4>Returns</h4> -<p> the <span class="type">“number”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--number"><span class="type">“number”</span></a> property of the setting</p> </div> </div> <hr> @@ -187,7 +187,7 @@ nm_setting_cdma_get_username (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-cdma-get-username.returns"></a><h4>Returns</h4> -<p> the <span class="type">“username”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--username"><span class="type">“username”</span></a> property of the setting</p> </div> </div> <hr> @@ -212,7 +212,7 @@ nm_setting_cdma_get_password (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-cdma-get-password.returns"></a><h4>Returns</h4> -<p> the <span class="type">“password”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--password"><span class="type">“password”</span></a> property of the setting</p> </div> </div> <hr> @@ -237,7 +237,7 @@ nm_setting_cdma_get_password_flags (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-cdma-get-password-flags.returns"></a><h4>Returns</h4> -<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <span class="type">“password”</span></p> +<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--password"><span class="type">“password”</span></a></p> </div> </div> <hr> @@ -307,6 +307,6 @@ nm_setting_cdma_get_mtu (<em class="parameter"><code><a class="link" href="NMSet </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingConnection.html b/docs/libnm/html/NMSettingConnection.html index 2908451c..d4cd96ce 100644 --- a/docs/libnm/html/NMSettingConnection.html +++ b/docs/libnm/html/NMSettingConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSetting.html" title="NMSetting"> <link rel="next" href="NMSetting6Lowpan.html" title="NMSetting6Lowpan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -514,7 +514,7 @@ nm_setting_connection_new (<em class="parameter"><code><span class="type">void</ <a name="nm-setting-connection-get-id"></a><h3>nm_setting_connection_get_id ()</h3> <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_id (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“id”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--id"><span class="type">“id”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-id.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -540,7 +540,7 @@ nm_setting_connection_get_id (<em class="parameter"><code><a class="link" href=" <a name="nm-setting-connection-get-uuid"></a><h3>nm_setting_connection_get_uuid ()</h3> <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_uuid (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“uuid”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--uuid"><span class="type">“uuid”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-uuid.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -594,7 +594,7 @@ nm_setting_connection_get_stable_id (<em class="parameter"><code><a class="link" <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_interface_name (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“interface-name”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--interface-name"><span class="type">“interface-name”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-interface-name.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -621,7 +621,7 @@ nm_setting_connection_get_interface_name <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_connection_type (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“type”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--type"><span class="type">“type”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-connection-type.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -647,7 +647,7 @@ nm_setting_connection_get_connection_type <a name="nm-setting-connection-get-autoconnect"></a><h3>nm_setting_connection_get_autoconnect ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_get_autoconnect (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“autoconnect”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--autoconnect"><span class="type">“autoconnect”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-autoconnect.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -757,7 +757,7 @@ nm_setting_connection_get_multi_connect <a name="nm-setting-connection-get-timestamp"></a><h3>nm_setting_connection_get_timestamp ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a> nm_setting_connection_get_timestamp (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“timestamp”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--timestamp"><span class="type">“timestamp”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-timestamp.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -783,7 +783,7 @@ nm_setting_connection_get_timestamp (<em class="parameter"><code><a class="link" <a name="nm-setting-connection-get-read-only"></a><h3>nm_setting_connection_get_read_only ()</h3> <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_setting_connection_get_read_only (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“read-only”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--read-only"><span class="type">“read-only”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-read-only.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -810,7 +810,7 @@ nm_setting_connection_get_read_only (<em class="parameter"><code><a class="link" <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a> nm_setting_connection_get_num_permissions (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the number of entries in the <span class="type">“permissions”</span> +<p>Returns the number of entries in the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions"><span class="type">“permissions”</span></a> property of this setting.</p> <div class="refsect3"> <a name="nm-setting-connection-get-num-permissions.parameters"></a><h4>Parameters</h4> @@ -841,7 +841,7 @@ nm_setting_connection_get_permission (<em class="parameter"><code><a class="link <em class="parameter"><code>const <span class="type">char</span> **out_ptype</code></em>, <em class="parameter"><code>const <span class="type">char</span> **out_pitem</code></em>, <em class="parameter"><code>const <span class="type">char</span> **out_detail</code></em>);</pre> -<p>Retrieve one of the entries of the <span class="type">“permissions”</span> property +<p>Retrieve one of the entries of the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions"><span class="type">“permissions”</span></a> property of this setting.</p> <div class="refsect3"> <a name="nm-setting-connection-get-permission.parameters"></a><h4>Parameters</h4> @@ -872,7 +872,7 @@ unless the entry is invalid, in which case it returns "invalid".</p></td> <td class="parameter_name"><p>out_pitem</p></td> <td class="parameter_description"><p>on return, the permission item (formatted according to <em class="parameter"><code>ptype</code></em> , see -<span class="type">“permissions”</span> for more detail</p></td> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions"><span class="type">“permissions”</span></a> for more detail</p></td> <td class="parameter_annotations"> </td> </tr> <tr> @@ -894,7 +894,7 @@ was invalid</p> <a name="nm-setting-connection-get-zone"></a><h3>nm_setting_connection_get_zone ()</h3> <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_zone (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“zone”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--zone"><span class="type">“zone”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-zone.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -962,7 +962,7 @@ nm_setting_connection_add_permission (<em class="parameter"><code><a class="link <p>Adds a permission to the connection's permission list. At this time, only the "user" permission type is supported, and <em class="parameter"><code>pitem</code></em> must be a username. See -<span class="type">“permissions”</span>: for more details.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions"><span class="type">“permissions”</span></a>: for more details.</p> <div class="refsect3"> <a name="nm-setting-connection-add-permission.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1051,7 +1051,7 @@ nm_setting_connection_remove_permission_by_value <p>Removes the permission from the connection. At this time, only the "user" permission type is supported, and <em class="parameter"><code>pitem</code></em> must -be a username. See <span class="type">“permissions”</span>: for more details.</p> +be a username. See <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions"><span class="type">“permissions”</span></a>: for more details.</p> <div class="refsect3"> <a name="nm-setting-connection-remove-permission-by-value.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1095,7 +1095,7 @@ be a username. See <span class="type">“permissions”</span>: for more details <a name="nm-setting-connection-get-master"></a><h3>nm_setting_connection_get_master ()</h3> <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_master (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“master”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--master"><span class="type">“master”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-master.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1158,7 +1158,7 @@ against <em class="parameter"><code>setting</code></em> <a name="nm-setting-connection-get-slave-type"></a><h3>nm_setting_connection_get_slave_type ()</h3> <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_connection_get_slave_type (<em class="parameter"><code><a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> *setting</code></em>);</pre> -<p>Returns the <span class="type">“slave-type”</span> property of the connection.</p> +<p>Returns the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--slave-type"><span class="type">“slave-type”</span></a> property of the connection.</p> <div class="refsect3"> <a name="nm-setting-connection-get-slave-type.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1398,7 +1398,7 @@ nm_setting_connection_get_gateway_ping_timeout </div> <div class="refsect3"> <a name="nm-setting-connection-get-gateway-ping-timeout.returns"></a><h4>Returns</h4> -<p> the value contained in the <span class="type">“gateway-ping-timeout”</span> +<p> the value contained in the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout"><span class="type">“gateway-ping-timeout”</span></a> property.</p> </div> </div> @@ -2018,6 +2018,6 @@ master is activated</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingDcb.html b/docs/libnm/html/NMSettingDcb.html index e23ecdb6..853854df 100644 --- a/docs/libnm/html/NMSettingDcb.html +++ b/docs/libnm/html/NMSettingDcb.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingCdma.html" title="NMSettingCdma"> <link rel="next" href="NMSettingDummy.html" title="NMSettingDummy"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -329,7 +329,7 @@ nm_setting_dcb_new (<em class="parameter"><code><span class="type">void</span></ <div class="refsect3"> <a name="nm-setting-dcb-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -354,7 +354,7 @@ nm_setting_dcb_get_app_fcoe_flags (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-fcoe-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-fcoe-flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-flags"><span class="type">“app-fcoe-flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -379,7 +379,7 @@ nm_setting_dcb_get_app_fcoe_priority (<em class="parameter"><code><a class="link </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-fcoe-priority.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-fcoe-priority”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-priority"><span class="type">“app-fcoe-priority”</span></a> property of the setting</p> </div> </div> <hr> @@ -404,7 +404,7 @@ nm_setting_dcb_get_app_fcoe_mode (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-fcoe-mode.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-fcoe-mode”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-mode"><span class="type">“app-fcoe-mode”</span></a> property of the setting</p> </div> </div> <hr> @@ -429,7 +429,7 @@ nm_setting_dcb_get_app_iscsi_flags (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-iscsi-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-iscsi-flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-flags"><span class="type">“app-iscsi-flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -454,7 +454,7 @@ nm_setting_dcb_get_app_iscsi_priority (<em class="parameter"><code><a class="lin </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-iscsi-priority.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-iscsi-priority”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-priority"><span class="type">“app-iscsi-priority”</span></a> property of the setting</p> </div> </div> <hr> @@ -479,7 +479,7 @@ nm_setting_dcb_get_app_fip_flags (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-fip-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-fip-flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-flags"><span class="type">“app-fip-flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -504,7 +504,7 @@ nm_setting_dcb_get_app_fip_priority (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-dcb-get-app-fip-priority.returns"></a><h4>Returns</h4> -<p> the <span class="type">“app-fip-priority”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-priority"><span class="type">“app-fip-priority”</span></a> property of the setting</p> </div> </div> <hr> @@ -530,7 +530,7 @@ nm_setting_dcb_get_priority_flow_control_flags </div> <div class="refsect3"> <a name="nm-setting-dcb-get-priority-flow-control-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“priority-flow-control-flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags"><span class="type">“priority-flow-control-flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -577,7 +577,7 @@ nm_setting_dcb_set_priority_flow_control (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre> -<p>These values are only valid when <span class="type">“priority-flow-control”</span> includes +<p>These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control"><span class="type">“priority-flow-control”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> <div class="refsect3"> <a name="nm-setting-dcb-set-priority-flow-control.parameters"></a><h4>Parameters</h4> @@ -630,7 +630,7 @@ nm_setting_dcb_get_priority_group_flags </div> <div class="refsect3"> <a name="nm-setting-dcb-get-priority-group-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“priority-group-flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -665,7 +665,7 @@ nm_setting_dcb_get_priority_group_id (<em class="parameter"><code><a class="link <a name="nm-setting-dcb-get-priority-group-id.returns"></a><h4>Returns</h4> <p> the group number <em class="parameter"><code>user_priority</code></em> is assigned to. These values are -only valid when <span class="type">“priority-group-flags”</span> includes the +only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> </div> </div> @@ -676,7 +676,7 @@ only valid when <span class="type">“priority-group-flags”</span> includes th nm_setting_dcb_set_priority_group_id (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>);</pre> -<p>These values are only valid when <span class="type">“priority-group-flags”</span> includes +<p>These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> <div class="refsect3"> <a name="nm-setting-dcb-set-priority-group-id.parameters"></a><h4>Parameters</h4> @@ -741,7 +741,7 @@ nm_setting_dcb_get_priority_group_bandwidth <a name="nm-setting-dcb-get-priority-group-bandwidth.returns"></a><h4>Returns</h4> <p> the bandwidth percentage assigned to <em class="parameter"><code>group_id</code></em> . These values are -only valid when <span class="type">“priority-group-flags”</span> includes the +only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> </div> </div> @@ -753,7 +753,7 @@ nm_setting_dcb_set_priority_group_bandwidth (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> group_id</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);</pre> -<p>These values are only valid when <span class="type">“priority-group-flags”</span> includes +<p>These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> <div class="refsect3"> <a name="nm-setting-dcb-set-priority-group-bandwidth.parameters"></a><h4>Parameters</h4> @@ -816,7 +816,7 @@ nm_setting_dcb_get_priority_bandwidth (<em class="parameter"><code><a class="lin <a name="nm-setting-dcb-get-priority-bandwidth.returns"></a><h4>Returns</h4> <p> the allowed bandwidth percentage of <em class="parameter"><code>user_priority</code></em> in its priority group. -These values are only valid when <span class="type">“priority-group-flags”</span> includes the +These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> </div> </div> @@ -827,7 +827,7 @@ These values are only valid when <span class="type">“priority-group-flags”</ nm_setting_dcb_set_priority_bandwidth (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth_percent</code></em>);</pre> -<p>These values are only valid when <span class="type">“priority-group-flags”</span> includes +<p>These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> <div class="refsect3"> <a name="nm-setting-dcb-set-priority-bandwidth.parameters"></a><h4>Parameters</h4> @@ -893,7 +893,7 @@ nm_setting_dcb_get_priority_strict_bandwidth <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>user_priority</code></em> may use all of the bandwidth allocated to its assigned group, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not. These values are only valid when -<span class="type">“priority-group-flags”</span> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> </div> </div> <hr> @@ -904,7 +904,7 @@ nm_setting_dcb_set_priority_strict_bandwidth (<em class="parameter"><code><a class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="type">NMSettingDcb</span></a> *setting</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> user_priority</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> strict</code></em>);</pre> -<p>These values are only valid when <span class="type">“priority-group-flags”</span> includes +<p>These values are only valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> <div class="refsect3"> <a name="nm-setting-dcb-set-priority-strict-bandwidth.parameters"></a><h4>Parameters</h4> @@ -969,7 +969,7 @@ nm_setting_dcb_get_priority_traffic_class <a name="nm-setting-dcb-get-priority-traffic-class.returns"></a><h4>Returns</h4> <p> the traffic class assigned to <em class="parameter"><code>user_priority</code></em> . These values are only -valid when <span class="type">“priority-group-flags”</span> includes the +valid when <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags"><span class="type">“priority-group-flags”</span></a> includes the <a class="link" href="NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS"><code class="literal">NM_SETTING_DCB_FLAG_ENABLE</code></a> flag.</p> </div> </div> @@ -1143,6 +1143,6 @@ peer configuration advertisements</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingDummy.html b/docs/libnm/html/NMSettingDummy.html index 40233dfb..fe0d590f 100644 --- a/docs/libnm/html/NMSettingDummy.html +++ b/docs/libnm/html/NMSettingDummy.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingDcb.html" title="NMSettingDcb"> <link rel="next" href="NMSettingEthtool.html" title="NMSettingEthtool"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -76,7 +76,7 @@ nm_setting_dummy_new (<em class="parameter"><code><span class="type">void</span> <div class="refsect3"> <a name="nm-setting-dummy-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingDummy.html" title="NMSettingDummy"><span class="type">NMSettingDummy</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.8</p> </div> @@ -91,6 +91,6 @@ nm_setting_dummy_new (<em class="parameter"><code><span class="type">void</span> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingEthtool.html b/docs/libnm/html/NMSettingEthtool.html index 05cbfff1..48f950c5 100644 --- a/docs/libnm/html/NMSettingEthtool.html +++ b/docs/libnm/html/NMSettingEthtool.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingDummy.html" title="NMSettingDummy"> <link rel="next" href="NMSettingGeneric.html" title="NMSettingGeneric"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -245,7 +245,7 @@ nm_setting_ethtool_new (<em class="parameter"><code><span class="type">void</spa <div class="refsect3"> <a name="nm-setting-ethtool-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingEthtool.html" title="NMSettingEthtool"><span class="type">NMSettingEthtool</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -291,7 +291,7 @@ names or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros <em class="parameter"><code>setting</code></em> and may get invalidated when <em class="parameter"><code>setting</code></em> gets modified. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.20</p> </div> @@ -422,6 +422,6 @@ nm_setting_ethtool_clear_features (<em class="parameter"><code><a class="link" h </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingGeneric.html b/docs/libnm/html/NMSettingGeneric.html index e11413df..2a3b9d16 100644 --- a/docs/libnm/html/NMSettingGeneric.html +++ b/docs/libnm/html/NMSettingGeneric.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingEthtool.html" title="NMSettingEthtool"> <link rel="next" href="NMSettingGsm.html" title="NMSettingGsm"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -67,7 +67,7 @@ optional properties that apply to "generic" devices (ie, devices that NetworkManager does not specifically recognize).</p> <p>There are currently no properties on this object; it exists only to be -the "connection type" setting on <span class="type">NMConnections</span> for generic devices.</p> +the "connection type" setting on <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> for generic devices.</p> </div> <div class="refsect1"> <a name="NMSettingGeneric.functions_details"></a><h2>Functions</h2> @@ -79,7 +79,7 @@ nm_setting_generic_new (<em class="parameter"><code><span class="type">void</spa <div class="refsect3"> <a name="nm-setting-generic-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="type">NMSettingGeneric</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> </div> @@ -93,6 +93,6 @@ nm_setting_generic_new (<em class="parameter"><code><span class="type">void</spa </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingGsm.html b/docs/libnm/html/NMSettingGsm.html index 07b24783..35c275cd 100644 --- a/docs/libnm/html/NMSettingGsm.html +++ b/docs/libnm/html/NMSettingGsm.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingGeneric.html" title="NMSettingGeneric"> <link rel="next" href="NMSettingHostname.html" title="NMSettingHostname"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -290,7 +290,7 @@ nm_setting_gsm_get_username (<em class="parameter"><code><a class="link" href="N </div> <div class="refsect3"> <a name="nm-setting-gsm-get-username.returns"></a><h4>Returns</h4> -<p> the <span class="type">“username”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--username"><span class="type">“username”</span></a> property of the setting</p> </div> </div> <hr> @@ -315,7 +315,7 @@ nm_setting_gsm_get_password (<em class="parameter"><code><a class="link" href="N </div> <div class="refsect3"> <a name="nm-setting-gsm-get-password.returns"></a><h4>Returns</h4> -<p> the <span class="type">“password”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--password"><span class="type">“password”</span></a> property of the setting</p> </div> </div> <hr> @@ -340,7 +340,7 @@ nm_setting_gsm_get_apn (<em class="parameter"><code><a class="link" href="NMSett </div> <div class="refsect3"> <a name="nm-setting-gsm-get-apn.returns"></a><h4>Returns</h4> -<p> the <span class="type">“apn”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--apn"><span class="type">“apn”</span></a> property of the setting</p> </div> </div> <hr> @@ -365,7 +365,7 @@ nm_setting_gsm_get_network_id (<em class="parameter"><code><a class="link" href= </div> <div class="refsect3"> <a name="nm-setting-gsm-get-network-id.returns"></a><h4>Returns</h4> -<p> the <span class="type">“network-id”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--network-id"><span class="type">“network-id”</span></a> property of the setting</p> </div> </div> <hr> @@ -390,7 +390,7 @@ nm_setting_gsm_get_pin (<em class="parameter"><code><a class="link" href="NMSett </div> <div class="refsect3"> <a name="nm-setting-gsm-get-pin.returns"></a><h4>Returns</h4> -<p> the <span class="type">“pin”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--pin"><span class="type">“pin”</span></a> property of the setting</p> </div> </div> <hr> @@ -415,7 +415,7 @@ nm_setting_gsm_get_home_only (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-gsm-get-home-only.returns"></a><h4>Returns</h4> -<p> the <span class="type">“home-only”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--home-only"><span class="type">“home-only”</span></a> property of the setting</p> </div> </div> <hr> @@ -548,7 +548,7 @@ nm_setting_gsm_get_number (<em class="parameter"><code><a class="link" href="NMS </div> <div class="refsect3"> <a name="nm-setting-gsm-get-number.returns"></a><h4>Returns</h4> -<p> the <span class="type">“number”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--number"><span class="type">“number”</span></a> property of the setting</p> </div> </div> <hr> @@ -573,7 +573,7 @@ nm_setting_gsm_get_pin_flags (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-gsm-get-pin-flags.returns"></a><h4>Returns</h4> -<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <span class="type">“pin”</span></p> +<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--pin"><span class="type">“pin”</span></a></p> </div> </div> <hr> @@ -598,7 +598,7 @@ nm_setting_gsm_get_password_flags (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-gsm-get-password-flags.returns"></a><h4>Returns</h4> -<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <span class="type">“password”</span></p> +<p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--password"><span class="type">“password”</span></a></p> </div> </div> </div> @@ -696,6 +696,6 @@ nm_setting_gsm_get_password_flags (<em class="parameter"><code><a class="link" h </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingHostname.html b/docs/libnm/html/NMSettingHostname.html index 9a660e96..5ad796ae 100644 --- a/docs/libnm/html/NMSettingHostname.html +++ b/docs/libnm/html/NMSettingHostname.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingGsm.html" title="NMSettingGsm"> <link rel="next" href="NMSettingInfiniband.html" title="NMSettingInfiniband"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -131,7 +131,7 @@ nm_setting_hostname_new (<em class="parameter"><code><span class="type">void</sp <div class="refsect3"> <a name="nm-setting-hostname-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingHostname.html" title="NMSettingHostname"><span class="type">NMSettingHostname</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -284,6 +284,6 @@ property.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingIP4Config.html b/docs/libnm/html/NMSettingIP4Config.html index cfa184e9..5af35d24 100644 --- a/docs/libnm/html/NMSettingIP4Config.html +++ b/docs/libnm/html/NMSettingIP4Config.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingIPTunnel.html" title="NMSettingIPTunnel"> <link rel="next" href="NMSettingIP6Config.html" title="NMSettingIP6Config"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -147,7 +147,7 @@ nm_setting_ip4_config_new (<em class="parameter"><code><span class="type">void</ <div class="refsect3"> <a name="nm-setting-ip4-config-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -156,7 +156,7 @@ nm_setting_ip4_config_new (<em class="parameter"><code><span class="type">void</ <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip4_config_get_dhcp_client_id (<em class="parameter"><code><a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> *setting</code></em>);</pre> -<p>Returns the value contained in the <span class="type">“dhcp-client-id”</span> +<p>Returns the value contained in the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id"><span class="type">“dhcp-client-id”</span></a> property.</p> <div class="refsect3"> <a name="nm-setting-ip4-config-get-dhcp-client-id.parameters"></a><h4>Parameters</h4> @@ -309,6 +309,6 @@ through that interface to the default network.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingIP6Config.html b/docs/libnm/html/NMSettingIP6Config.html index e6283e4a..474684ba 100644 --- a/docs/libnm/html/NMSettingIP6Config.html +++ b/docs/libnm/html/NMSettingIP6Config.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingIP4Config.html" title="NMSettingIP4Config"> <link rel="next" href="NMSettingMacsec.html" title="NMSettingMacsec"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -195,7 +195,7 @@ nm_setting_ip6_config_new (<em class="parameter"><code><span class="type">void</ <div class="refsect3"> <a name="nm-setting-ip6-config-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -203,7 +203,7 @@ nm_setting_ip6_config_new (<em class="parameter"><code><span class="type">void</ <a name="nm-setting-ip6-config-get-ip6-privacy"></a><h3>nm_setting_ip6_config_get_ip6_privacy ()</h3> <pre class="programlisting"><a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy" title="enum NMSettingIP6ConfigPrivacy"><span class="returnvalue">NMSettingIP6ConfigPrivacy</span></a> nm_setting_ip6_config_get_ip6_privacy (<em class="parameter"><code><a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> *setting</code></em>);</pre> -<p>Returns the value contained in the <span class="type">“ip6-privacy”</span> +<p>Returns the value contained in the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy"><span class="type">“ip6-privacy”</span></a> property.</p> <div class="refsect3"> <a name="nm-setting-ip6-config-get-ip6-privacy.parameters"></a><h4>Parameters</h4> @@ -526,6 +526,6 @@ specified by RFC7217.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingIPConfig.html b/docs/libnm/html/NMSettingIPConfig.html index 6981e33d..02861e14 100644 --- a/docs/libnm/html/NMSettingIPConfig.html +++ b/docs/libnm/html/NMSettingIPConfig.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingInfiniband.html" title="NMSettingInfiniband"> <link rel="next" href="NMSettingIPTunnel.html" title="NMSettingIPTunnel"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -1508,7 +1508,7 @@ nm_ip_address_new (<em class="parameter"><code><span class="type">int</span> fam <div class="refsect3"> <a name="nm-ip-address-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1559,7 +1559,7 @@ correct size for <em class="parameter"><code>family</code></em> <div class="refsect3"> <a name="nm-ip-address-new-binary.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1718,7 +1718,7 @@ nm_ip_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIP <p>This API was part of public headers before 1.32.0 but was erroneously not exported in the ABI. It is thus only usable since 1.32.0. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.32</p> </div> @@ -1959,7 +1959,7 @@ nm_ip_address_get_attribute_names (<em class="parameter"><code><a class="link" h <div class="refsect3"> <a name="nm-ip-address-get-attribute-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names,. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2000,7 +2000,7 @@ on <em class="parameter"><code>address</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>address</code></em> has no such attribute. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2034,7 +2034,7 @@ nm_ip_address_set_attribute (<em class="parameter"><code><a class="link" href="N <tr> <td class="parameter_name"><p>value</p></td> <td class="parameter_description"><p>the value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -2097,7 +2097,7 @@ nm_ip_route_new (<em class="parameter"><code><span class="type">int</span> famil <div class="refsect3"> <a name="nm-ip-route-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2161,7 +2161,7 @@ point to buffers of the correct size for <em class="parameter"><code>family</cod <div class="refsect3"> <a name="nm-ip-route-new-binary.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2319,7 +2319,7 @@ nm_ip_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIPCo <p>This API was part of public headers before 1.32.0 but was erroneously not exported in the ABI. It is thus only usable since 1.32.0. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.32</p> </div> @@ -2755,7 +2755,7 @@ nm_ip_route_get_attribute_names (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-ip-route-get-attribute-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2796,7 +2796,7 @@ on <em class="parameter"><code>route</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>route</code></em> has no such attribute. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2830,7 +2830,7 @@ nm_ip_route_set_attribute (<em class="parameter"><code><a class="link" href="NMS <tr> <td class="parameter_name"><p>value</p></td> <td class="parameter_description"><p>the value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -2927,7 +2927,7 @@ nm_ip_routing_rule_new (<em class="parameter"><code><span class="type">int</span <a name="nm-ip-routing-rule-new.returns"></a><h4>Returns</h4> <p>a newly created rule instance with the provided address family. The instance is unsealed. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -2957,7 +2957,7 @@ nm_ip_routing_rule_new_clone (<em class="parameter"><code>const <a class="link" the same settings as <em class="parameter"><code>rule</code></em> . Note that the instance will always be unsealred. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -2988,7 +2988,7 @@ This is not thread-safe.</p> <p>the <em class="parameter"><code>self</code></em> argument with incremented reference count. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -3644,7 +3644,7 @@ nm_ip_routing_rule_get_from (<em class="parameter"><code>const <a class="link" h <a name="nm-ip-routing-rule-get-from.returns"></a><h4>Returns</h4> <p>the set from/src parameter or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, if no value is set. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -3737,7 +3737,7 @@ nm_ip_routing_rule_get_to (<em class="parameter"><code>const <a class="link" hre <a name="nm-ip-routing-rule-get-to.returns"></a><h4>Returns</h4> <p>the set to/dst parameter or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, if no value is set. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -3805,7 +3805,7 @@ nm_ip_routing_rule_get_iifname (<em class="parameter"><code>const <a class="link <div class="refsect3"> <a name="nm-ip-routing-rule-get-iifname.returns"></a><h4>Returns</h4> <p>the set iifname or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unset. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -3866,7 +3866,7 @@ nm_ip_routing_rule_get_oifname (<em class="parameter"><code>const <a class="link <div class="refsect3"> <a name="nm-ip-routing-rule-get-oifname.returns"></a><h4>Returns</h4> <p>the set oifname or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unset. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -4271,7 +4271,7 @@ conversion. Currently, not extra arguments are supported. </p></td> <div class="refsect3"> <a name="nm-ip-routing-rule-from-string.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingIPConfig.html#NMIPRoutingRule"><span class="type">NMIPRoutingRule</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -4320,7 +4320,7 @@ conversion. Currently, not extra arguments are supported. </p></td> <div class="refsect3"> <a name="nm-ip-routing-rule-to-string.returns"></a><h4>Returns</h4> <p>the string representation or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -5034,7 +5034,7 @@ nm_setting_ip_config_get_address (<em class="parameter"><code><a class="link" hr <a name="nm-setting-ip-config-get-address.returns"></a><h4>Returns</h4> <p>the address at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -5245,7 +5245,7 @@ nm_setting_ip_config_get_route (<em class="parameter"><code><a class="link" href <a name="nm-setting-ip-config-get-route.returns"></a><h4>Returns</h4> <p>the route at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -5495,7 +5495,7 @@ nm_setting_ip_config_get_routing_rule (<em class="parameter"><code><a class="lin <a name="nm-setting-ip-config-get-routing-rule.returns"></a><h4>Returns</h4> <p>the routing rule at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -5938,7 +5938,7 @@ nm_setting_ip_config_get_dhcp_reject_servers <a name="nm-setting-ip-config-get-dhcp-reject-servers.returns"></a><h4>Returns</h4> <p>A <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of DHCP reject servers. Even if no reject servers are configured, this always returns a non <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> value. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len zero-terminated=1][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len zero-terminated=1][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.28</p> </div> @@ -6551,6 +6551,6 @@ incompatible with any other FQDN flag.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingIPTunnel.html b/docs/libnm/html/NMSettingIPTunnel.html index b86c8cf5..88bc354e 100644 --- a/docs/libnm/html/NMSettingIPTunnel.html +++ b/docs/libnm/html/NMSettingIPTunnel.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingIPConfig.html" title="NMSettingIPConfig"> <link rel="next" href="NMSettingIP4Config.html" title="NMSettingIP4Config"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -240,7 +240,7 @@ nm_setting_ip_tunnel_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-ip-tunnel-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingIPTunnel.html" title="NMSettingIPTunnel"><span class="type">NMSettingIPTunnel</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -716,6 +716,6 @@ nm_setting_ip_tunnel_get_flags (<em class="parameter"><code><a class="link" href </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingInfiniband.html b/docs/libnm/html/NMSettingInfiniband.html index 8b981899..c4c2ef31 100644 --- a/docs/libnm/html/NMSettingInfiniband.html +++ b/docs/libnm/html/NMSettingInfiniband.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingHostname.html" title="NMSettingHostname"> <link rel="next" href="NMSettingIPConfig.html" title="NMSettingIPConfig"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -144,7 +144,7 @@ nm_setting_infiniband_new (<em class="parameter"><code><span class="type">void</ <div class="refsect3"> <a name="nm-setting-infiniband-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -169,7 +169,7 @@ nm_setting_infiniband_get_mac_address (<em class="parameter"><code><a class="lin </div> <div class="refsect3"> <a name="nm-setting-infiniband-get-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mac-address"><span class="type">“mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -194,7 +194,7 @@ nm_setting_infiniband_get_mtu (<em class="parameter"><code><a class="link" href= </div> <div class="refsect3"> <a name="nm-setting-infiniband-get-mtu.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mtu”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mtu"><span class="type">“mtu”</span></a> property of the setting</p> </div> </div> <hr> @@ -285,8 +285,8 @@ nm_setting_infiniband_get_parent (<em class="parameter"><code><a class="link" hr <pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_infiniband_get_virtual_interface_name (<em class="parameter"><code><a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="type">NMSettingInfiniband</span></a> *setting</code></em>);</pre> -<p>Returns the interface name created by combining <span class="type">“parent”</span> -and <span class="type">“p-key”</span>. (If either property is unset, this will +<p>Returns the interface name created by combining <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--parent"><span class="type">“parent”</span></a> +and <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--p-key"><span class="type">“p-key”</span></a>. (If either property is unset, this will return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.)</p> <div class="refsect3"> <a name="nm-setting-infiniband-get-virtual-interface-name.parameters"></a><h4>Parameters</h4> @@ -349,6 +349,6 @@ return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.h </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingMacsec.html b/docs/libnm/html/NMSettingMacsec.html index 511276b4..3492a89a 100644 --- a/docs/libnm/html/NMSettingMacsec.html +++ b/docs/libnm/html/NMSettingMacsec.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingIP6Config.html" title="NMSettingIP6Config"> <link rel="next" href="NMSettingMacvlan.html" title="NMSettingMacvlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -209,7 +209,7 @@ nm_setting_macsec_new (<em class="parameter"><code><span class="type">void</span <div class="refsect3"> <a name="nm-setting-macsec-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingMacsec.html" title="NMSettingMacsec"><span class="type">NMSettingMacsec</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.6</p> </div> @@ -599,6 +599,6 @@ verify frames are dropped</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingMacvlan.html b/docs/libnm/html/NMSettingMacvlan.html index 393773f7..2b084c14 100644 --- a/docs/libnm/html/NMSettingMacvlan.html +++ b/docs/libnm/html/NMSettingMacvlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingMacsec.html" title="NMSettingMacsec"> <link rel="next" href="NMSettingMatch.html" title="NMSettingMatch"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -138,7 +138,7 @@ nm_setting_macvlan_new (<em class="parameter"><code><span class="type">void</spa <div class="refsect3"> <a name="nm-setting-macvlan-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingMacvlan.html" title="NMSettingMacvlan"><span class="type">NMSettingMacvlan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -349,6 +349,6 @@ nm_setting_macvlan_get_tap (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingMatch.html b/docs/libnm/html/NMSettingMatch.html index 8a6e33a2..188bd2c3 100644 --- a/docs/libnm/html/NMSettingMatch.html +++ b/docs/libnm/html/NMSettingMatch.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingMacvlan.html" title="NMSettingMacvlan"> <link rel="next" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -319,7 +319,7 @@ nm_setting_match_new (<em class="parameter"><code><span class="type">void</span> But due to a bug the symbol is only exposed and usable since version 1.32. As workaround, use g_object_new(NM_TYPE_SETTING_MATCH) which works with all versions since 1.14. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.32</p> </div> @@ -544,7 +544,7 @@ nm_setting_match_get_interface_names (<em class="parameter"><code><a class="link <p>the NULL terminated list of configured interface names.</p> <p>Before 1.26, the returned array was not <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated and you MUST provide a length. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -770,7 +770,7 @@ nm_setting_match_get_kernel_command_lines <div class="refsect3"> <a name="nm-setting-match-get-kernel-command-lines.returns"></a><h4>Returns</h4> <p>the configured interface names. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.26</p> </div> @@ -990,7 +990,7 @@ nm_setting_match_get_drivers (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-setting-match-get-drivers.returns"></a><h4>Returns</h4> <p>the configured drivers. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.26</p> </div> @@ -1209,7 +1209,7 @@ nm_setting_match_get_paths (<em class="parameter"><code><a class="link" href="NM <div class="refsect3"> <a name="nm-setting-match-get-paths.returns"></a><h4>Returns</h4> <p>the configured paths. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.26</p> </div> @@ -1248,6 +1248,6 @@ nm_setting_match_get_paths (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOlpcMesh.html b/docs/libnm/html/NMSettingOlpcMesh.html index 42365d0f..c20ae085 100644 --- a/docs/libnm/html/NMSettingOlpcMesh.html +++ b/docs/libnm/html/NMSettingOlpcMesh.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingMatch.html" title="NMSettingMatch"> <link rel="next" href="NMSettingOvsBridge.html" title="NMSettingOvsBridge"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -140,7 +140,7 @@ nm_setting_olpc_mesh_get_ssid (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-setting-olpc-mesh-get-ssid.returns"></a><h4>Returns</h4> <p>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -185,6 +185,6 @@ nm_setting_olpc_mesh_get_dhcp_anycast_address </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsBridge.html b/docs/libnm/html/NMSettingOvsBridge.html index f4a853c8..9d0a6da9 100644 --- a/docs/libnm/html/NMSettingOvsBridge.html +++ b/docs/libnm/html/NMSettingOvsBridge.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"> <link rel="next" href="NMSettingOvsDpdk.html" title="NMSettingOvsDpdk"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -138,7 +138,7 @@ nm_setting_ovs_bridge_new (<em class="parameter"><code><span class="type">void</ <div class="refsect3"> <a name="nm-setting-ovs-bridge-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsBridge.html" title="NMSettingOvsBridge"><span class="type">NMSettingOvsBridge</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -315,6 +315,6 @@ nm_setting_ovs_bridge_get_datapath_type </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsDpdk.html b/docs/libnm/html/NMSettingOvsDpdk.html index 487fcb32..1b138618 100644 --- a/docs/libnm/html/NMSettingOvsDpdk.html +++ b/docs/libnm/html/NMSettingOvsDpdk.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsBridge.html" title="NMSettingOvsBridge"> <link rel="next" href="NMSettingOvsExternalIDs.html" title="NMSettingOvsExternalIDs"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -103,7 +103,7 @@ nm_setting_ovs_dpdk_new (<em class="parameter"><code><span class="type">void</sp <div class="refsect3"> <a name="nm-setting-ovs-dpdk-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsDpdk.html" title="NMSettingOvsDpdk"><span class="type">NMSettingOvsDpdk</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.20</p> </div> @@ -182,6 +182,6 @@ nm_setting_ovs_dpdk_get_n_rxq (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsExternalIDs.html b/docs/libnm/html/NMSettingOvsExternalIDs.html index 95ac7f5b..639dd644 100644 --- a/docs/libnm/html/NMSettingOvsExternalIDs.html +++ b/docs/libnm/html/NMSettingOvsExternalIDs.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsDpdk.html" title="NMSettingOvsDpdk"> <link rel="next" href="NMSettingOvsInterface.html" title="NMSettingOvsInterface"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -123,7 +123,7 @@ nm_setting_ovs_external_ids_new (<em class="parameter"><code><span class="type"> <a name="nm-setting-ovs-external-ids-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsExternalIDs.html" title="NMSettingOvsExternalIDs"><span class="type">NMSettingOvsExternalIDs</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingOvsExternalIDs]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingOvsExternalIDs]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -160,7 +160,7 @@ nm_setting_ovs_external_ids_get_data_keys <a name="nm-setting-ovs-external-ids-get-data-keys.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array containing each key from the table. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -196,7 +196,7 @@ nm_setting_ovs_external_ids_get_data (<em class="parameter"><code><a class="link <p>the value associated with <em class="parameter"><code>key</code></em> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no such value exists. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -331,6 +331,6 @@ is a valid user data value.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsInterface.html b/docs/libnm/html/NMSettingOvsInterface.html index 6d0dacda..acb3fff9 100644 --- a/docs/libnm/html/NMSettingOvsInterface.html +++ b/docs/libnm/html/NMSettingOvsInterface.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsExternalIDs.html" title="NMSettingOvsExternalIDs"> <link rel="next" href="NMSettingOvsPatch.html" title="NMSettingOvsPatch"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -91,7 +91,7 @@ nm_setting_ovs_interface_new (<em class="parameter"><code><span class="type">voi <div class="refsect3"> <a name="nm-setting-ovs-interface-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsInterface.html" title="NMSettingOvsInterface"><span class="type">NMSettingOvsInterface</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -139,6 +139,6 @@ nm_setting_ovs_interface_get_interface_type </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsPatch.html b/docs/libnm/html/NMSettingOvsPatch.html index 889191cd..41b4d578 100644 --- a/docs/libnm/html/NMSettingOvsPatch.html +++ b/docs/libnm/html/NMSettingOvsPatch.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsInterface.html" title="NMSettingOvsInterface"> <link rel="next" href="NMSettingOvsPort.html" title="NMSettingOvsPort"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -91,7 +91,7 @@ nm_setting_ovs_patch_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-ovs-patch-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsPatch.html" title="NMSettingOvsPatch"><span class="type">NMSettingOvsPatch</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -138,6 +138,6 @@ nm_setting_ovs_patch_get_peer (<em class="parameter"><code><a class="link" href= </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingOvsPort.html b/docs/libnm/html/NMSettingOvsPort.html index 18e19aac..d73d5b28 100644 --- a/docs/libnm/html/NMSettingOvsPort.html +++ b/docs/libnm/html/NMSettingOvsPort.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsPatch.html" title="NMSettingOvsPatch"> <link rel="next" href="NMSettingPpp.html" title="NMSettingPpp"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -149,7 +149,7 @@ nm_setting_ovs_port_new (<em class="parameter"><code><span class="type">void</sp <div class="refsect3"> <a name="nm-setting-ovs-port-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingOvsPort.html" title="NMSettingOvsPort"><span class="type">NMSettingOvsPort</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.10</p> </div> @@ -357,6 +357,6 @@ nm_setting_ovs_port_get_bond_downdelay </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingPpp.html b/docs/libnm/html/NMSettingPpp.html index 8874fe03..01e0b26e 100644 --- a/docs/libnm/html/NMSettingPpp.html +++ b/docs/libnm/html/NMSettingPpp.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingOvsPort.html" title="NMSettingOvsPort"> <link rel="next" href="NMSettingPppoe.html" title="NMSettingPppoe"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -298,7 +298,7 @@ nm_setting_ppp_new (<em class="parameter"><code><span class="type">void</span></ <div class="refsect3"> <a name="nm-setting-ppp-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingPpp.html" title="NMSettingPpp"><span class="type">NMSettingPpp</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -870,6 +870,6 @@ nm_setting_ppp_get_lcp_echo_interval (<em class="parameter"><code><a class="link </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingPppoe.html b/docs/libnm/html/NMSettingPppoe.html index a122631a..b4758f37 100644 --- a/docs/libnm/html/NMSettingPppoe.html +++ b/docs/libnm/html/NMSettingPppoe.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingPpp.html" title="NMSettingPpp"> <link rel="next" href="NMSettingProxy.html" title="NMSettingProxy"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -137,7 +137,7 @@ nm_setting_pppoe_new (<em class="parameter"><code><span class="type">void</span> <div class="refsect3"> <a name="nm-setting-pppoe-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe"><span class="type">NMSettingPppoe</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -307,6 +307,6 @@ nm_setting_pppoe_get_password_flags (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingProxy.html b/docs/libnm/html/NMSettingProxy.html index bba60204..5a3296fe 100644 --- a/docs/libnm/html/NMSettingProxy.html +++ b/docs/libnm/html/NMSettingProxy.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingPppoe.html" title="NMSettingPppoe"> <link rel="next" href="NMSettingSerial.html" title="NMSettingSerial"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -249,7 +249,7 @@ nm_setting_proxy_get_pac_script (<em class="parameter"><code><a class="link" hre </div> <div class="refsect3"> <a name="nm-setting-proxy-get-pac-script.returns"></a><h4>Returns</h4> -<p> the PAC script</p> +<p> the PAC script.</p> </div> <p class="since">Since: 1.6</p> </div> @@ -320,6 +320,6 @@ nm_setting_proxy_get_pac_script (<em class="parameter"><code><a class="link" hre </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingSerial.html b/docs/libnm/html/NMSettingSerial.html index 07f8d189..efed6596 100644 --- a/docs/libnm/html/NMSettingSerial.html +++ b/docs/libnm/html/NMSettingSerial.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingProxy.html" title="NMSettingProxy"> <link rel="next" href="NMSettingSriov.html" title="NMSettingSriov"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -153,7 +153,7 @@ nm_setting_serial_new (<em class="parameter"><code><span class="type">void</span <div class="refsect3"> <a name="nm-setting-serial-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="type">NMSettingSerial</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -178,7 +178,7 @@ nm_setting_serial_get_baud (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-serial-get-baud.returns"></a><h4>Returns</h4> -<p> the <span class="type">“baud”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--baud"><span class="type">“baud”</span></a> property of the setting</p> </div> </div> <hr> @@ -203,7 +203,7 @@ nm_setting_serial_get_bits (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-serial-get-bits.returns"></a><h4>Returns</h4> -<p> the <span class="type">“bits”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--bits"><span class="type">“bits”</span></a> property of the setting</p> </div> </div> <hr> @@ -228,7 +228,7 @@ nm_setting_serial_get_parity (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-serial-get-parity.returns"></a><h4>Returns</h4> -<p> the <span class="type">“parity”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--parity"><span class="type">“parity”</span></a> property of the setting</p> </div> </div> <hr> @@ -253,7 +253,7 @@ nm_setting_serial_get_stopbits (<em class="parameter"><code><a class="link" href </div> <div class="refsect3"> <a name="nm-setting-serial-get-stopbits.returns"></a><h4>Returns</h4> -<p> the <span class="type">“stopbits”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--stopbits"><span class="type">“stopbits”</span></a> property of the setting</p> </div> </div> <hr> @@ -278,7 +278,7 @@ nm_setting_serial_get_send_delay (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-serial-get-send-delay.returns"></a><h4>Returns</h4> -<p> the <span class="type">“send-delay”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--send-delay"><span class="type">“send-delay”</span></a> property of the setting</p> </div> </div> </div> @@ -360,6 +360,6 @@ nm_setting_serial_get_send_delay (<em class="parameter"><code><a class="link" hr </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingSriov.html b/docs/libnm/html/NMSettingSriov.html index 0b331f0a..a1b42911 100644 --- a/docs/libnm/html/NMSettingSriov.html +++ b/docs/libnm/html/NMSettingSriov.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingSerial.html" title="NMSettingSerial"> <link rel="next" href="NMSettingTCConfig.html" title="NMSettingTCConfig"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -326,7 +326,7 @@ nm_setting_sriov_new (<em class="parameter"><code><span class="type">void</span> <div class="refsect3"> <a name="nm-setting-sriov-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingSriov.html" title="NMSettingSriov"><span class="type">NMSettingSriov</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -416,7 +416,7 @@ nm_setting_sriov_get_vf (<em class="parameter"><code><a class="link" href="NMSet <a name="nm-setting-sriov-get-vf.returns"></a><h4>Returns</h4> <p>the VF at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -676,7 +676,7 @@ supports one VLAN per VF.</p> <div class="refsect3"> <a name="nm-sriov-vf-get-vlan-ids.returns"></a><h4>Returns</h4> <p>a list of VLAN ids configured on the VF. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -820,7 +820,7 @@ nm_sriov_vf_new (<em class="parameter"><code><a href="https://developer.gnome.or <div class="refsect3"> <a name="nm-sriov-vf-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingSriov.html#NMSriovVF"><span class="type">NMSriovVF</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -935,7 +935,7 @@ nm_sriov_vf_dup (<em class="parameter"><code>const <a class="link" href="NMSetti <a name="nm-sriov-vf-dup.returns"></a><h4>Returns</h4> <p>a copy of <em class="parameter"><code>vf</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -997,7 +997,7 @@ nm_sriov_vf_set_attribute (<em class="parameter"><code><a class="link" href="NMS <tr> <td class="parameter_name"><p>value</p></td> <td class="parameter_description"><p>the value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1029,7 +1029,7 @@ nm_sriov_vf_get_attribute_names (<em class="parameter"><code>const <a class="lin <div class="refsect3"> <a name="nm-sriov-vf-get-attribute-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names. </p> -<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -1071,7 +1071,7 @@ on <em class="parameter"><code>vf</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>vf</code></em> has no such attribute. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -1214,6 +1214,6 @@ the value is of the correct type and well-formed.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingTCConfig.html b/docs/libnm/html/NMSettingTCConfig.html index 5e82df0b..50bebca4 100644 --- a/docs/libnm/html/NMSettingTCConfig.html +++ b/docs/libnm/html/NMSettingTCConfig.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingSriov.html" title="NMSettingSriov"> <link rel="next" href="NMSettingTeamPort.html" title="NMSettingTeamPort"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -477,7 +477,7 @@ nm_tc_qdisc_new (<em class="parameter"><code>const <span class="type">char</span <div class="refsect3"> <a name="nm-tc-qdisc-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTCConfig.html#NMTCQdisc"><span class="type">NMTCQdisc</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -591,7 +591,7 @@ nm_tc_qdisc_dup (<em class="parameter"><code><a class="link" href="NMSettingTCCo <a name="nm-tc-qdisc-dup.returns"></a><h4>Returns</h4> <p>a copy of <em class="parameter"><code>qdisc</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -726,7 +726,7 @@ nm_tc_qdisc_get_attribute_names (<em class="parameter"><code><a class="link" hre <a name="nm-tc-qdisc-get-attribute-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no attributes are set. </p> -<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -768,7 +768,7 @@ on <em class="parameter"><code>qdisc</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>qdisc</code></em> has no such attribute. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.18</p> </div> @@ -803,7 +803,7 @@ nm_tc_qdisc_set_attribute (<em class="parameter"><code><a class="link" href="NMS <tr> <td class="parameter_name"><p>value</p></td> <td class="parameter_description"><p>the value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -842,7 +842,7 @@ nm_tc_action_new (<em class="parameter"><code>const <span class="type">char</spa <div class="refsect3"> <a name="nm-tc-action-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTCConfig.html#NMTCAction"><span class="type">NMTCAction</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -956,7 +956,7 @@ nm_tc_action_dup (<em class="parameter"><code><a class="link" href="NMSettingTCC <a name="nm-tc-action-dup.returns"></a><h4>Returns</h4> <p>a copy of <em class="parameter"><code>action</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1007,7 +1007,7 @@ nm_tc_action_get_attribute_names (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-tc-action-get-attribute-names.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of attribute names,. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1049,7 +1049,7 @@ on <em class="parameter"><code>action</code></em> , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>action</code></em> has no such attribute. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1084,7 +1084,7 @@ nm_tc_action_set_attribute (<em class="parameter"><code><a class="link" href="NM <tr> <td class="parameter_name"><p>value</p></td> <td class="parameter_description"><p>the value. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1129,7 +1129,7 @@ nm_tc_tfilter_new (<em class="parameter"><code>const <span class="type">char</sp <div class="refsect3"> <a name="nm-tc-tfilter-new.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTCConfig.html#NMTCTfilter"><span class="type">NMTCTfilter</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1243,7 +1243,7 @@ nm_tc_tfilter_dup (<em class="parameter"><code><a class="link" href="NMSettingTC <a name="nm-tc-tfilter-dup.returns"></a><h4>Returns</h4> <p>a copy of <em class="parameter"><code>tfilter</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1418,7 +1418,7 @@ nm_setting_tc_config_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-tc-config-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingTCConfig.html" title="NMSettingTCConfig"><span class="type">NMSettingTCConfig</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1480,7 +1480,7 @@ nm_setting_tc_config_get_qdisc (<em class="parameter"><code><a class="link" href <a name="nm-setting-tc-config-get-qdisc.returns"></a><h4>Returns</h4> <p>the qdisc at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1672,7 +1672,7 @@ nm_setting_tc_config_get_tfilter (<em class="parameter"><code><a class="link" hr <a name="nm-setting-tc-config-get-tfilter.returns"></a><h4>Returns</h4> <p>the tfilter at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1829,6 +1829,6 @@ nm_setting_tc_config_clear_tfilters (<em class="parameter"><code><a class="link" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingTeam.html b/docs/libnm/html/NMSettingTeam.html index ab4694c2..55cc06d8 100644 --- a/docs/libnm/html/NMSettingTeam.html +++ b/docs/libnm/html/NMSettingTeam.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingTeamPort.html" title="NMSettingTeamPort"> <link rel="next" href="NMSettingTun.html" title="NMSettingTun"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -618,7 +618,7 @@ consistency with the link_watcher constructors of other type</p></td> <div class="refsect3"> <a name="nm-team-link-watcher-new-ethtool.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTeam.html#NMTeamLinkWatcher"><span class="type">NMTeamLinkWatcher</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -673,7 +673,7 @@ target address in the NS packet</p></td> <div class="refsect3"> <a name="nm-team-link-watcher-new-nsna-ping.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTeam.html#NMTeamLinkWatcher"><span class="type">NMTeamLinkWatcher</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -741,7 +741,7 @@ address in the arp request</p></td> <div class="refsect3"> <a name="nm-team-link-watcher-new-arp-ping.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTeam.html#NMTeamLinkWatcher"><span class="type">NMTeamLinkWatcher</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -815,7 +815,7 @@ address in the arp request</p></td> <div class="refsect3"> <a name="nm-team-link-watcher-new-arp-ping2.returns"></a><h4>Returns</h4> <p>the new <a class="link" href="NMSettingTeam.html#NMTeamLinkWatcher"><span class="type">NMTeamLinkWatcher</span></a> object, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -929,7 +929,7 @@ nm_team_link_watcher_dup (<em class="parameter"><code>const <a class="link" href <a name="nm-team-link-watcher-dup.returns"></a><h4>Returns</h4> <p>a copy of <em class="parameter"><code>watcher</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -1177,7 +1177,7 @@ nm_setting_team_new (<em class="parameter"><code><span class="type">void</span>< <div class="refsect3"> <a name="nm-setting-team-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="type">NMSettingTeam</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1202,7 +1202,7 @@ nm_setting_team_get_config (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-team-get-config.returns"></a><h4>Returns</h4> -<p> the <span class="type">“config”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingTeam.html#NMSettingTeam--config"><span class="type">“config”</span></a> property of the setting</p> </div> </div> <hr> @@ -1775,7 +1775,7 @@ nm_setting_team_get_link_watcher (<em class="parameter"><code><a class="link" hr <a name="nm-setting-team-get-link-watcher.returns"></a><h4>Returns</h4> <p>the link watcher at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -2204,6 +2204,6 @@ option 'validate_inactive' is enabled (set to true).</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingTeamPort.html b/docs/libnm/html/NMSettingTeamPort.html index 64b20b67..bd6712a5 100644 --- a/docs/libnm/html/NMSettingTeamPort.html +++ b/docs/libnm/html/NMSettingTeamPort.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingTCConfig.html" title="NMSettingTCConfig"> <link rel="next" href="NMSettingTeam.html" title="NMSettingTeam"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -211,7 +211,7 @@ nm_setting_team_port_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-team-port-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="type">NMSettingTeamPort</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -236,7 +236,7 @@ nm_setting_team_port_get_config (<em class="parameter"><code><a class="link" hre </div> <div class="refsect3"> <a name="nm-setting-team-port-get-config.returns"></a><h4>Returns</h4> -<p> the <span class="type">“config”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingTeamPort.html#NMSettingTeamPort--config"><span class="type">“config”</span></a> property of the setting</p> </div> </div> <hr> @@ -428,7 +428,7 @@ nm_setting_team_port_get_link_watcher (<em class="parameter"><code><a class="lin <a name="nm-setting-team-port-get-link-watcher.returns"></a><h4>Returns</h4> <p>the link watcher at index <em class="parameter"><code>idx</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -625,6 +625,6 @@ nm_setting_team_port_clear_link_watchers </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingTun.html b/docs/libnm/html/NMSettingTun.html index 061a08ef..0d1a7357 100644 --- a/docs/libnm/html/NMSettingTun.html +++ b/docs/libnm/html/NMSettingTun.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingTeam.html" title="NMSettingTeam"> <link rel="next" href="NMSettingUser.html" title="NMSettingUser"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -161,7 +161,7 @@ nm_setting_tun_new (<em class="parameter"><code><span class="type">void</span></ <div class="refsect3"> <a name="nm-setting-tun-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingTun.html" title="NMSettingTun"><span class="type">NMSettingTun</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -406,6 +406,6 @@ nm_setting_tun_get_multi_queue (<em class="parameter"><code><a class="link" href </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingUser.html b/docs/libnm/html/NMSettingUser.html index 432fbceb..d268e29c 100644 --- a/docs/libnm/html/NMSettingUser.html +++ b/docs/libnm/html/NMSettingUser.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingTun.html" title="NMSettingTun"> <link rel="next" href="NMSettingVeth.html" title="NMSettingVeth"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -156,7 +156,7 @@ nm_setting_user_get_keys (<em class="parameter"><code><a class="link" href="NMSe <a name="nm-setting-user-get-keys.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array containing each key from the table. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_len][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -192,7 +192,7 @@ nm_setting_user_get_data (<em class="parameter"><code><a class="link" href="NMSe <p>the value associated with <em class="parameter"><code>key</code></em> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no such value exists. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.8</p> </div> @@ -342,6 +342,6 @@ is a valid user data value.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingVeth.html b/docs/libnm/html/NMSettingVeth.html index 405f5e9e..dee004a3 100644 --- a/docs/libnm/html/NMSettingVeth.html +++ b/docs/libnm/html/NMSettingVeth.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingUser.html" title="NMSettingUser"> <link rel="next" href="NMSettingVlan.html" title="NMSettingVlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -91,7 +91,7 @@ nm_setting_veth_new (<em class="parameter"><code><span class="type">void</span>< <div class="refsect3"> <a name="nm-setting-veth-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingVeth.html" title="NMSettingVeth"><span class="type">NMSettingVeth</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -138,6 +138,6 @@ nm_setting_veth_get_peer (<em class="parameter"><code><a class="link" href="NMSe </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingVlan.html b/docs/libnm/html/NMSettingVlan.html index 8d7504f3..69d1733c 100644 --- a/docs/libnm/html/NMSettingVlan.html +++ b/docs/libnm/html/NMSettingVlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingVeth.html" title="NMSettingVeth"> <link rel="next" href="NMSettingVpn.html" title="NMSettingVpn"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -208,7 +208,7 @@ nm_setting_vlan_new (<em class="parameter"><code><span class="type">void</span>< <div class="refsect3"> <a name="nm-setting-vlan-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -233,7 +233,7 @@ nm_setting_vlan_get_parent (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-vlan-get-parent.returns"></a><h4>Returns</h4> -<p> the <span class="type">“parent”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--parent"><span class="type">“parent”</span></a> property of the setting</p> </div> </div> <hr> @@ -258,7 +258,7 @@ nm_setting_vlan_get_id (<em class="parameter"><code><a class="link" href="NMSett </div> <div class="refsect3"> <a name="nm-setting-vlan-get-id.returns"></a><h4>Returns</h4> -<p> the <span class="type">“id”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--id"><span class="type">“id”</span></a> property of the setting</p> </div> </div> <hr> @@ -283,7 +283,7 @@ nm_setting_vlan_get_flags (<em class="parameter"><code><a class="link" href="NMS </div> <div class="refsect3"> <a name="nm-setting-vlan-get-flags.returns"></a><h4>Returns</h4> -<p> the <span class="type">“flags”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--flags"><span class="type">“flags”</span></a> property of the setting</p> </div> </div> <hr> @@ -293,7 +293,7 @@ nm_setting_vlan_get_flags (<em class="parameter"><code><a class="link" href="NMS nm_setting_vlan_get_num_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>, <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre> <p>Returns the number of entries in the -<span class="type">“ingress_priority_map”</span> or <span class="type">“egress_priority_map”</span> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> or <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties of this setting.</p> <div class="refsect3"> <a name="nm-setting-vlan-get-num-priorities.parameters"></a><h4>Parameters</h4> @@ -331,8 +331,8 @@ nm_setting_vlan_get_priority (<em class="parameter"><code><a class="link" href=" <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_from</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *out_to</code></em>);</pre> -<p>Retrieve one of the entries of the <span class="type">“ingress_priority_map”</span> -or <span class="type">“egress_priority_map”</span> properties of this setting.</p> +<p>Retrieve one of the entries of the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> +or <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties of this setting.</p> <div class="refsect3"> <a name="nm-setting-vlan-get-priority.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -384,8 +384,8 @@ nm_setting_vlan_add_priority (<em class="parameter"><code><a class="link" href=" <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> from</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);</pre> -<p>Adds a priority mapping to the <span class="type">“ingress_priority_map”</span> or -<span class="type">“egress_priority_map”</span> properties of the setting. If <em class="parameter"><code>from</code></em> +<p>Adds a priority mapping to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> or +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties of the setting. If <em class="parameter"><code>from</code></em> is already in the given priority map, this function will overwrite the existing entry with the new <em class="parameter"><code>to</code></em> @@ -448,7 +448,7 @@ nm_setting_vlan_remove_priority (<em class="parameter"><code><a class="link" hre <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> idx</code></em>);</pre> <p>Removes the priority map at index <em class="parameter"><code>idx</code></em> from the -<span class="type">“ingress_priority_map”</span> or <span class="type">“egress_priority_map”</span> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> or <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties.</p> <div class="refsect3"> <a name="nm-setting-vlan-remove-priority.parameters"></a><h4>Parameters</h4> @@ -489,8 +489,8 @@ nm_setting_vlan_remove_priority_by_value <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> to</code></em>);</pre> <p>Removes the priority map <em class="parameter"><code>form</code></em> :<em class="parameter"><code>to</code></em> - from the <span class="type">“ingress_priority_map”</span> -or <span class="type">“egress_priority_map”</span> (according to <em class="parameter"><code>map</code></em> + from the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> +or <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> (according to <em class="parameter"><code>map</code></em> argument) properties.</p> <div class="refsect3"> @@ -541,8 +541,8 @@ nm_setting_vlan_remove_priority_str_by_value <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>, <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre> <p>Removes the priority map <em class="parameter"><code>str</code></em> - from the <span class="type">“ingress_priority_map”</span> -or <span class="type">“egress_priority_map”</span> (according to <em class="parameter"><code>map</code></em> + from the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> +or <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> (according to <em class="parameter"><code>map</code></em> argument) properties.</p> <div class="refsect3"> @@ -583,8 +583,8 @@ properties.</p> <pre class="programlisting"><span class="returnvalue">void</span> nm_setting_vlan_clear_priorities (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>, <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>);</pre> -<p>Clear all the entries from <span class="type">“ingress_priority_map”</span> or -<span class="type">“egress_priority_map”</span> properties.</p> +<p>Clear all the entries from <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> or +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties.</p> <div class="refsect3"> <a name="nm-setting-vlan-clear-priorities.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -615,8 +615,8 @@ nm_setting_vlan_clear_priorities (<em class="parameter"><code><a class="link" hr nm_setting_vlan_add_priority_str (<em class="parameter"><code><a class="link" href="NMSettingVlan.html" title="NMSettingVlan"><span class="type">NMSettingVlan</span></a> *setting</code></em>, <em class="parameter"><code><a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap"><span class="type">NMVlanPriorityMap</span></a> map</code></em>, <em class="parameter"><code>const <span class="type">char</span> *str</code></em>);</pre> -<p>Adds a priority map entry into either the <span class="type">“ingress_priority_map”</span> -or the <span class="type">“egress_priority_map”</span> properties. The priority map maps +<p>Adds a priority map entry into either the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map"><span class="type">“ingress_priority_map”</span></a> +or the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map"><span class="type">“egress_priority_map”</span></a> properties. The priority map maps the Linux SKB priorities to 802.1p priorities.</p> <div class="refsect3"> <a name="nm-setting-vlan-add-priority-str.parameters"></a><h4>Parameters</h4> @@ -780,6 +780,6 @@ itself with its switch</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingVpn.html b/docs/libnm/html/NMSettingVpn.html index 7572d5e5..b7d49ee4 100644 --- a/docs/libnm/html/NMSettingVpn.html +++ b/docs/libnm/html/NMSettingVpn.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingVlan.html" title="NMSettingVlan"> <link rel="next" href="NMSettingVrf.html" title="NMSettingVrf"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -275,7 +275,7 @@ nm_setting_vpn_new (<em class="parameter"><code><span class="type">void</span></ <div class="refsect3"> <a name="nm-setting-vpn-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingVpn.html" title="NMSettingVpn"><span class="type">NMSettingVpn</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -574,7 +574,7 @@ nm_setting_vpn_get_data_keys (<em class="parameter"><code><a class="link" href=" <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array containing each data key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there are no data items. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -796,7 +796,7 @@ nm_setting_vpn_get_secret_keys (<em class="parameter"><code><a class="link" href <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array containing each secret key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there are no secrets. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=out_length][<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.12</p> </div> @@ -873,6 +873,6 @@ nm_setting_vpn_get_timeout (<em class="parameter"><code><a class="link" href="NM </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingVrf.html b/docs/libnm/html/NMSettingVrf.html index 835923cc..2a129b78 100644 --- a/docs/libnm/html/NMSettingVrf.html +++ b/docs/libnm/html/NMSettingVrf.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingVpn.html" title="NMSettingVpn"> <link rel="next" href="NMSettingVxlan.html" title="NMSettingVxlan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -92,7 +92,7 @@ nm_setting_vrf_new (<em class="parameter"><code><span class="type">void</span></ <div class="refsect3"> <a name="nm-setting-vrf-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingVrf.html" title="NMSettingVrf"><span class="type">NMSettingVrf</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.24</p> </div> @@ -139,6 +139,6 @@ nm_setting_vrf_get_table (<em class="parameter"><code><a class="link" href="NMSe </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingVxlan.html b/docs/libnm/html/NMSettingVxlan.html index d2fe9165..0b3fe3fe 100644 --- a/docs/libnm/html/NMSettingVxlan.html +++ b/docs/libnm/html/NMSettingVxlan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingVrf.html" title="NMSettingVrf"> <link rel="next" href="NMSettingWifiP2P.html" title="NMSettingWifiP2P"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -269,7 +269,7 @@ nm_setting_vxlan_new (<em class="parameter"><code><span class="type">void</span> <div class="refsect3"> <a name="nm-setting-vxlan-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingVxlan.html" title="NMSettingVxlan"><span class="type">NMSettingVxlan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -796,6 +796,6 @@ nm_setting_vxlan_get_l3_miss (<em class="parameter"><code><a class="link" href=" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWifiP2P.html b/docs/libnm/html/NMSettingWifiP2P.html index 2a00b2c3..8cd438e5 100644 --- a/docs/libnm/html/NMSettingWifiP2P.html +++ b/docs/libnm/html/NMSettingWifiP2P.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingVxlan.html" title="NMSettingVxlan"> <link rel="next" href="NMSettingWimax.html" title="NMSettingWimax"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -115,7 +115,7 @@ nm_setting_wifi_p2p_new (<em class="parameter"><code><span class="type">void</sp <div class="refsect3"> <a name="nm-setting-wifi-p2p-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWifiP2P.html" title="NMSettingWifiP2P"><span class="type">NMSettingWifiP2P</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -194,7 +194,7 @@ nm_setting_wifi_p2p_get_wfd_ies (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-setting-wifi-p2p-get-wfd-ies.returns"></a><h4>Returns</h4> <p>the <span class="type">“wfd-ies”</span> property of the setting. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -228,6 +228,6 @@ nm_setting_wifi_p2p_get_wfd_ies (<em class="parameter"><code><a class="link" hre </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWimax.html b/docs/libnm/html/NMSettingWimax.html index 7bff50bc..5346abdf 100644 --- a/docs/libnm/html/NMSettingWimax.html +++ b/docs/libnm/html/NMSettingWimax.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWifiP2P.html" title="NMSettingWifiP2P"> <link rel="next" href="NMSettingWired.html" title="NMSettingWired"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -196,6 +196,6 @@ to.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWireGuard.html b/docs/libnm/html/NMSettingWireGuard.html index 167bfeb8..34f5415b 100644 --- a/docs/libnm/html/NMSettingWireGuard.html +++ b/docs/libnm/html/NMSettingWireGuard.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWired.html" title="NMSettingWired"> <link rel="next" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -453,7 +453,7 @@ nm_wireguard_peer_new (<em class="parameter"><code><span class="type">void</span <div class="refsect3"> <a name="nm-wireguard-peer-new.returns"></a><h4>Returns</h4> <p>a new, default, unsealed <a class="link" href="NMSettingWireGuard.html#NMWireGuardPeer"><span class="type">NMWireGuardPeer</span></a> instance. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -491,7 +491,7 @@ as well. Otherwise, they will be removed.</p></td> <p>a clone of <em class="parameter"><code>self</code></em> . This instance is always unsealed. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -626,7 +626,7 @@ nm_wireguard_peer_get_public_key (<em class="parameter"><code>const <a class="li <div class="refsect3"> <a name="nm-wireguard-peer-get-public-key.returns"></a><h4>Returns</h4> <p>the public key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unset. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -658,7 +658,7 @@ will be normalized (which may or may not modify the set value).</p> <td class="parameter_name"><p>public_key</p></td> <td class="parameter_description"><p>the new public key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to clear the public key. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>accept_invalid</p></td> @@ -701,7 +701,7 @@ nm_wireguard_peer_get_preshared_key (<em class="parameter"><code>const <a class= <div class="refsect3"> <a name="nm-wireguard-peer-get-preshared-key.returns"></a><h4>Returns</h4> <p>the preshared key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unset. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -738,7 +738,7 @@ be accepted.</p> <td class="parameter_name"><p>preshared_key</p></td> <td class="parameter_description"><p>the new preshared key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to clear the preshared key. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>accept_invalid</p></td> @@ -903,7 +903,7 @@ nm_wireguard_peer_get_endpoint (<em class="parameter"><code>const <a class="link <div class="refsect3"> <a name="nm-wireguard-peer-get-endpoint.returns"></a><h4>Returns</h4> <p>the endpoint or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none was set. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1027,7 +1027,7 @@ breaking API for introspection users. </p></td> . If <em class="parameter"><code>idx</code></em> is out of range, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1253,7 +1253,7 @@ nm_setting_wireguard_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-setting-wireguard-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWireGuard.html" title="NMSettingWireGuard"><span class="type">NMSettingWireGuard</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1280,7 +1280,7 @@ nm_setting_wireguard_get_private_key (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-setting-wireguard-get-private-key.returns"></a><h4>Returns</h4> <p>the set private-key or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1422,7 +1422,7 @@ nm_setting_wireguard_get_peer (<em class="parameter"><code><a class="link" href= <p>the <a class="link" href="NMSettingWireGuard.html#NMWireGuardPeer"><span class="type">NMWireGuardPeer</span></a> entry at index <em class="parameter"><code>idx</code></em> . If the index is out of range, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1468,7 +1468,7 @@ this is set to the <a class="link" href="NMSettingWireGuard.html#nm-setting-wire <a name="nm-setting-wireguard-get-peer-by-public-key.returns"></a><h4>Returns</h4> <p>the <a class="link" href="NMSettingWireGuard.html#NMWireGuardPeer"><span class="type">NMWireGuardPeer</span></a> instance with a matching public key. If no such peer exists, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -1831,6 +1831,6 @@ nm_setting_wireguard_get_ip6_auto_default_route </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWired.html b/docs/libnm/html/NMSettingWired.html index aa1ef24b..6389ac4b 100644 --- a/docs/libnm/html/NMSettingWired.html +++ b/docs/libnm/html/NMSettingWired.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWimax.html" title="NMSettingWimax"> <link rel="next" href="NMSettingWireGuard.html" title="NMSettingWireGuard"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -347,7 +347,7 @@ nm_setting_wired_new (<em class="parameter"><code><span class="type">void</span> <div class="refsect3"> <a name="nm-setting-wired-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -372,7 +372,7 @@ nm_setting_wired_get_port (<em class="parameter"><code><a class="link" href="NMS </div> <div class="refsect3"> <a name="nm-setting-wired-get-port.returns"></a><h4>Returns</h4> -<p> the <span class="type">“port”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--port"><span class="type">“port”</span></a> property of the setting</p> </div> </div> <hr> @@ -397,7 +397,7 @@ nm_setting_wired_get_speed (<em class="parameter"><code><a class="link" href="NM </div> <div class="refsect3"> <a name="nm-setting-wired-get-speed.returns"></a><h4>Returns</h4> -<p> the <span class="type">“speed”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--speed"><span class="type">“speed”</span></a> property of the setting</p> </div> </div> <hr> @@ -422,7 +422,7 @@ nm_setting_wired_get_duplex (<em class="parameter"><code><a class="link" href="N </div> <div class="refsect3"> <a name="nm-setting-wired-get-duplex.returns"></a><h4>Returns</h4> -<p> the <span class="type">“duplex”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--duplex"><span class="type">“duplex”</span></a> property of the setting</p> </div> </div> <hr> @@ -447,7 +447,7 @@ nm_setting_wired_get_auto_negotiate (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-wired-get-auto-negotiate.returns"></a><h4>Returns</h4> -<p> the <span class="type">“auto-negotiate”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--auto-negotiate"><span class="type">“auto-negotiate”</span></a> property of the setting</p> </div> </div> <hr> @@ -472,7 +472,7 @@ nm_setting_wired_get_mac_address (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-wired-get-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mac-address"><span class="type">“mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -498,7 +498,7 @@ nm_setting_wired_get_cloned_mac_address </div> <div class="refsect3"> <a name="nm-setting-wired-get-cloned-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“cloned-mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--cloned-mac-address"><span class="type">“cloned-mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -578,7 +578,7 @@ nm_setting_wired_get_mac_address_blacklist </div> <div class="refsect3"> <a name="nm-setting-wired-get-mac-address-blacklist.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address-blacklist”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mac-address-blacklist"><span class="type">“mac-address-blacklist”</span></a> property of the setting</p> </div> </div> <hr> @@ -650,7 +650,7 @@ at index <em class="parameter"><code>idx</code></em> nm_setting_wired_add_mac_blacklist_item (<em class="parameter"><code><a class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="type">NMSettingWired</span></a> *setting</code></em>, <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre> -<p>Adds a new MAC address to the <span class="type">“mac-address-blacklist”</span> property.</p> +<p>Adds a new MAC address to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mac-address-blacklist"><span class="type">“mac-address-blacklist”</span></a> property.</p> <div class="refsect3"> <a name="nm-setting-wired-add-mac-blacklist-item.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -793,7 +793,7 @@ nm_setting_wired_get_mtu (<em class="parameter"><code><a class="link" href="NMSe </div> <div class="refsect3"> <a name="nm-setting-wired-get-mtu.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mtu”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mtu"><span class="type">“mtu”</span></a> property of the setting</p> </div> </div> <hr> @@ -823,7 +823,7 @@ conjunction with that device.</p> <a name="nm-setting-wired-get-s390-subchannels.returns"></a><h4>Returns</h4> <p>array of strings, each specifying one subchannel the s390 device uses to communicate to the host. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p> </div> </div> <hr> @@ -918,14 +918,14 @@ such as during option iteration.</p> <td class="parameter_name"><p>out_key</p></td> <td class="parameter_description"><p>on return, the key name of the s390 specific option; this value is owned by the setting and should not be modified. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_value</p></td> <td class="parameter_description"><p>on return, the value of the key of the s390 specific option; this value is owned by the setting and should not be modified. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1083,7 +1083,7 @@ and you may pass <a href="https://developer.gnome.org/glib/unstable/glib-Standar <div class="refsect3"> <a name="nm-setting-wired-get-valid-s390-options.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of strings of valid s390 options. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1344,6 +1344,6 @@ incompatible with other flags</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWireless.html b/docs/libnm/html/NMSettingWireless.html index 60e5ddfd..b97a0b50 100644 --- a/docs/libnm/html/NMSettingWireless.html +++ b/docs/libnm/html/NMSettingWireless.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"> <link rel="next" href="NMSettingWpan.html" title="NMSettingWpan"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -392,7 +392,7 @@ nm_setting_wireless_new (<em class="parameter"><code><span class="type">void</sp <div class="refsect3"> <a name="nm-setting-wireless-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -417,8 +417,8 @@ nm_setting_wireless_get_ssid (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-wireless-get-ssid.returns"></a><h4>Returns</h4> -<p>the <span class="type">“ssid”</span> property of the setting. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p>the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--ssid"><span class="type">“ssid”</span></a> property of the setting. </p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -443,7 +443,7 @@ nm_setting_wireless_get_mode (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-wireless-get-mode.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mode”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mode"><span class="type">“mode”</span></a> property of the setting</p> </div> </div> <hr> @@ -468,7 +468,7 @@ nm_setting_wireless_get_band (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-wireless-get-band.returns"></a><h4>Returns</h4> -<p> the <span class="type">“band”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--band"><span class="type">“band”</span></a> property of the setting</p> </div> </div> <hr> @@ -493,7 +493,7 @@ nm_setting_wireless_get_channel (<em class="parameter"><code><a class="link" hre </div> <div class="refsect3"> <a name="nm-setting-wireless-get-channel.returns"></a><h4>Returns</h4> -<p> the <span class="type">“channel”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--channel"><span class="type">“channel”</span></a> property of the setting</p> </div> </div> <hr> @@ -518,7 +518,7 @@ nm_setting_wireless_get_bssid (<em class="parameter"><code><a class="link" href= </div> <div class="refsect3"> <a name="nm-setting-wireless-get-bssid.returns"></a><h4>Returns</h4> -<p> the <span class="type">“bssid”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--bssid"><span class="type">“bssid”</span></a> property of the setting</p> </div> </div> <hr> @@ -543,7 +543,7 @@ nm_setting_wireless_get_rate (<em class="parameter"><code><a class="link" href=" </div> <div class="refsect3"> <a name="nm-setting-wireless-get-rate.returns"></a><h4>Returns</h4> -<p> the <span class="type">“rate”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--rate"><span class="type">“rate”</span></a> property of the setting</p> </div> </div> <hr> @@ -568,7 +568,7 @@ nm_setting_wireless_get_tx_power (<em class="parameter"><code><a class="link" hr </div> <div class="refsect3"> <a name="nm-setting-wireless-get-tx-power.returns"></a><h4>Returns</h4> -<p> the <span class="type">“tx-power”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--tx-power"><span class="type">“tx-power”</span></a> property of the setting</p> </div> </div> <hr> @@ -593,7 +593,7 @@ nm_setting_wireless_get_mac_address (<em class="parameter"><code><a class="link" </div> <div class="refsect3"> <a name="nm-setting-wireless-get-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mac-address"><span class="type">“mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -619,7 +619,7 @@ nm_setting_wireless_get_cloned_mac_address </div> <div class="refsect3"> <a name="nm-setting-wireless-get-cloned-mac-address.returns"></a><h4>Returns</h4> -<p> the <span class="type">“cloned-mac-address”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--cloned-mac-address"><span class="type">“cloned-mac-address”</span></a> property of the setting</p> </div> </div> <hr> @@ -672,7 +672,7 @@ nm_setting_wireless_get_mac_address_blacklist </div> <div class="refsect3"> <a name="nm-setting-wireless-get-mac-address-blacklist.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mac-address-blacklist”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mac-address-blacklist"><span class="type">“mac-address-blacklist”</span></a> property of the setting</p> </div> </div> <hr> @@ -744,7 +744,7 @@ at index <em class="parameter"><code>idx</code></em> nm_setting_wireless_add_mac_blacklist_item (<em class="parameter"><code><a class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a> *setting</code></em>, <em class="parameter"><code>const <span class="type">char</span> *mac</code></em>);</pre> -<p>Adds a new MAC address to the <span class="type">“mac-address-blacklist”</span> property.</p> +<p>Adds a new MAC address to the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mac-address-blacklist"><span class="type">“mac-address-blacklist”</span></a> property.</p> <div class="refsect3"> <a name="nm-setting-wireless-add-mac-blacklist-item.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -887,7 +887,7 @@ nm_setting_wireless_get_mtu (<em class="parameter"><code><a class="link" href="N </div> <div class="refsect3"> <a name="nm-setting-wireless-get-mtu.returns"></a><h4>Returns</h4> -<p> the <span class="type">“mtu”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mtu"><span class="type">“mtu”</span></a> property of the setting</p> </div> </div> <hr> @@ -912,7 +912,7 @@ nm_setting_wireless_get_hidden (<em class="parameter"><code><a class="link" href </div> <div class="refsect3"> <a name="nm-setting-wireless-get-hidden.returns"></a><h4>Returns</h4> -<p> the <span class="type">“hidden”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--hidden"><span class="type">“hidden”</span></a> property of the setting</p> </div> </div> <hr> @@ -937,7 +937,7 @@ nm_setting_wireless_get_powersave (<em class="parameter"><code><a class="link" h </div> <div class="refsect3"> <a name="nm-setting-wireless-get-powersave.returns"></a><h4>Returns</h4> -<p> the <span class="type">“powersave”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--powersave"><span class="type">“powersave”</span></a> property of the setting</p> </div> <p class="since">Since: 1.2</p> </div> @@ -1505,6 +1505,6 @@ for this connection.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWirelessSecurity.html b/docs/libnm/html/NMSettingWirelessSecurity.html index c622764f..a97abbcf 100644 --- a/docs/libnm/html/NMSettingWirelessSecurity.html +++ b/docs/libnm/html/NMSettingWirelessSecurity.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWireGuard.html" title="NMSettingWireGuard"> <link rel="next" href="NMSettingWireless.html" title="NMSettingWireless"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -453,7 +453,7 @@ nm_setting_wireless_security_new (<em class="parameter"><code><span class="type" <div class="refsect3"> <a name="nm-setting-wireless-security-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="type">NMSettingWirelessSecurity</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -479,7 +479,7 @@ nm_setting_wireless_security_get_key_mgmt </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-key-mgmt.returns"></a><h4>Returns</h4> -<p> the <span class="type">“key-mgmt”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt"><span class="type">“key-mgmt”</span></a> property of the setting</p> </div> </div> <hr> @@ -1093,7 +1093,7 @@ nm_setting_wireless_security_get_psk (<em class="parameter"><code><a class="link </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-psk.returns"></a><h4>Returns</h4> -<p> the <span class="type">“psk”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk"><span class="type">“psk”</span></a> property of the setting</p> </div> </div> <hr> @@ -1120,7 +1120,7 @@ nm_setting_wireless_security_get_psk_flags <div class="refsect3"> <a name="nm-setting-wireless-security-get-psk-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“psk”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk"><span class="type">“psk”</span></a></p> </div> </div> <hr> @@ -1146,7 +1146,7 @@ nm_setting_wireless_security_get_leap_username </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-leap-username.returns"></a><h4>Returns</h4> -<p> the <span class="type">“leap-username”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username"><span class="type">“leap-username”</span></a> property of the setting</p> </div> </div> <hr> @@ -1172,7 +1172,7 @@ nm_setting_wireless_security_get_leap_password </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-leap-password.returns"></a><h4>Returns</h4> -<p> the <span class="type">“leap-password”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password"><span class="type">“leap-password”</span></a> property of the setting</p> </div> </div> <hr> @@ -1199,7 +1199,7 @@ nm_setting_wireless_security_get_leap_password_flags <div class="refsect3"> <a name="nm-setting-wireless-security-get-leap-password-flags.returns"></a><h4>Returns</h4> <p> the <a class="link" href="NMSetting.html#NMSettingSecretFlags" title="enum NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> pertaining to the -<span class="type">“leap-password”</span></p> +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password"><span class="type">“leap-password”</span></a></p> </div> </div> <hr> @@ -1267,7 +1267,7 @@ nm_setting_wireless_security_set_wep_key <tr> <td class="parameter_name"><p>key</p></td> <td class="parameter_description"><p>the WEP key as a string, in either hexadecimal, ASCII, or passphrase -form as determined by the value of the <span class="type">“wep-key-type”</span> +form as determined by the value of the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type"><span class="type">“wep-key-type”</span></a> property.</p></td> <td class="parameter_annotations"> </td> </tr> @@ -1298,7 +1298,7 @@ nm_setting_wireless_security_get_wep_tx_keyidx </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-wep-tx-keyidx.returns"></a><h4>Returns</h4> -<p> the <span class="type">“wep-tx-keyidx”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx"><span class="type">“wep-tx-keyidx”</span></a> property of the setting</p> </div> </div> <hr> @@ -1324,7 +1324,7 @@ nm_setting_wireless_security_get_auth_alg </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-auth-alg.returns"></a><h4>Returns</h4> -<p> the <span class="type">“auth-alg”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg"><span class="type">“auth-alg”</span></a> property of the setting</p> </div> </div> <hr> @@ -1376,7 +1376,7 @@ nm_setting_wireless_security_get_wep_key_type </div> <div class="refsect3"> <a name="nm-setting-wireless-security-get-wep-key-type.returns"></a><h4>Returns</h4> -<p> the <span class="type">“wep-key-type”</span> property of the setting</p> +<p> the <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type"><span class="type">“wep-key-type”</span></a> property of the setting</p> </div> </div> <hr> @@ -1772,6 +1772,6 @@ although, with the same numeric values.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSettingWpan.html b/docs/libnm/html/NMSettingWpan.html index 23ebdac3..3c13f380 100644 --- a/docs/libnm/html/NMSettingWpan.html +++ b/docs/libnm/html/NMSettingWpan.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMSettingWireless.html" title="NMSettingWireless"> <link rel="next" href="ch04.html" title="Device and Runtime Configuration API Reference"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -147,7 +147,7 @@ nm_setting_wpan_new (<em class="parameter"><code><span class="type">void</span>< <div class="refsect3"> <a name="nm-setting-wpan-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMSettingWpan.html" title="NMSettingWpan"><span class="type">NMSettingWpan</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -334,6 +334,6 @@ nm_setting_wpan_get_channel (<em class="parameter"><code><a class="link" href="N </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMSimpleConnection.html b/docs/libnm/html/NMSimpleConnection.html index 9f780d8b..d2eb741a 100644 --- a/docs/libnm/html/NMSimpleConnection.html +++ b/docs/libnm/html/NMSimpleConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch03.html" title="Connection and Setting API Reference"> <link rel="prev" href="NMConnection.html" title="NMConnection"> <link rel="next" href="NMRemoteConnection.html" title="NMRemoteConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -81,7 +81,7 @@ nm_simple_connection_new (<em class="parameter"><code><span class="type">void</s <div class="refsect3"> <a name="nm-simple-connection-new.returns"></a><h4>Returns</h4> <p>the new empty <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -120,7 +120,7 @@ description of the expected hash table.</p> <p>the new <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</span></a> object, populated with settings created from the values in the hash table, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the connection failed to normalize. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -148,12 +148,12 @@ nm_simple_connection_new_clone (<em class="parameter"><code><a class="link" href <a name="nm-simple-connection-new-clone.returns"></a><h4>Returns</h4> <p>a new <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> containing the same settings and properties as the source <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnConnection.html b/docs/libnm/html/NMVpnConnection.html index 7f7a18bd..812ce210 100644 --- a/docs/libnm/html/NMVpnConnection.html +++ b/docs/libnm/html/NMVpnConnection.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMActiveConnection.html" title="NMActiveConnection"> <link rel="next" href="NMAccessPoint.html" title="NMAccessPoint"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -150,6 +150,6 @@ string used by the connection, and must not be modified.</p> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnEditor.html b/docs/libnm/html/NMVpnEditor.html index e90577b4..ce6d9daf 100644 --- a/docs/libnm/html/NMVpnEditor.html +++ b/docs/libnm/html/NMVpnEditor.html @@ -8,7 +8,7 @@ <link rel="up" href="ch06.html" title="VPN Plugin API Reference"> <link rel="prev" href="NMVpnPluginInfo.html" title="NMVpnPluginInfo"> <link rel="next" href="NMVpnEditorPlugin.html" title="NMVpnEditorPlugin"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -98,7 +98,7 @@ nm_vpn_editor_get_widget (<em class="parameter"><code><a class="link" href="NMVp <div class="refsect3"> <a name="nm-vpn-editor-get-widget.returns"></a><h4>Returns</h4> <p>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -173,6 +173,6 @@ to write values to the connection.</p></td> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnEditorPlugin.html b/docs/libnm/html/NMVpnEditorPlugin.html index e3bf8a01..cd6e6342 100644 --- a/docs/libnm/html/NMVpnEditorPlugin.html +++ b/docs/libnm/html/NMVpnEditorPlugin.html @@ -8,7 +8,7 @@ <link rel="up" href="ch06.html" title="VPN Plugin API Reference"> <link rel="prev" href="NMVpnEditor.html" title="NMVpnEditor"> <link rel="next" href="NMVpnPluginOld.html" title="NMVpnPluginOld"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -325,7 +325,7 @@ nm_vpn_editor_plugin_get_editor (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-vpn-editor-plugin-get-editor.returns"></a><h4>Returns</h4> <p>a new <a class="link" href="NMVpnEditor.html" title="NMVpnEditor"><span class="type">NMVpnEditor</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -421,7 +421,7 @@ nm_vpn_editor_plugin_import (<em class="parameter"><code><a class="link" href="N , or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error or if the file at <em class="parameter"><code>path</code></em> was not recognized by this plugin. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -515,7 +515,7 @@ loading the shared library. </p></td> <div class="refsect3"> <a name="nm-vpn-editor-plugin-load-from-file.returns"></a><h4>Returns</h4> <p>a new plugin instance or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -567,7 +567,7 @@ the given service.</p></td> <div class="refsect3"> <a name="nm-vpn-editor-plugin-load.returns"></a><h4>Returns</h4> <p>a new plugin instance or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -594,7 +594,7 @@ nm_vpn_editor_plugin_get_plugin_info (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-vpn-editor-plugin-get-plugin-info.returns"></a><h4>Returns</h4> <p>if set, return the <a class="link" href="NMVpnPluginInfo.html" title="NMVpnPluginInfo"><span class="type">NMVpnPluginInfo</span></a> instance. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -875,6 +875,6 @@ user_function (<a class="link" href="NMVpnEditor.html" title="NMVpnEditor"><span </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnPluginInfo.html b/docs/libnm/html/NMVpnPluginInfo.html index 65214dac..45880d12 100644 --- a/docs/libnm/html/NMVpnPluginInfo.html +++ b/docs/libnm/html/NMVpnPluginInfo.html @@ -8,7 +8,7 @@ <link rel="up" href="ch06.html" title="VPN Plugin API Reference"> <link rel="prev" href="NMVpnServicePlugin.html" title="NMVpnServicePlugin"> <link rel="next" href="NMVpnEditor.html" title="NMVpnEditor"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -398,7 +398,7 @@ must be present. </p></td> <a name="nm-vpn-plugin-info-new-search-file.returns"></a><h4>Returns</h4> <p>a newly created instance of plugin info or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no matching value was found. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -425,7 +425,7 @@ nm_vpn_plugin_info_get_name (<em class="parameter"><code><a class="link" href="N <div class="refsect3"> <a name="nm-vpn-plugin-info-get-name.returns"></a><h4>Returns</h4> <p>the name. Cannot be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -452,7 +452,7 @@ nm_vpn_plugin_info_get_filename (<em class="parameter"><code><a class="link" hre <div class="refsect3"> <a name="nm-vpn-plugin-info-get-filename.returns"></a><h4>Returns</h4> <p>the filename. Can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -479,7 +479,7 @@ nm_vpn_plugin_info_get_service (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-vpn-plugin-info-get-service.returns"></a><h4>Returns</h4> <p>the service. Cannot be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -506,7 +506,7 @@ nm_vpn_plugin_info_get_plugin (<em class="parameter"><code><a class="link" href= <div class="refsect3"> <a name="nm-vpn-plugin-info-get-plugin.returns"></a><h4>Returns</h4> <p>the plugin. Can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -533,7 +533,7 @@ nm_vpn_plugin_info_get_program (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-vpn-plugin-info-get-program.returns"></a><h4>Returns</h4> <p>the program. Can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -638,7 +638,7 @@ nm_vpn_plugin_info_get_aliases (<em class="parameter"><code><a class="link" href <div class="refsect3"> <a name="nm-vpn-plugin-info-get-aliases.returns"></a><h4>Returns</h4> <p>the aliases from the name-file. </p> -<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -680,7 +680,7 @@ nm_vpn_plugin_info_lookup_property (<em class="parameter"><code><a class="link" <a name="nm-vpn-plugin-info-lookup-property.returns"></a><h4>Returns</h4> <p><a class="link" href="NMVpnPluginInfo.html" title="NMVpnPluginInfo"><span class="type">NMVpnPluginInfo</span></a> is internally a <a href="https://developer.gnome.org/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="type">GKeyFile</span></a>. Returns the matching property. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -719,7 +719,7 @@ nm_vpn_plugin_info_list_load (<em class="parameter"><code><span class="type">voi <a name="nm-vpn-plugin-info-list-load.returns"></a><h4>Returns</h4> <p>list of plugins loaded from the default directories rejecting duplicates. </p> -<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMVpnPluginInfo][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMVpnPluginInfo][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -836,7 +836,7 @@ nm_vpn_plugin_info_list_find_by_name (<em class="parameter"><code><a href="https <a name="nm-vpn-plugin-info-list-find-by-name.returns"></a><h4>Returns</h4> <p>the first plugin with a matching <em class="parameter"><code>name</code></em> (or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -873,7 +873,7 @@ nm_vpn_plugin_info_list_find_by_filename <a name="nm-vpn-plugin-info-list-find-by-filename.returns"></a><h4>Returns</h4> <p>the first plugin with a matching <em class="parameter"><code>filename</code></em> (or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -911,7 +911,7 @@ or one of the provided aliases.</p></td> <a name="nm-vpn-plugin-info-list-find-by-service.returns"></a><h4>Returns</h4> <p>the first plugin with a matching <em class="parameter"><code>service</code></em> (or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -957,7 +957,7 @@ but it could be retrieved via <a class="link" href="NMVpnPluginInfo.html#nm-vpn- <div class="refsect3"> <a name="nm-vpn-plugin-info-list-find-service-type.returns"></a><h4>Returns</h4> <p>the resolved service-type or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -1005,7 +1005,7 @@ with <a class="link" href="NMVpnPluginInfo.html#nm-vpn-plugin-info-list-find-ser <a name="nm-vpn-plugin-info-list-get-service-types.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated strv list of strings. The list itself and the values must be freed with <a href="https://developer.gnome.org/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.4</p> </div> @@ -1032,7 +1032,7 @@ nm_vpn_plugin_info_get_editor_plugin (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-vpn-plugin-info-get-editor-plugin.returns"></a><h4>Returns</h4> <p>the cached <a class="link" href="NMVpnEditorPlugin.html" title="NMVpnEditorPlugin"><span class="type">NMVpnEditorPlugin</span></a> instance. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -1103,7 +1103,7 @@ and can be later retrieved again via <a class="link" href="NMVpnPluginInfo.html#nm-vpn-plugin-info-get-editor-plugin" title="nm_vpn_plugin_info_get_editor_plugin ()"><code class="function">nm_vpn_plugin_info_get_editor_plugin()</code></a>. You can load the plugin only once, unless you reset the state via <a class="link" href="NMVpnPluginInfo.html#nm-vpn-plugin-info-set-editor-plugin" title="nm_vpn_plugin_info_set_editor_plugin ()"><code class="function">nm_vpn_plugin_info_set_editor_plugin()</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -1148,6 +1148,6 @@ plugin only once, unless you reset the state via </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnPluginOld.html b/docs/libnm/html/NMVpnPluginOld.html index 3b8fed77..07669e28 100644 --- a/docs/libnm/html/NMVpnPluginOld.html +++ b/docs/libnm/html/NMVpnPluginOld.html @@ -8,7 +8,7 @@ <link rel="up" href="ch06.html" title="VPN Plugin API Reference"> <link rel="prev" href="NMVpnEditorPlugin.html" title="NMVpnEditorPlugin"> <link rel="next" href="object-tree.html" title="Object Hierarchy"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -268,7 +268,7 @@ nm_vpn_plugin_old_get_connection (<em class="parameter"><code><a class="link" hr <div class="refsect3"> <a name="nm-vpn-plugin-old-get-connection.returns"></a><h4>Returns</h4> <p>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -433,13 +433,13 @@ an applet when the applet calls the authentication dialog of the VPN plugin.</p> <td class="parameter_name"><p>out_data</p></td> <td class="parameter_description"><p>on successful return, a hash table (mapping char*:char*) containing the key/value pairs of VPN data items. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_secrets</p></td> <td class="parameter_description"><p>on successful return, a hash table (mapping char*:char*) containing the key/value pairsof VPN secrets. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -623,6 +623,6 @@ user_function (<a class="link" href="NMVpnPluginOld.html" title="NMVpnPluginOld" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMVpnServicePlugin.html b/docs/libnm/html/NMVpnServicePlugin.html index a016cd52..965727a3 100644 --- a/docs/libnm/html/NMVpnServicePlugin.html +++ b/docs/libnm/html/NMVpnServicePlugin.html @@ -8,7 +8,7 @@ <link rel="up" href="ch06.html" title="VPN Plugin API Reference"> <link rel="prev" href="ch06.html" title="VPN Plugin API Reference"> <link rel="next" href="NMVpnPluginInfo.html" title="NMVpnPluginInfo"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -265,7 +265,7 @@ nm_vpn_service_plugin_get_connection (<em class="parameter"><code><a class="link <div class="refsect3"> <a name="nm-vpn-service-plugin-get-connection.returns"></a><h4>Returns</h4> <p>. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -411,13 +411,13 @@ an applet when the applet calls the authentication dialog of the VPN plugin.</p> <td class="parameter_name"><p>out_data</p></td> <td class="parameter_description"><p>on successful return, a hash table (mapping char*:char*) containing the key/value pairs of VPN data items. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_secrets</p></td> <td class="parameter_description"><p>on successful return, a hash table (mapping char*:char*) containing the key/value pairsof VPN secrets. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -609,6 +609,6 @@ user_function (<a class="link" href="NMVpnServicePlugin.html" title="NMVpnServic </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMWifiP2PPeer.html b/docs/libnm/html/NMWifiP2PPeer.html index b4ddd6e8..aa6dbc45 100644 --- a/docs/libnm/html/NMWifiP2PPeer.html +++ b/docs/libnm/html/NMWifiP2PPeer.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMAccessPoint.html" title="NMAccessPoint"> <link rel="next" href="NMWimaxNsp.html" title="NMWimaxNsp"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -373,7 +373,7 @@ nm_wifi_p2p_peer_get_wfd_ies (<em class="parameter"><code><a class="link" href=" <div class="refsect3"> <a name="nm-wifi-p2p-peer-get-wfd-ies.returns"></a><h4>Returns</h4> <p>the <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> containing the WFD IEs, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -490,7 +490,7 @@ with this function.</p> </tr> <tr> <td class="parameter_name"><p>connections</p></td> -<td class="parameter_description"><p>an array of <span class="type">NMConnections</span> to +<td class="parameter_description"><p>an array of <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> to filter. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></td> </tr> @@ -500,10 +500,10 @@ filter. </p></td> <div class="refsect3"> <a name="nm-wifi-p2p-peer-filter-connections.returns"></a><h4>Returns</h4> <p>an array of -<span class="type">NMConnections</span> that could be activated with the given <em class="parameter"><code>peer</code></em> +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>peer</code></em> . The array should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</code></a> when it is no longer required. </p> -<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> </div> <p class="since">Since: 1.16</p> </div> @@ -613,6 +613,6 @@ against</p></td> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/NMWimaxNsp.html b/docs/libnm/html/NMWimaxNsp.html index c0556985..ed16e0f5 100644 --- a/docs/libnm/html/NMWimaxNsp.html +++ b/docs/libnm/html/NMWimaxNsp.html @@ -8,7 +8,7 @@ <link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference"> <link rel="prev" href="NMWifiP2PPeer.html" title="NMWifiP2PPeer"> <link rel="next" href="NMIPConfig.html" title="NMIPConfig"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -228,7 +228,7 @@ connections will match the <em class="parameter"><code>nsp</code></em> </tr> <tr> <td class="parameter_name"><p>connections</p></td> -<td class="parameter_description"><p>an array of <span class="type">NMConnections</span> to +<td class="parameter_description"><p>an array of <a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> to filter. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></td> </tr> @@ -238,10 +238,10 @@ filter. </p></td> <div class="refsect3"> <a name="nm-wimax-nsp-filter-connections.returns"></a><h4>Returns</h4> <p>an array of -<span class="type">NMConnections</span> that could be activated with the given <em class="parameter"><code>nsp</code></em> +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>nsp</code></em> . The array should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</code></a> when it is no longer required. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span></p> </div> </div> <hr> @@ -311,6 +311,6 @@ against</p></td> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/annotation-glossary.html b/docs/libnm/html/annotation-glossary.html index 9591c45b..3b043d13 100644 --- a/docs/libnm/html/annotation-glossary.html +++ b/docs/libnm/html/annotation-glossary.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="api-index-full.html" title="API Index"> <link rel="next" href="license.html" title="Appendix A. License"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -49,7 +49,7 @@ <dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd> <a name="glsI"></a><h3 class="title">I</h3> <dt><span class="glossterm"><a name="annotation-glossterm-inout"></a>inout</span></dt> -<dd class="glossdef"><p>Parameter for input and for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd> +<dd class="glossdef"><p>Parameter for input and for returning results. Default is <acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>.</p></dd> <a name="glsN"></a><h3 class="title">N</h3> <dt><span class="glossterm"><a name="annotation-glossterm-nullable"></a>nullable</span></dt> <dd class="glossdef"><p>NULL may be passed as the value in, out, in-out; or as a return value.</p></dd> @@ -57,7 +57,7 @@ <dt><span class="glossterm"><a name="annotation-glossterm-optional"></a>optional</span></dt> <dd class="glossdef"><p>NULL may be passed instead of a pointer to a location.</p></dd> <dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt> -<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd> +<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>.</p></dd> <a name="glsS"></a><h3 class="title">S</h3> <dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt> <dd class="glossdef"><p>The callback is valid until first called.</p></dd> @@ -67,15 +67,15 @@ <dd class="glossdef"><p>Exposed in C code, not necessarily available in other languages.</p></dd> <a name="glsT"></a><h3 class="title">T</h3> <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt> -<dd class="glossdef"><p>Free data container after the code is done.</p></dd> +<dd class="glossdef"><p>The caller owns the data container, but not the data inside it.</p></dd> <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt> -<dd class="glossdef"><p>Free data after the code is done.</p></dd> +<dd class="glossdef"><p>The caller owns the data, and is responsible for free it.</p></dd> <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt> -<dd class="glossdef"><p>Don't free data after the code is done.</p></dd> +<dd class="glossdef"><p>The data is owned by the callee, which is responsible of freeing it.</p></dd> <dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt> <dd class="glossdef"><p>Override the parsed C type with given type.</p></dd> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/api-index-full.html b/docs/libnm/html/api-index-full.html index 4d513d1b..7f5d1fe9 100644 --- a/docs/libnm/html/api-index-full.html +++ b/docs/libnm/html/api-index-full.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="object-tree.html" title="Object Hierarchy"> <link rel="next" href="annotation-glossary.html" title="Annotation Glossary"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -53,47 +53,47 @@ NMAccessPoint, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:bssid, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--bssid">NMAccessPoint:bssid</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:flags, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--flags">NMAccessPoint:flags</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:frequency, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--frequency">NMAccessPoint:frequency</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:hw-address, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--hw-address">NMAccessPoint:hw-address</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:last-seen, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--last-seen">NMAccessPoint:last-seen</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:max-bitrate, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--max-bitrate">NMAccessPoint:max-bitrate</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:mode, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--mode">NMAccessPoint:mode</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:rsn-flags, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--rsn-flags">NMAccessPoint:rsn-flags</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:ssid, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--ssid">NMAccessPoint:ssid</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:strength, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--strength">NMAccessPoint:strength</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMAccessPoint:wpa-flags, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMAccessPoint.html#NMAccessPoint--wpa-flags">NMAccessPoint:wpa-flags</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -109,43 +109,43 @@ NMActiveConnection::state-changed, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:connection, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--connection">NMActiveConnection:connection</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:default, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--default">NMActiveConnection:default</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:default6, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--default6">NMActiveConnection:default6</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:devices, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--devices">NMActiveConnection:devices</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:dhcp4-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--dhcp4-config">NMActiveConnection:dhcp4-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:dhcp6-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--dhcp6-config">NMActiveConnection:dhcp6-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:id, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--id">NMActiveConnection:id</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:ip4-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--ip4-config">NMActiveConnection:ip4-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:ip6-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--ip6-config">NMActiveConnection:ip6-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:master, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--master">NMActiveConnection:master</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -153,7 +153,7 @@ NMActiveConnection:specific-object-path, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:state, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--state">NMActiveConnection:state</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -161,15 +161,15 @@ NMActiveConnection:state-flags, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:type, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--type">NMActiveConnection:type</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:uuid, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--uuid">NMActiveConnection:uuid</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMActiveConnection:vpn, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMActiveConnection.html#NMActiveConnection--vpn">NMActiveConnection:vpn</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -229,11 +229,11 @@ NMClient::active-connection-removed, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient::any-device-added, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient-any-device-added">NMClient::any-device-added</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient::any-device-removed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient-any-device-removed">NMClient::any-device-removed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> @@ -245,27 +245,27 @@ NMClient::connection-removed, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient::device-added, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient-device-added">NMClient::device-added</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient::device-removed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient-device-removed">NMClient::device-removed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient::permission-changed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient-permission-changed">NMClient::permission-changed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:activating-connection, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--activating-connection">NMClient:activating-connection</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:active-connections, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--active-connections">NMClient:active-connections</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:all-devices, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--all-devices">NMClient:all-devices</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -285,7 +285,7 @@ NMClient:connections, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:connectivity, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--connectivity">NMClient:connectivity</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -309,7 +309,7 @@ NMClient:dbus-name-owner, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:devices, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--devices">NMClient:devices</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -337,7 +337,7 @@ NMClient:metered, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:networking-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--networking-enabled">NMClient:networking-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -349,43 +349,47 @@ NMClient:permissions-state, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:primary-connection, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--primary-connection">NMClient:primary-connection</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:startup, object property in NMDeviceOvs +NMClient:radio-flags, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:state, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--startup">NMClient:startup</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:version, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--state">NMClient:state</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wimax-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--version">NMClient:version</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wimax-hardware-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wimax-enabled">NMClient:wimax-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wireless-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wimax-hardware-enabled">NMClient:wimax-hardware-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wireless-hardware-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wireless-enabled">NMClient:wireless-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wwan-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wireless-hardware-enabled">NMClient:wireless-hardware-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMClient:wwan-hardware-enabled, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wwan-enabled">NMClient:wwan-enabled</a>, object property in NMDeviceOvs +</dt> +<dd></dd> +<dt> +<a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#NMClient--wwan-hardware-enabled">NMClient:wwan-hardware-enabled</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -421,19 +425,19 @@ NMClientNotifyEventWithPtrCb, user_function in <a class="link" href="NMIPConfig. </dt> <dd></dd> <dt> -NMConnection, struct in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-struct">NMConnection</a>, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMConnection::changed, object signal in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-changed">NMConnection::changed</a>, object signal in NMSettingOvs </dt> <dd></dd> <dt> -NMConnection::secrets-cleared, object signal in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-secrets-cleared">NMConnection::secrets-cleared</a>, object signal in NMSettingOvs </dt> <dd></dd> <dt> -NMConnection::secrets-updated, object signal in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMConnection.html#NMConnection-secrets-updated">NMConnection::secrets-updated</a>, object signal in NMSettingOvs </dt> <dd></dd> <dt> @@ -477,51 +481,51 @@ NMDevice6Lowpan:parent, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice::state-changed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice-state-changed">NMDevice::state-changed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:active-connection, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--active-connection">NMDevice:active-connection</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:autoconnect, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--autoconnect">NMDevice:autoconnect</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:available-connections, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--available-connections">NMDevice:available-connections</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:capabilities, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--capabilities">NMDevice:capabilities</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:device-type, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--device-type">NMDevice:device-type</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:dhcp4-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--dhcp4-config">NMDevice:dhcp4-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:dhcp6-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--dhcp6-config">NMDevice:dhcp6-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:driver, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--driver">NMDevice:driver</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:driver-version, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--driver-version">NMDevice:driver-version</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:firmware-missing, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--firmware-missing">NMDevice:firmware-missing</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:firmware-version, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--firmware-version">NMDevice:firmware-version</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -529,7 +533,7 @@ NMDevice:hw-address, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:interface, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--interface">NMDevice:interface</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -537,11 +541,11 @@ NMDevice:interface-flags, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:ip-interface, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--ip-interface">NMDevice:ip-interface</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:ip4-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--ip4-config">NMDevice:ip4-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -549,7 +553,7 @@ NMDevice:ip4-connectivity, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:ip6-config, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--ip6-config">NMDevice:ip6-config</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -561,7 +565,7 @@ NMDevice:lldp-neighbors, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:managed, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--managed">NMDevice:managed</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -569,7 +573,7 @@ NMDevice:metered, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:mtu, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--mtu">NMDevice:mtu</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -581,7 +585,7 @@ NMDevice:path, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:physical-port-id, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--physical-port-id">NMDevice:physical-port-id</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -589,27 +593,27 @@ NMDevice:ports, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:product, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--product">NMDevice:product</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:real, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--real">NMDevice:real</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:state, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--state">NMDevice:state</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:state-reason, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--state-reason">NMDevice:state-reason</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:udi, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--udi">NMDevice:udi</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDevice:vendor, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDevice.html#NMDevice--vendor">NMDevice:vendor</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -617,7 +621,7 @@ NMDeviceAdsl, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceAdsl:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceAdsl.html#NMDeviceAdsl--carrier">NMDeviceAdsl:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -625,11 +629,11 @@ NMDeviceBond, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBond:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBond.html#NMDeviceBond--carrier">NMDeviceBond:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBond:slaves, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBond.html#NMDeviceBond--slaves">NMDeviceBond:slaves</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -637,11 +641,11 @@ NMDeviceBridge, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBridge:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBridge.html#NMDeviceBridge--carrier">NMDeviceBridge:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBridge:slaves, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBridge.html#NMDeviceBridge--slaves">NMDeviceBridge:slaves</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -649,11 +653,11 @@ NMDeviceBt, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBt:bt-capabilities, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBt.html#NMDeviceBt--bt-capabilities">NMDeviceBt:bt-capabilities</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceBt:name, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceBt.html#NMDeviceBt--name">NMDeviceBt:name</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -677,11 +681,11 @@ NMDeviceEthernet, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceEthernet:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--carrier">NMDeviceEthernet:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceEthernet:perm-hw-address, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address">NMDeviceEthernet:perm-hw-address</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -689,7 +693,7 @@ NMDeviceEthernet:s390-subchannels, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceEthernet:speed, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceEthernet.html#NMDeviceEthernet--speed">NMDeviceEthernet:speed</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -701,7 +705,7 @@ NMDeviceGeneric, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceGeneric:type-description, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceGeneric.html#NMDeviceGeneric--type-description">NMDeviceGeneric:type-description</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -709,7 +713,7 @@ NMDeviceInfiniband, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceInfiniband:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceInfiniband.html#NMDeviceInfiniband--carrier">NMDeviceInfiniband:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -853,7 +857,7 @@ NMDeviceModem:apn, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceModem:current-capabilities, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceModem.html#NMDeviceModem--current-capabilities">NMDeviceModem:current-capabilities</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -861,7 +865,7 @@ NMDeviceModem:device-id, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceModem:modem-capabilities, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceModem.html#NMDeviceModem--modem-capabilities">NMDeviceModem:modem-capabilities</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -877,11 +881,11 @@ NMDeviceOlpcMesh, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceOlpcMesh:active-channel, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel">NMDeviceOlpcMesh:active-channel</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceOlpcMesh:companion, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion">NMDeviceOlpcMesh:companion</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -921,7 +925,7 @@ NMDeviceTeam, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceTeam:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceTeam.html#NMDeviceTeam--carrier">NMDeviceTeam:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -929,7 +933,7 @@ NMDeviceTeam:config, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceTeam:slaves, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceTeam.html#NMDeviceTeam--slaves">NMDeviceTeam:slaves</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -977,15 +981,15 @@ NMDeviceVlan, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceVlan:carrier, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceVlan.html#NMDeviceVlan--carrier">NMDeviceVlan:carrier</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceVlan:parent, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceVlan.html#NMDeviceVlan--parent">NMDeviceVlan:parent</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceVlan:vlan-id, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceVlan.html#NMDeviceVlan--vlan-id">NMDeviceVlan:vlan-id</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -1073,23 +1077,23 @@ NMDeviceWifi, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi::access-point-added, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi-access-point-added">NMDeviceWifi::access-point-added</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi::access-point-removed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi-access-point-removed">NMDeviceWifi::access-point-removed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:access-points, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--access-points">NMDeviceWifi:access-points</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:active-access-point, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--active-access-point">NMDeviceWifi:active-access-point</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:bitrate, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--bitrate">NMDeviceWifi:bitrate</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -1097,15 +1101,15 @@ NMDeviceWifi:last-scan, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:mode, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--mode">NMDeviceWifi:mode</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:perm-hw-address, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--perm-hw-address">NMDeviceWifi:perm-hw-address</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWifi:wireless-capabilities, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities">NMDeviceWifi:wireless-capabilities</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -1133,43 +1137,43 @@ NMDeviceWimax, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax::nsp-added, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax-nsp-added">NMDeviceWimax::nsp-added</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax::nsp-removed, object signal in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax-nsp-removed">NMDeviceWimax::nsp-removed</a>, object signal in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:active-nsp, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--active-nsp">NMDeviceWimax:active-nsp</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:bsid, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--bsid">NMDeviceWimax:bsid</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:center-frequency, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--center-frequency">NMDeviceWimax:center-frequency</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:cinr, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--cinr">NMDeviceWimax:cinr</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:hw-address, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--hw-address">NMDeviceWimax:hw-address</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:nsps, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--nsps">NMDeviceWimax:nsps</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:rssi, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--rssi">NMDeviceWimax:rssi</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMDeviceWimax:tx-power, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMDeviceWimax.html#NMDeviceWimax--tx-power">NMDeviceWimax:tx-power</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -1605,6 +1609,10 @@ _NMObjectClassFieldInfo, struct in <a class="link" href="NMIPConfig.html" title= </dt> <dd></dd> <dt> +<a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags">NMRadioFlags</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a> +</dt> +<dd></dd> +<dt> NMRemoteConnection, struct in NMDeviceOvs </dt> <dd></dd> @@ -1617,7 +1625,7 @@ NMRemoteConnection:flags, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMRemoteConnection:unsaved, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMRemoteConnection.html#NMRemoteConnection--unsaved">NMRemoteConnection:unsaved</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -1677,7 +1685,7 @@ NMRemoteConnection:visible, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMSetting, struct in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting.html#NMSetting-struct">NMSetting</a>, struct in NMSettingOvs </dt> <dd></dd> <dt> @@ -1693,11 +1701,11 @@ NMSetting8021x, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:altsubject-matches, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--altsubject-matches">NMSetting8021x:altsubject-matches</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:anonymous-identity, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--anonymous-identity">NMSetting8021x:anonymous-identity</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1705,7 +1713,7 @@ NMSetting8021x:auth-timeout, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:ca-cert, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-cert">NMSetting8021x:ca-cert</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1717,11 +1725,11 @@ NMSetting8021x:ca-cert-password-flags, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:ca-path, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--ca-path">NMSetting8021x:ca-path</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:client-cert, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--client-cert">NMSetting8021x:client-cert</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1741,11 +1749,11 @@ NMSetting8021x:domain-suffix-match, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:eap, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--eap">NMSetting8021x:eap</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:identity, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--identity">NMSetting8021x:identity</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1753,23 +1761,23 @@ NMSetting8021x:optional, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:pac-file, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--pac-file">NMSetting8021x:pac-file</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password">NMSetting8021x:password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password-flags">NMSetting8021x:password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:password-raw, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password-raw">NMSetting8021x:password-raw</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:password-raw-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--password-raw-flags">NMSetting8021x:password-raw-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1777,31 +1785,31 @@ NMSetting8021x:phase1-auth-flags, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase1-fast-provisioning, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning">NMSetting8021x:phase1-fast-provisioning</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase1-peaplabel, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-peaplabel">NMSetting8021x:phase1-peaplabel</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase1-peapver, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase1-peapver">NMSetting8021x:phase1-peapver</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-altsubject-matches, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches">NMSetting8021x:phase2-altsubject-matches</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-auth, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-auth">NMSetting8021x:phase2-auth</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-autheap, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-autheap">NMSetting8021x:phase2-autheap</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-ca-cert, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-cert">NMSetting8021x:phase2-ca-cert</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1813,11 +1821,11 @@ NMSetting8021x:phase2-ca-cert-password-flags, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-ca-path, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-ca-path">NMSetting8021x:phase2-ca-path</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-client-cert, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-client-cert">NMSetting8021x:phase2-client-cert</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1837,47 +1845,47 @@ NMSetting8021x:phase2-domain-suffix-match, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-private-key, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key">NMSetting8021x:phase2-private-key</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-private-key-password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password">NMSetting8021x:phase2-private-key-password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-private-key-password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags">NMSetting8021x:phase2-private-key-password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:phase2-subject-match, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--phase2-subject-match">NMSetting8021x:phase2-subject-match</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:pin, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--pin">NMSetting8021x:pin</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:pin-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--pin-flags">NMSetting8021x:pin-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:private-key, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key">NMSetting8021x:private-key</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:private-key-password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key-password">NMSetting8021x:private-key-password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:private-key-password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--private-key-password-flags">NMSetting8021x:private-key-password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:subject-match, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--subject-match">NMSetting8021x:subject-match</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting8021x:system-ca-certs, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting8021x.html#NMSetting8021x--system-ca-certs">NMSetting8021x:system-ca-certs</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1893,7 +1901,7 @@ NMSetting8021x:system-ca-certs, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSetting:name, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSetting.html#NMSetting--name">NMSetting:name</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1901,31 +1909,31 @@ NMSettingAdsl, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:encapsulation, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--encapsulation">NMSettingAdsl:encapsulation</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--password">NMSettingAdsl:password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--password-flags">NMSettingAdsl:password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:protocol, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--protocol">NMSettingAdsl:protocol</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:username, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--username">NMSettingAdsl:username</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:vci, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--vci">NMSettingAdsl:vci</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingAdsl:vpi, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingAdsl.html#NMSettingAdsl--vpi">NMSettingAdsl:vpi</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1933,11 +1941,11 @@ NMSettingBluetooth, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBluetooth:bdaddr, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBluetooth.html#NMSettingBluetooth--bdaddr">NMSettingBluetooth:bdaddr</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBluetooth:type, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBluetooth.html#NMSettingBluetooth--type">NMSettingBluetooth:type</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1945,7 +1953,7 @@ NMSettingBond, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBond:options, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBond.html#NMSettingBond--options">NMSettingBond:options</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1961,11 +1969,11 @@ NMSettingBridge, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:ageing-time, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--ageing-time">NMSettingBridge:ageing-time</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:forward-delay, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--forward-delay">NMSettingBridge:forward-delay</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -1977,15 +1985,15 @@ NMSettingBridge:group-forward-mask, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:hello-time, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--hello-time">NMSettingBridge:hello-time</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--mac-address">NMSettingBridge:mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:max-age, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--max-age">NMSettingBridge:max-age</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2041,11 +2049,11 @@ NMSettingBridge:multicast-startup-query-interval, object property in NMSettingOv </dt> <dd></dd> <dt> -NMSettingBridge:priority, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--priority">NMSettingBridge:priority</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridge:stp, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridge.html#NMSettingBridge--stp">NMSettingBridge:stp</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2073,15 +2081,15 @@ NMSettingBridgePort, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridgePort:hairpin-mode, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode">NMSettingBridgePort:hairpin-mode</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridgePort:path-cost, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--path-cost">NMSettingBridgePort:path-cost</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingBridgePort:priority, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingBridgePort.html#NMSettingBridgePort--priority">NMSettingBridgePort:priority</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2097,19 +2105,19 @@ NMSettingCdma:mtu, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingCdma:number, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--number">NMSettingCdma:number</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingCdma:password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--password">NMSettingCdma:password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingCdma:password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--password-flags">NMSettingCdma:password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingCdma:username, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingCdma.html#NMSettingCdma--username">NMSettingCdma:username</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2121,7 +2129,7 @@ NMSettingCdma:username, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection, struct in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection-struct">NMSettingConnection</a>, struct in NMSettingOvs </dt> <dd></dd> <dt> @@ -2129,7 +2137,7 @@ NMSettingConnection:auth-retries, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:autoconnect, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--autoconnect">NMSettingConnection:autoconnect</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2149,15 +2157,15 @@ NMSettingConnection:dns-over-tls, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:gateway-ping-timeout, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout">NMSettingConnection:gateway-ping-timeout</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:id, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--id">NMSettingConnection:id</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:interface-name, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--interface-name">NMSettingConnection:interface-name</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2169,7 +2177,7 @@ NMSettingConnection:llmnr, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:master, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--master">NMSettingConnection:master</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2189,19 +2197,19 @@ NMSettingConnection:multi-connect, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:permissions, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--permissions">NMSettingConnection:permissions</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:read-only, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--read-only">NMSettingConnection:read-only</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:secondaries, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--secondaries">NMSettingConnection:secondaries</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:slave-type, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--slave-type">NMSettingConnection:slave-type</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2209,15 +2217,15 @@ NMSettingConnection:stable-id, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:timestamp, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--timestamp">NMSettingConnection:timestamp</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:type, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--type">NMSettingConnection:type</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:uuid, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--uuid">NMSettingConnection:uuid</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2225,7 +2233,7 @@ NMSettingConnection:wait-device-timeout, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingConnection:zone, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--zone">NMSettingConnection:zone</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2253,63 +2261,63 @@ NMSettingDcb, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-fcoe-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-flags">NMSettingDcb:app-fcoe-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-fcoe-mode, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-mode">NMSettingDcb:app-fcoe-mode</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-fcoe-priority, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fcoe-priority">NMSettingDcb:app-fcoe-priority</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-fip-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-flags">NMSettingDcb:app-fip-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-fip-priority, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-fip-priority">NMSettingDcb:app-fip-priority</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-iscsi-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-flags">NMSettingDcb:app-iscsi-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:app-iscsi-priority, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--app-iscsi-priority">NMSettingDcb:app-iscsi-priority</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-bandwidth, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-bandwidth">NMSettingDcb:priority-bandwidth</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-flow-control, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control">NMSettingDcb:priority-flow-control</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-flow-control-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags">NMSettingDcb:priority-flow-control-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-group-bandwidth, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth">NMSettingDcb:priority-group-bandwidth</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-group-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-flags">NMSettingDcb:priority-group-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-group-id, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-group-id">NMSettingDcb:priority-group-id</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-strict-bandwidth, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth">NMSettingDcb:priority-strict-bandwidth</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingDcb:priority-traffic-class, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingDcb.html#NMSettingDcb--priority-traffic-class">NMSettingDcb:priority-traffic-class</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2337,7 +2345,7 @@ NMSettingGsm, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:apn, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--apn">NMSettingGsm:apn</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2349,7 +2357,7 @@ NMSettingGsm:device-id, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:home-only, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--home-only">NMSettingGsm:home-only</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2357,27 +2365,27 @@ NMSettingGsm:mtu, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:network-id, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--network-id">NMSettingGsm:network-id</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:number, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--number">NMSettingGsm:number</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--password">NMSettingGsm:password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--password-flags">NMSettingGsm:password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:pin, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--pin">NMSettingGsm:pin</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:pin-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--pin-flags">NMSettingGsm:pin-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2389,7 +2397,7 @@ NMSettingGsm:sim-operator-id, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingGsm:username, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingGsm.html#NMSettingGsm--username">NMSettingGsm:username</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2417,23 +2425,23 @@ NMSettingInfiniband, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingInfiniband:mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mac-address">NMSettingInfiniband:mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingInfiniband:mtu, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--mtu">NMSettingInfiniband:mtu</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingInfiniband:p-key, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--p-key">NMSettingInfiniband:p-key</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingInfiniband:parent, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--parent">NMSettingInfiniband:parent</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingInfiniband:transport-mode, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingInfiniband.html#NMSettingInfiniband--transport-mode">NMSettingInfiniband:transport-mode</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2441,7 +2449,7 @@ NMSettingIP4Config, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingIP4Config:dhcp-client-id, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id">NMSettingIP4Config:dhcp-client-id</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2465,7 +2473,7 @@ NMSettingIP6Config:dhcp-duid, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingIP6Config:ip6-privacy, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy">NMSettingIP6Config:ip6-privacy</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2733,15 +2741,15 @@ NMSettingOlpcMesh, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingOlpcMesh:channel, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel">NMSettingOlpcMesh:channel</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingOlpcMesh:dhcp-anycast-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address">NMSettingOlpcMesh:dhcp-anycast-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingOlpcMesh:ssid, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid">NMSettingOlpcMesh:ssid</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -2973,23 +2981,23 @@ NMSettingSerial, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingSerial:baud, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--baud">NMSettingSerial:baud</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingSerial:bits, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--bits">NMSettingSerial:bits</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingSerial:parity, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--parity">NMSettingSerial:parity</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingSerial:send-delay, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--send-delay">NMSettingSerial:send-delay</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingSerial:stopbits, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingSerial.html#NMSettingSerial--stopbits">NMSettingSerial:stopbits</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3037,7 +3045,7 @@ NMSettingTeam, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingTeam:config, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingTeam.html#NMSettingTeam--config">NMSettingTeam:config</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3105,7 +3113,7 @@ NMSettingTeamPort, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingTeamPort:config, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingTeamPort.html#NMSettingTeamPort--config">NMSettingTeamPort:config</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3189,23 +3197,23 @@ NMSettingVlan, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingVlan:egress-priority-map, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--egress-priority-map">NMSettingVlan:egress-priority-map</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingVlan:flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--flags">NMSettingVlan:flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingVlan:id, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--id">NMSettingVlan:id</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingVlan:ingress-priority-map, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--ingress-priority-map">NMSettingVlan:ingress-priority-map</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingVlan:parent, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingVlan.html#NMSettingVlan--parent">NMSettingVlan:parent</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3333,11 +3341,11 @@ NMSettingWimax, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWimax:mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWimax.html#NMSettingWimax--mac-address">NMSettingWimax:mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWimax:network-name, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWimax.html#NMSettingWimax--network-name">NMSettingWimax:network-name</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3349,15 +3357,15 @@ NMSettingWired:accept-all-mac-addresses, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:auto-negotiate, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--auto-negotiate">NMSettingWired:auto-negotiate</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:cloned-mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--cloned-mac-address">NMSettingWired:cloned-mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:duplex, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--duplex">NMSettingWired:duplex</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3365,35 +3373,35 @@ NMSettingWired:generate-mac-address-mask, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mac-address">NMSettingWired:mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:mac-address-blacklist, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mac-address-blacklist">NMSettingWired:mac-address-blacklist</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:mtu, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--mtu">NMSettingWired:mtu</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:port, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--port">NMSettingWired:port</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:s390-nettype, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--s390-nettype">NMSettingWired:s390-nettype</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:s390-options, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--s390-options">NMSettingWired:s390-options</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:s390-subchannels, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--s390-subchannels">NMSettingWired:s390-subchannels</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWired:speed, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWired.html#NMSettingWired--speed">NMSettingWired:speed</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3453,19 +3461,19 @@ NMSettingWireless:ap-isolation, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:band, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--band">NMSettingWireless:band</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:bssid, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--bssid">NMSettingWireless:bssid</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:channel, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--channel">NMSettingWireless:channel</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:cloned-mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--cloned-mac-address">NMSettingWireless:cloned-mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3473,15 +3481,15 @@ NMSettingWireless:generate-mac-address-mask, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:hidden, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--hidden">NMSettingWireless:hidden</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:mac-address, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mac-address">NMSettingWireless:mac-address</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:mac-address-blacklist, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mac-address-blacklist">NMSettingWireless:mac-address-blacklist</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3489,31 +3497,31 @@ NMSettingWireless:mac-address-randomization, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:mode, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mode">NMSettingWireless:mode</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:mtu, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--mtu">NMSettingWireless:mtu</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:powersave, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--powersave">NMSettingWireless:powersave</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:rate, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--rate">NMSettingWireless:rate</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:seen-bssids, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--seen-bssids">NMSettingWireless:seen-bssids</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:ssid, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--ssid">NMSettingWireless:ssid</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWireless:tx-power, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWireless.html#NMSettingWireless--tx-power">NMSettingWireless:tx-power</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3529,7 +3537,7 @@ NMSettingWirelessSecurity, struct in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:auth-alg, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg">NMSettingWirelessSecurity:auth-alg</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3537,27 +3545,27 @@ NMSettingWirelessSecurity:fils, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:group, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group">NMSettingWirelessSecurity:group</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:key-mgmt, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt">NMSettingWirelessSecurity:key-mgmt</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:leap-password, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password">NMSettingWirelessSecurity:leap-password</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:leap-password-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags">NMSettingWirelessSecurity:leap-password-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:leap-username, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username">NMSettingWirelessSecurity:leap-username</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:pairwise, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise">NMSettingWirelessSecurity:pairwise</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3565,43 +3573,43 @@ NMSettingWirelessSecurity:pmf, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:proto, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto">NMSettingWirelessSecurity:proto</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:psk, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk">NMSettingWirelessSecurity:psk</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:psk-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags">NMSettingWirelessSecurity:psk-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key-flags, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags">NMSettingWirelessSecurity:wep-key-flags</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key-type, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type">NMSettingWirelessSecurity:wep-key-type</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key0, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0">NMSettingWirelessSecurity:wep-key0</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key1, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1">NMSettingWirelessSecurity:wep-key1</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key2, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2">NMSettingWirelessSecurity:wep-key2</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-key3, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3">NMSettingWirelessSecurity:wep-key3</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> -NMSettingWirelessSecurity:wep-tx-keyidx, object property in NMSettingOvs +<a href="/usr/share/gtk-doc/html/libnm-util/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx">NMSettingWirelessSecurity:wep-tx-keyidx</a>, object property in NMSettingOvs </dt> <dd></dd> <dt> @@ -3953,15 +3961,15 @@ NMWimaxNsp, struct in NMDeviceOvs </dt> <dd></dd> <dt> -NMWimaxNsp:name, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMWimaxNsp.html#NMWimaxNsp--name">NMWimaxNsp:name</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMWimaxNsp:network-type, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMWimaxNsp.html#NMWimaxNsp--network-type">NMWimaxNsp:network-type</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> -NMWimaxNsp:signal-quality, object property in NMDeviceOvs +<a href="/usr/share/gtk-doc/html/libnm-glib/NMWimaxNsp.html#NMWimaxNsp--signal-quality">NMWimaxNsp:signal-quality</a>, object property in NMDeviceOvs </dt> <dd></dd> <dt> @@ -4281,6 +4289,10 @@ nm_auto_unref_nml_dbusobj, macro in <a class="link" href="NMIPConfig.html" title </dt> <dd></dd> <dt> +<a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-38:CAPS" title="NM_AVAILABLE_IN_1_38">NM_AVAILABLE_IN_1_38</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-4:CAPS" title="NM_AVAILABLE_IN_1_4">NM_AVAILABLE_IN_1_4</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> </dt> <dd></dd> @@ -4733,6 +4745,10 @@ NM_CHECK_VERSION, macro in nm-version-macros </dt> <dd></dd> <dt> +<a class="link" href="NMClient.html#nm-client-get-radio-flags" title="nm_client_get_radio_flags ()">nm_client_get_radio_flags</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> +</dt> +<dd></dd> +<dt> <a class="link" href="NMClient.html#nm-client-get-startup" title="nm_client_get_startup ()">nm_client_get_startup</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> @@ -4825,6 +4841,10 @@ NM_CLIENT_NOTIFY_EVENT_PRIO_GPROP, macro in <a class="link" href="NMIPConfig.htm </dt> <dd></dd> <dt> +<a class="link" href="NMClient.html#NM-CLIENT-RADIO-FLAGS:CAPS" title="NM_CLIENT_RADIO_FLAGS">NM_CLIENT_RADIO_FLAGS</a>, macro in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> +</dt> +<dd></dd> +<dt> <a class="link" href="NMClient.html#nm-client-reload" title="nm_client_reload ()">nm_client_reload</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> @@ -5429,11 +5449,11 @@ nm_context_busy_watcher_quark, function in <a class="link" href="NMIPConfig.html </dt> <dd></dd> <dt> -NM_DBUS_INTERFACE_VPN, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN:CAPS">NM_DBUS_INTERFACE_VPN</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_INTERFACE_VPN_CONNECTION, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS">NM_DBUS_INTERFACE_VPN_CONNECTION</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -5445,15 +5465,15 @@ NM_DBUS_INTERFACE_VPN_CONNECTION, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_INVALID_VPN_CONNECTION, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS">NM_DBUS_INVALID_VPN_CONNECTION</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_NO_ACTIVE_VPN_CONNECTION, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS">NM_DBUS_NO_ACTIVE_VPN_CONNECTION</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_NO_VPN_CONNECTIONS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS">NM_DBUS_NO_VPN_CONNECTIONS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -5489,11 +5509,11 @@ nm_dbus_path_not_empty, function in <a class="link" href="NMIPConfig.html" title </dt> <dd></dd> <dt> -NM_DBUS_PATH_VPN, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN:CAPS">NM_DBUS_PATH_VPN</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_PATH_VPN_CONNECTION, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS">NM_DBUS_PATH_VPN_CONNECTION</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -5509,67 +5529,67 @@ NM_DBUS_PATH_VPN_CONNECTION, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_ALREADY_STARTED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS">NM_DBUS_VPN_ALREADY_STARTED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_ALREADY_STOPPED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS">NM_DBUS_VPN_ALREADY_STOPPED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_BAD_ARGUMENTS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS">NM_DBUS_VPN_BAD_ARGUMENTS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_ERROR_PREFIX, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS">NM_DBUS_VPN_ERROR_PREFIX</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS">NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_CONNECT_FAILED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS">NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_IP4_CONFIG, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS">NM_DBUS_VPN_SIGNAL_IP4_CONFIG</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS">NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS">NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_LOGIN_BANNER, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS">NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_LOGIN_FAILED, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS">NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_STATE_CHANGE, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS">NM_DBUS_VPN_SIGNAL_STATE_CHANGE</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS">NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_STARTING_IN_PROGRESS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS">NM_DBUS_VPN_STARTING_IN_PROGRESS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_STOPPING_IN_PROGRESS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS">NM_DBUS_VPN_STOPPING_IN_PROGRESS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_DBUS_VPN_WRONG_STATE, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-WRONG-STATE:CAPS">NM_DBUS_VPN_WRONG_STATE</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -5709,6 +5729,14 @@ NM_DBUS_VPN_WRONG_STATE, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> +<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-38:CAPS" title="NM_DEPRECATED_IN_1_38">NM_DEPRECATED_IN_1_38</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> +</dt> +<dd></dd> +<dt> +<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-38-FOR:CAPS" title="NM_DEPRECATED_IN_1_38_FOR()">NM_DEPRECATED_IN_1_38_FOR</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> +</dt> +<dd></dd> +<dt> <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-4:CAPS" title="NM_DEPRECATED_IN_1_4">NM_DEPRECATED_IN_1_4</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a> </dt> <dd></dd> @@ -13917,15 +13945,15 @@ nm_team_setting_verify, function in nm-team-utils </dt> <dd></dd> <dt> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a> +<a class="link" href="NMClient.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> <dt> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a> +<a class="link" href="NMClient.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> <dt> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a> +<a class="link" href="NMClient.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a>, function in <a class="link" href="NMClient.html" title="NMClient">NMClient</a> </dt> <dd></dd> <dt> @@ -14281,6 +14309,10 @@ NM_VERSION_1_36, macro in nm-version-macros </dt> <dd></dd> <dt> +NM_VERSION_1_38, macro in nm-version-macros +</dt> +<dd></dd> +<dt> NM_VERSION_1_4, macro in nm-version-macros </dt> <dd></dd> @@ -14329,11 +14361,11 @@ NM_VERSION_NEXT_STABLE, macro in nm-version-macros </dt> <dd></dd> <dt> -NM_VPN_DBUS_PLUGIN_INTERFACE, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS">NM_VPN_DBUS_PLUGIN_INTERFACE</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_DBUS_PLUGIN_PATH, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS">NM_VPN_DBUS_PLUGIN_PATH</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -14401,27 +14433,27 @@ NM_VPN_DBUS_PLUGIN_PATH, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CAN_PERSIST, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS">NM_VPN_PLUGIN_CAN_PERSIST</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_BANNER, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS">NM_VPN_PLUGIN_CONFIG_BANNER</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS">NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_HAS_IP4, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS">NM_VPN_PLUGIN_CONFIG_HAS_IP4</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_HAS_IP6, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS">NM_VPN_PLUGIN_CONFIG_HAS_IP6</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_MTU, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS">NM_VPN_PLUGIN_CONFIG_MTU</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -14429,7 +14461,7 @@ NM_VPN_PLUGIN_CONFIG_PROXY_PAC, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_CONFIG_TUNDEV, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS">NM_VPN_PLUGIN_CONFIG_TUNDEV</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -14565,55 +14597,55 @@ NM_VPN_PLUGIN_CONFIG_TUNDEV, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_BANNER, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_BANNER</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_DNS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_DNS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_MSS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_MSS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_MTU, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_MTU</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_NBNS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_NBNS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -14621,47 +14653,47 @@ NM_VPN_PLUGIN_IP4_CONFIG_PRESERVE_ROUTES, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_PTP, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_PTP</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_ROUTES, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS">NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_DNS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_DNS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_MSS, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_MSS</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_PREFIX, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -14669,11 +14701,11 @@ NM_VPN_PLUGIN_IP6_CONFIG_PRESERVE_ROUTES, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_PTP, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_PTP</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> -NM_VPN_PLUGIN_IP6_CONFIG_ROUTES, macro in nm-vpn-dbus-interface +<a href="/usr/share/gtk-doc/html/libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS">NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</a>, macro in nm-vpn-dbus-interface </dt> <dd></dd> <dt> @@ -15039,6 +15071,6 @@ NM_VPN_PLUGIN_IP6_CONFIG_ROUTES, macro in nm-vpn-dbus-interface <dd></dd> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ch02.html b/docs/libnm/html/ch02.html index bd869fe5..47a7dab8 100644 --- a/docs/libnm/html/ch02.html +++ b/docs/libnm/html/ch02.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="usage.html" title="Using libnm"> <link rel="next" href="NMClient.html" title="NMClient"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -41,6 +41,6 @@ </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ch03.html b/docs/libnm/html/ch03.html index ae4cdf94..a6d653a4 100644 --- a/docs/libnm/html/ch03.html +++ b/docs/libnm/html/ch03.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface"> <link rel="next" href="NMConnection.html" title="NMConnection"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -201,6 +201,6 @@ use WEP, LEAP, WPA or WPA2/RSN security</span> </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ch04.html b/docs/libnm/html/ch04.html index 66672854..bc92ddc7 100644 --- a/docs/libnm/html/ch04.html +++ b/docs/libnm/html/ch04.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="NMSettingWpan.html" title="NMSettingWpan"> <link rel="next" href="NMDevice.html" title="NMDevice"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -140,6 +140,6 @@ </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ch05.html b/docs/libnm/html/ch05.html index 68c1a7fa..1fabc6fc 100644 --- a/docs/libnm/html/ch05.html +++ b/docs/libnm/html/ch05.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="NMCheckpoint.html" title="NMCheckpoint"> <link rel="next" href="libnm-nm-keyfile.html" title="nm-keyfile"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -35,6 +35,6 @@ </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ch06.html b/docs/libnm/html/ch06.html index 5ba90006..b8bcee8a 100644 --- a/docs/libnm/html/ch06.html +++ b/docs/libnm/html/ch06.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="libnm-nm-version.html" title="nm-version"> <link rel="next" href="NMVpnServicePlugin.html" title="NMVpnServicePlugin"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -41,6 +41,6 @@ </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html index fef68d26..4299ae49 100644 --- a/docs/libnm/html/index.html +++ b/docs/libnm/html/index.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"> <link rel="home" href="index.html" title="libnm Reference Manual"> <link rel="next" href="ref-overview.html" title="Overview"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for libnm 1.36.4 + for libnm 1.37.92 The latest version of this documentation can be found on-line at <a class="ulink" href="https://networkmanager.dev/docs/libnm/latest/" target="_top">https://networkmanager.dev/docs/libnm/latest/</a>. @@ -402,6 +402,6 @@ use WEP, LEAP, WPA or WPA2/RSN security</span> </dl></div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm-nm-dbus-interface.html b/docs/libnm/html/libnm-nm-dbus-interface.html index 4bd66473..e7ca0035 100644 --- a/docs/libnm/html/libnm-nm-dbus-interface.html +++ b/docs/libnm/html/libnm-nm-dbus-interface.html @@ -8,7 +8,7 @@ <link rel="up" href="ch02.html" title="Client Object API Reference"> <link rel="prev" href="libnm-nm-errors.html" title="nm-errors"> <link rel="next" href="ch03.html" title="Connection and Setting API Reference"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -508,6 +508,10 @@ <td class="datatype_keyword">enum</td> <td class="function_name"><a class="link" href="libnm-nm-dbus-interface.html#NMClientPermissionResult" title="enum NMClientPermissionResult">NMClientPermissionResult</a></td> </tr> +<tr> +<td class="datatype_keyword">enum</td> +<td class="function_name"><a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags">NMRadioFlags</a></td> +</tr> </tbody> </table></div> </div> @@ -541,6 +545,7 @@ <span class="lineart">├──</span> NMDeviceModemCapabilities <span class="lineart">├──</span> NMDeviceWifiCapabilities <span class="lineart">├──</span> NMManagerReloadFlags + <span class="lineart">├──</span> NMRadioFlags <span class="lineart">├──</span> NMSecretAgentCapabilities <span class="lineart">├──</span> NMSecretAgentGetSecretsFlags <span class="lineart">├──</span> NMSettingsAddConnection2Flags @@ -3294,8 +3299,8 @@ of an older checkpoint. Since: 1.12.</p> <p>during rollback, by default externally added ports attached to bridge devices are preserved. With this flag, the rollback detaches all external ports. -This only has an effect for bridge ports. Before 1.38, 1.36.2, this was the default -behavior. Since: 1.38, 1.36.2.</p> +This only has an effect for bridge ports. Before 1.38, this was the default +behavior. Since: 1.38.</p> </td> <td class="enum_member_annotations"> </td> </tr> @@ -4038,9 +4043,50 @@ denied by system policy</p> </table></div> </div> </div> +<hr> +<div class="refsect2"> +<a name="NMRadioFlags"></a><h3>enum NMRadioFlags</h3> +<p>Flags related to radio interfaces.</p> +<div class="refsect3"> +<a name="NMRadioFlags.members"></a><h4>Members</h4> +<div class="informaltable"><table class="informaltable" width="100%" border="0"> +<colgroup> +<col width="300px" class="enum_members_name"> +<col class="enum_members_description"> +<col width="200px" class="enum_members_annotations"> +</colgroup> +<tbody> +<tr> +<td class="enum_member_name"><p><a name="NM-RADIO-FLAG-NONE:CAPS"></a>NM_RADIO_FLAG_NONE</p></td> +<td class="enum_member_description"> +<p>an alias for numeric zero, no flags set.</p> +</td> +<td class="enum_member_annotations"> </td> +</tr> +<tr> +<td class="enum_member_name"><p><a name="NM-RADIO-FLAG-WLAN-AVAILABLE:CAPS"></a>NM_RADIO_FLAG_WLAN_AVAILABLE</p></td> +<td class="enum_member_description"> +<p>A Wireless LAN device or rfkill switch +is detected in the system.</p> +</td> +<td class="enum_member_annotations"> </td> +</tr> +<tr> +<td class="enum_member_name"><p><a name="NM-RADIO-FLAG-WWAN-AVAILABLE:CAPS"></a>NM_RADIO_FLAG_WWAN_AVAILABLE</p></td> +<td class="enum_member_description"> +<p>A Wireless WAN device or rfkill switch +is detected in the system.</p> +</td> +<td class="enum_member_annotations"> </td> +</tr> +</tbody> +</table></div> +</div> +<p class="since">Since: 1.38</p> +</div> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm-nm-errors.html b/docs/libnm/html/libnm-nm-errors.html index c4575070..7e8b4ede 100644 --- a/docs/libnm/html/libnm-nm-errors.html +++ b/docs/libnm/html/libnm-nm-errors.html @@ -8,7 +8,7 @@ <link rel="up" href="ch02.html" title="Client Object API Reference"> <link rel="prev" href="NMObject.html" title="NMObject"> <link rel="next" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -254,7 +254,7 @@ nm_vpn_plugin_error_quark (<em class="parameter"><code><span class="type">void</ <a name="NMAgentManagerError"></a><h3>enum NMAgentManagerError</h3> <p>Errors returned from the secret-agent manager.</p> <p>These errors may be returned from operations that could cause secrets to be -requested (such as <code class="function">nm_client_activate_connection()</code>), and correspond to D-Bus +requested (such as <a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#nm-client-activate-connection"><code class="function">nm_client_activate_connection()</code></a>), and correspond to D-Bus errors in the "org.freedesktop.NetworkManager.AgentManager" namespace.</p> <div class="refsect3"> <a name="NMAgentManagerError.members"></a><h4>Members</h4> @@ -326,7 +326,7 @@ request</p> <div class="refsect2"> <a name="NMConnectionError"></a><h3>enum NMConnectionError</h3> <p>Describes errors that may result from operations involving a <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> -or its <span class="type">NMSettings</span>.</p> +or its <a href="/usr/share/gtk-doc/html/libnm-util/NMSetting.html#NMSetting-struct"><span class="type">NMSettings</span></a>.</p> <p>These errors may be returned directly from <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> and <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> methods, or may be returned from D-Bus operations (eg on <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> or <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>), where they correspond to errors in the @@ -737,7 +737,7 @@ activation but is not available.</p> when they encounter problems retrieving secrets on behalf of NM. They correspond to errors in the "org.freedesktop.NetworkManager.SecretManager" namespace.</p> -<p>Client APIs such as <code class="function">nm_client_activate_connection()</code> will not see these error +<p>Client APIs such as <a href="/usr/share/gtk-doc/html/libnm-glib/NMClient.html#nm-client-activate-connection"><code class="function">nm_client_activate_connection()</code></a> will not see these error codes; instead, the secret agent manager will translate them to the corresponding <a class="link" href="libnm-nm-errors.html#NMAgentManagerError" title="enum NMAgentManagerError"><span class="type">NMAgentManagerError</span></a> codes.</p> <div class="refsect3"> @@ -998,6 +998,6 @@ performed as the plugin does not support interactive operations, such as </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm-nm-keyfile.html b/docs/libnm/html/libnm-nm-keyfile.html index 21a6d7d3..5d0967d5 100644 --- a/docs/libnm/html/libnm-nm-keyfile.html +++ b/docs/libnm/html/libnm-nm-keyfile.html @@ -8,7 +8,7 @@ <link rel="up" href="ch05.html" title="Utility API Reference"> <link rel="prev" href="ch05.html" title="Utility API Reference"> <link rel="next" href="libnm-nm-utils.html" title="nm-utils"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -259,7 +259,7 @@ be an absolute path.</p></td> <div class="refsect3"> <a name="nm-keyfile-read.returns"></a><h4>Returns</h4> <p>on success, returns the created connection. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -340,8 +340,10 @@ nm_keyfile_write (<em class="parameter"><code><a class="link" href="NMConnection <em class="parameter"><code><span class="type">void</span> *user_data</code></em>, <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre> <p><em class="parameter"><code>connection</code></em> - must verify as a valid profile according to -<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>.</p> + should verify as a valid profile according to +<a class="link" href="NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</code></a>. If it does not verify, the keyfile may +be incomplete and the parser may not be able to fully recreate +the original profile.</p> <div class="refsect3"> <a name="nm-keyfile-write.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -384,7 +386,7 @@ to override the default behavior. </p></td> <div class="refsect3"> <a name="nm-keyfile-write.returns"></a><h4>Returns</h4> <p>a new <a href="https://developer.gnome.org/glib/unstable/glib-Key-value-file-parser.html#GKeyFile"><span class="type">GKeyFile</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.30</p> </div> @@ -420,7 +422,7 @@ after calling this function on it.</p> <tr> <td class="parameter_name"><p>src</p></td> <td class="parameter_description"><p>error to move into the return location. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -456,24 +458,24 @@ on all events, but the context information may be unset.</p> <td class="parameter_name"><p>out_kf_group_name</p></td> <td class="parameter_description"><p>if the event is in the context of a keyfile group, the group name. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_kf_key_name</p></td> <td class="parameter_description"><p>if the event is in the context of a keyfile value, the key name. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_cur_setting</p></td> <td class="parameter_description"><p>if the event happens while handling a particular <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> instance. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_cur_property_name</p></td> <td class="parameter_description"><p>the property name if applicable. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -505,7 +507,7 @@ event.</p></td> <tr> <td class="parameter_name"><p>out_message</p></td> <td class="parameter_description"><p>the warning message. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> <tr> <td class="parameter_name"><p>out_severity</p></td> @@ -634,6 +636,6 @@ depends on the <a class="link" href="libnm-nm-keyfile.html#NMKeyfileHandlerType" </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm-nm-utils.html b/docs/libnm/html/libnm-nm-utils.html index e67dbdca..0d733cd1 100644 --- a/docs/libnm/html/libnm-nm-utils.html +++ b/docs/libnm/html/libnm-nm-utils.html @@ -8,7 +8,7 @@ <link rel="up" href="ch05.html" title="Utility API Reference"> <link rel="prev" href="libnm-nm-keyfile.html" title="nm-keyfile"> <link rel="next" href="libnm-nm-version.html" title="nm-version"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -276,30 +276,6 @@ <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> </td> <td class="function_name"> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</a> <span class="c_punctuation">()</span> -</td> -</tr> -<tr> -<td class="function_type"> -<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -</td> -<td class="function_name"> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a> <span class="c_punctuation">()</span> -</td> -</tr> -<tr> -<td class="function_type"> -<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -</td> -<td class="function_name"> -<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-pkcs12" title="nm_utils_file_is_pkcs12 ()">nm_utils_file_is_pkcs12</a> <span class="c_punctuation">()</span> -</td> -</tr> -<tr> -<td class="function_type"> -<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -</td> -<td class="function_name"> <span class="c_punctuation">(</span><a class="link" href="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()">*NMUtilsFileSearchInPathsPredicate</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span> </td> </tr> @@ -877,7 +853,7 @@ _only_.</p> <p>an allocated string containing a UTF-8 representation of the SSID, which must be freed by the caller using <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>. Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on errors. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -1124,7 +1100,7 @@ type 'au' representing an array of IPv4 addresses.</p> <a name="nm-utils-ip4-dns-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>dns</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1152,7 +1128,7 @@ IPv4 addresses into an array of IP address strings.</p> <div class="refsect3"> <a name="nm-utils-ip4-dns-from-variant.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of IP address strings. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span></p> </div> </div> <hr> @@ -1193,7 +1169,7 @@ gateway). The "gateway" field of the first address will get the value of <a name="nm-utils-ip4-addresses-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1225,7 +1201,7 @@ of the other addresses are ignored.</p> <tr> <td class="parameter_name"><p>out_gateway</p></td> <td class="parameter_description"><p>on return, will contain the IP gateway. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1234,7 +1210,7 @@ of the other addresses are ignored.</p> <a name="nm-utils-ip4-addresses-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> </div> </div> <hr> @@ -1265,7 +1241,7 @@ metric).</p> <a name="nm-utils-ip4-routes-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1295,7 +1271,7 @@ and metric) into a <a href="https://developer.gnome.org/glib/unstable/glib-Point <a name="nm-utils-ip4-routes-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> </div> </div> <hr> @@ -1404,7 +1380,7 @@ type 'aay' representing an array of IPv6 addresses.</p> <a name="nm-utils-ip6-dns-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>dns</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1434,7 +1410,7 @@ ignored.</p> <div class="refsect3"> <a name="nm-utils-ip6-dns-from-variant.returns"></a><h4>Returns</h4> <p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of IP address strings. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span></p> </div> </div> <hr> @@ -1476,7 +1452,7 @@ all 0s.</p> <a name="nm-utils-ip6-addresses-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1508,7 +1484,7 @@ fields of the other addresses are ignored.</p> <tr> <td class="parameter_name"><p>out_gateway</p></td> <td class="parameter_description"><p>on return, will contain the IP gateway. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -1517,7 +1493,7 @@ fields of the other addresses are ignored.</p> <a name="nm-utils-ip6-addresses-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> </div> </div> <hr> @@ -1548,7 +1524,7 @@ metric).</p> <a name="nm-utils-ip6-routes-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1578,7 +1554,7 @@ hop, and metric) into a <a href="https://developer.gnome.org/glib/unstable/glib- <a name="nm-utils-ip6-routes-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> </div> </div> <hr> @@ -1610,7 +1586,7 @@ include additional attributes.</p> <a name="nm-utils-ip-addresses-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1649,7 +1625,7 @@ objects.</p> <a name="nm-utils-ip-addresses-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span></p> </div> </div> <hr> @@ -1680,7 +1656,7 @@ prefix, next hop, metric, and additional attributes).</p> <a name="nm-utils-ip-routes-to-variant.returns"></a><h4>Returns</h4> <p>a new floating <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</code></em> . </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -1719,7 +1695,7 @@ prefix, next hop, metric, and additional attributes) into a <a href="https://dev <a name="nm-utils-ip-routes-from-variant.returns"></a><h4>Returns</h4> <p>a newly allocated <a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span></p> </div> </div> <hr> @@ -1730,100 +1706,7 @@ nm_utils_uuid_generate (<em class="parameter"><code><span class="type">void</spa <div class="refsect3"> <a name="nm-utils-uuid-generate.returns"></a><h4>Returns</h4> <p> a newly allocated UUID suitable for use as the <a class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> -object's <span class="type">“id”</span>: property. Should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a></p> -</div> -</div> -<hr> -<div class="refsect2"> -<a name="nm-utils-file-is-certificate"></a><h3>nm_utils_file_is_certificate ()</h3> -<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -nm_utils_file_is_certificate (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre> -<p>Tests if <em class="parameter"><code>filename</code></em> - has a valid extension for an X.509 certificate file -(".cer", ".crt", ".der", or ".pem"), and contains a certificate in a format -recognized by NetworkManager.</p> -<div class="refsect3"> -<a name="nm-utils-file-is-certificate.parameters"></a><h4>Parameters</h4> -<div class="informaltable"><table class="informaltable" width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody><tr> -<td class="parameter_name"><p>filename</p></td> -<td class="parameter_description"><p>name of the file to test</p></td> -<td class="parameter_annotations"> </td> -</tr></tbody> -</table></div> -</div> -<div class="refsect3"> -<a name="nm-utils-file-is-certificate.returns"></a><h4>Returns</h4> -<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is a certificate, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> -</div> -</div> -<hr> -<div class="refsect2"> -<a name="nm-utils-file-is-private-key"></a><h3>nm_utils_file_is_private_key ()</h3> -<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -nm_utils_file_is_private_key (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>, - <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *out_encrypted</code></em>);</pre> -<p>Tests if <em class="parameter"><code>filename</code></em> - has a valid extension for an X.509 private key file -(".der", ".key", ".pem", or ".p12"), and contains a private key in a format -recognized by NetworkManager.</p> -<div class="refsect3"> -<a name="nm-utils-file-is-private-key.parameters"></a><h4>Parameters</h4> -<div class="informaltable"><table class="informaltable" width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody> -<tr> -<td class="parameter_name"><p>filename</p></td> -<td class="parameter_description"><p>name of the file to test</p></td> -<td class="parameter_annotations"> </td> -</tr> -<tr> -<td class="parameter_name"><p>out_encrypted</p></td> -<td class="parameter_description"><p>on return, whether the file is encrypted. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> -</tr> -</tbody> -</table></div> -</div> -<div class="refsect3"> -<a name="nm-utils-file-is-private-key.returns"></a><h4>Returns</h4> -<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is a private key, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> -</div> -</div> -<hr> -<div class="refsect2"> -<a name="nm-utils-file-is-pkcs12"></a><h3>nm_utils_file_is_pkcs12 ()</h3> -<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> -nm_utils_file_is_pkcs12 (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre> -<p>Tests if <em class="parameter"><code>filename</code></em> - is a PKCS#12 file.</p> -<div class="refsect3"> -<a name="nm-utils-file-is-pkcs12.parameters"></a><h4>Parameters</h4> -<div class="informaltable"><table class="informaltable" width="100%" border="0"> -<colgroup> -<col width="150px" class="parameters_name"> -<col class="parameters_description"> -<col width="200px" class="parameters_annotations"> -</colgroup> -<tbody><tr> -<td class="parameter_name"><p>filename</p></td> -<td class="parameter_description"><p>name of the file to test</p></td> -<td class="parameter_annotations"> </td> -</tr></tbody> -</table></div> -</div> -<div class="refsect3"> -<a name="nm-utils-file-is-pkcs12.returns"></a><h4>Returns</h4> -<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the file is PKCS#12, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is not</p> +object's <a href="/usr/share/gtk-doc/html/libnm-util/NMSettingConnection.html#NMSettingConnection--id"><span class="type">“id”</span></a>: property. Should be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a></p> </div> </div> <hr> @@ -1920,7 +1803,7 @@ function. </p></td> <p>the full path to the helper, if found, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found. The returned string is not owned by the caller, but later invocations of the function might overwrite it. </p> -<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The data is owned by the callee, which is responsible of freeing it."><span class="acronym">transfer none</span></acronym>]</span></p> </div> </div> <hr> @@ -2180,7 +2063,7 @@ nm_utils_hwaddr_ntoa (<em class="parameter"><code><a href="https://developer.gno <a name="nm-utils-hwaddr-ntoa.returns"></a><h4>Returns</h4> <p>the textual form of <em class="parameter"><code>addr</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2219,7 +2102,7 @@ nm_utils_hwaddr_atoba (<em class="parameter"><code>const <span class="type">char <p>a new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GByteArray"><span class="type">GByteArray</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>asc</code></em> couldn't be parsed. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2350,7 +2233,7 @@ is expected to convert to <p>the canonicalized address if <em class="parameter"><code>asc</code></em> appears to be a valid hardware address of the indicated length, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2480,7 +2363,7 @@ array</p></td> <a name="nm-utils-bin2hexstr.returns"></a><h4>Returns</h4> <p>the textual form of <em class="parameter"><code>bytes</code></em> . </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2513,7 +2396,7 @@ may not start or end with ':'.</p> <div class="refsect3"> <a name="nm-utils-hexstr2bin.returns"></a><h4>Returns</h4> <p>the converted bytes, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> </div> <hr> @@ -2951,7 +2834,7 @@ containing the unrecognized token in <em class="parameter"><code>err_token</code <tr> <td class="parameter_name"><p>err_token</p></td> <td class="parameter_description"><p>location to store the first unrecognized token. </p></td> -<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td> +<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></td> </tr> </tbody> </table></div> @@ -3001,7 +2884,7 @@ nm_utils_enum_get_values (<em class="parameter"><code><a href="https://developer <a name="nm-utils-enum-get-values.returns"></a><h4>Returns</h4> <p>a NULL-terminated dynamically-allocated array of static strings or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p> -<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data container, but not the data inside it."><span class="acronym">transfer container</span></acronym>]</span></p> </div> <p class="since">Since: 1.2</p> </div> @@ -3076,7 +2959,7 @@ nm_utils_parse_variant_attributes (<em class="parameter"><code>const <span class attribute names to <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> values. Warning: the variant are still floating references, owned by the hash table. If you take a reference, ensure to sink the one of the hash table first. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GVariant]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GVariant]</span></p> </div> <p class="since">Since: 1.8</p> </div> @@ -3377,7 +3260,7 @@ nm_utils_sriov_vf_from_str (<em class="parameter"><code>const <span class="type" <div class="refsect3"> <a name="nm-utils-sriov-vf-from-str.returns"></a><h4>Returns</h4> <p>the virtual function object. </p> -<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p> +<p><span class="annotation">[<acronym title="The caller owns the data, and is responsible for free it."><span class="acronym">transfer full</span></acronym>]</span></p> </div> <p class="since">Since: 1.14</p> </div> @@ -3574,6 +3457,6 @@ for both <a class="link" href="libnm-nm-utils.html#nm-utils-inet4-ntop" title="n </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm-nm-version.html b/docs/libnm/html/libnm-nm-version.html index da7e635e..bfe553b1 100644 --- a/docs/libnm/html/libnm-nm-version.html +++ b/docs/libnm/html/libnm-nm-version.html @@ -8,7 +8,7 @@ <link rel="up" href="ch05.html" title="Utility API Reference"> <link rel="prev" href="libnm-nm-utils.html" title="nm-utils"> <link rel="next" href="ch06.html" title="VPN Plugin API Reference"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -161,6 +161,12 @@ <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-36-FOR:CAPS" title="NM_DEPRECATED_IN_1_36_FOR()">NM_DEPRECATED_IN_1_36_FOR</a><span class="c_punctuation">()</span> </td> </tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"> +<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-38-FOR:CAPS" title="NM_DEPRECATED_IN_1_38_FOR()">NM_DEPRECATED_IN_1_38_FOR</a><span class="c_punctuation">()</span> +</td> +</tr> </tbody> </table></div> </div> @@ -340,6 +346,14 @@ <td class="define_keyword">#define</td> <td class="function_name"><a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-36:CAPS" title="NM_AVAILABLE_IN_1_36">NM_AVAILABLE_IN_1_36</a></td> </tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-38:CAPS" title="NM_DEPRECATED_IN_1_38">NM_DEPRECATED_IN_1_38</a></td> +</tr> +<tr> +<td class="define_keyword">#define</td> +<td class="function_name"><a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-38:CAPS" title="NM_AVAILABLE_IN_1_38">NM_AVAILABLE_IN_1_38</a></td> +</tr> </tbody> </table></div> </div> @@ -467,6 +481,12 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> <pre class="programlisting">#define NM_DEPRECATED_IN_1_36_FOR(f) G_DEPRECATED_FOR(f) </pre> </div> +<hr> +<div class="refsect2"> +<a name="NM-DEPRECATED-IN-1-38-FOR:CAPS"></a><h3>NM_DEPRECATED_IN_1_38_FOR()</h3> +<pre class="programlisting">#define NM_DEPRECATED_IN_1_38_FOR(f) G_DEPRECATED_FOR(f) +</pre> +</div> </div> <div class="refsect1"> <a name="libnm-nm-version.other_details"></a><h2>Types and Values</h2> @@ -719,9 +739,21 @@ NM_DEPRECATED_IN_1_24_FOR ();</pre> <pre class="programlisting">#define NM_AVAILABLE_IN_1_36 G_UNAVAILABLE(1, 36) </pre> </div> +<hr> +<div class="refsect2"> +<a name="NM-DEPRECATED-IN-1-38:CAPS"></a><h3>NM_DEPRECATED_IN_1_38</h3> +<pre class="programlisting">#define NM_DEPRECATED_IN_1_38 G_DEPRECATED +</pre> +</div> +<hr> +<div class="refsect2"> +<a name="NM-AVAILABLE-IN-1-38:CAPS"></a><h3>NM_AVAILABLE_IN_1_38</h3> +<pre class="programlisting">#define NM_AVAILABLE_IN_1_38 G_UNAVAILABLE(1, 38) +</pre> +</div> </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/libnm.devhelp2 b/docs/libnm/html/libnm.devhelp2 index 2630fb6e..2fcd9cdf 100644 --- a/docs/libnm/html/libnm.devhelp2 +++ b/docs/libnm/html/libnm.devhelp2 @@ -162,6 +162,7 @@ <keyword type="function" name="nm_client_wimax_get_enabled ()" link="NMClient.html#nm-client-wimax-get-enabled" deprecated="1.22: This function always returns FALSE because WiMax is no longer supported."/> <keyword type="function" name="nm_client_wimax_set_enabled ()" link="NMClient.html#nm-client-wimax-set-enabled" deprecated="1.22: This function does nothing because WiMax is no longer supported."/> <keyword type="function" name="nm_client_wimax_hardware_get_enabled ()" link="NMClient.html#nm-client-wimax-hardware-get-enabled" deprecated="1.22: This function always returns FALSE because WiMax is no longer supported."/> + <keyword type="function" name="nm_client_get_radio_flags ()" link="NMClient.html#nm-client-get-radio-flags" since="1.38"/> <keyword type="function" name="nm_client_connectivity_check_get_available ()" link="NMClient.html#nm-client-connectivity-check-get-available" since="1.10"/> <keyword type="function" name="nm_client_connectivity_check_get_enabled ()" link="NMClient.html#nm-client-connectivity-check-get-enabled" since="1.10"/> <keyword type="function" name="nm_client_connectivity_check_set_enabled ()" link="NMClient.html#nm-client-connectivity-check-set-enabled" deprecated="" since="1.10"/> @@ -226,6 +227,9 @@ <keyword type="function" name="nm_client_dbus_set_property ()" link="NMClient.html#nm-client-dbus-set-property" since="1.24"/> <keyword type="function" name="nm_client_dbus_set_property_finish ()" link="NMClient.html#nm-client-dbus-set-property-finish" since="1.24"/> <keyword type="function" name="nm_utils_print ()" link="NMClient.html#nm-utils-print" since="1.30"/> + <keyword type="function" name="nm_utils_file_is_certificate ()" link="NMClient.html#nm-utils-file-is-certificate"/> + <keyword type="function" name="nm_utils_file_is_private_key ()" link="NMClient.html#nm-utils-file-is-private-key"/> + <keyword type="function" name="nm_utils_file_is_pkcs12 ()" link="NMClient.html#nm-utils-file-is-pkcs12"/> <keyword type="enum" name="enum NMClientInstanceFlags" link="NMClient.html#NMClientInstanceFlags" since="1.24"/> <keyword type="macro" name="NM_CLIENT_VERSION" link="NMClient.html#NM-CLIENT-VERSION:CAPS"/> <keyword type="macro" name="NM_CLIENT_STATE" link="NMClient.html#NM-CLIENT-STATE:CAPS"/> @@ -241,6 +245,7 @@ <keyword type="macro" name="NM_CLIENT_WIRELESS_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS"/> <keyword type="macro" name="NM_CLIENT_WWAN_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS"/> <keyword type="macro" name="NM_CLIENT_WIMAX_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS"/> + <keyword type="macro" name="NM_CLIENT_RADIO_FLAGS" link="NMClient.html#NM-CLIENT-RADIO-FLAGS:CAPS"/> <keyword type="macro" name="NM_CLIENT_ACTIVE_CONNECTIONS" link="NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS"/> <keyword type="macro" name="NM_CLIENT_CONNECTIVITY" link="NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS"/> <keyword type="macro" name="NM_CLIENT_CONNECTIVITY_CHECK_URI" link="NMClient.html#NM-CLIENT-CONNECTIVITY-CHECK-URI:CAPS"/> @@ -446,6 +451,7 @@ <keyword type="enum" name="enum NMDeviceInterfaceFlags" link="libnm-nm-dbus-interface.html#NMDeviceInterfaceFlags" since="1.22"/> <keyword type="enum" name="enum NMClientPermission" link="libnm-nm-dbus-interface.html#NMClientPermission"/> <keyword type="enum" name="enum NMClientPermissionResult" link="libnm-nm-dbus-interface.html#NMClientPermissionResult"/> + <keyword type="enum" name="enum NMRadioFlags" link="libnm-nm-dbus-interface.html#NMRadioFlags" since="1.38"/> <keyword type="function" name="nm_connection_add_setting ()" link="NMConnection.html#nm-connection-add-setting"/> <keyword type="function" name="nm_connection_remove_setting ()" link="NMConnection.html#nm-connection-remove-setting"/> <keyword type="function" name="nm_connection_get_setting ()" link="NMConnection.html#nm-connection-get-setting"/> @@ -2602,9 +2608,6 @@ <keyword type="function" name="nm_utils_ip_routes_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip-routes-to-variant"/> <keyword type="function" name="nm_utils_ip_routes_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip-routes-from-variant"/> <keyword type="function" name="nm_utils_uuid_generate ()" link="libnm-nm-utils.html#nm-utils-uuid-generate"/> - <keyword type="function" name="nm_utils_file_is_certificate ()" link="libnm-nm-utils.html#nm-utils-file-is-certificate"/> - <keyword type="function" name="nm_utils_file_is_private_key ()" link="libnm-nm-utils.html#nm-utils-file-is-private-key"/> - <keyword type="function" name="nm_utils_file_is_pkcs12 ()" link="libnm-nm-utils.html#nm-utils-file-is-pkcs12"/> <keyword type="function" name="NMUtilsFileSearchInPathsPredicate ()" link="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate"/> <keyword type="function" name="NMUtilsCheckFilePredicate ()" link="libnm-nm-utils.html#NMUtilsCheckFilePredicate"/> <keyword type="function" name="nm_utils_file_search_in_paths ()" link="libnm-nm-utils.html#nm-utils-file-search-in-paths"/> @@ -2675,6 +2678,7 @@ <keyword type="macro" name="NM_DEPRECATED_IN_1_32_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-32-FOR:CAPS"/> <keyword type="macro" name="NM_DEPRECATED_IN_1_34_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-34-FOR:CAPS"/> <keyword type="macro" name="NM_DEPRECATED_IN_1_36_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-36-FOR:CAPS"/> + <keyword type="macro" name="NM_DEPRECATED_IN_1_38_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-38-FOR:CAPS"/> <keyword type="macro" name="NM_VERSION_MIN_REQUIRED" link="libnm-nm-version.html#NM-VERSION-MIN-REQUIRED:CAPS"/> <keyword type="macro" name="NM_VERSION_MAX_ALLOWED" link="libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS"/> <keyword type="macro" name="NM_DEPRECATED_IN_0_9_10" link="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS"/> @@ -2717,6 +2721,8 @@ <keyword type="macro" name="NM_AVAILABLE_IN_1_34" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-34:CAPS"/> <keyword type="macro" name="NM_DEPRECATED_IN_1_36" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-36:CAPS"/> <keyword type="macro" name="NM_AVAILABLE_IN_1_36" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-36:CAPS"/> + <keyword type="macro" name="NM_DEPRECATED_IN_1_38" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-38:CAPS"/> + <keyword type="macro" name="NM_AVAILABLE_IN_1_38" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-38:CAPS"/> <keyword type="function" name="nm_vpn_service_plugin_get_connection ()" link="NMVpnServicePlugin.html#nm-vpn-service-plugin-get-connection" since="1.2"/> <keyword type="function" name="nm_vpn_service_plugin_secrets_required ()" link="NMVpnServicePlugin.html#nm-vpn-service-plugin-secrets-required" since="1.2"/> <keyword type="function" name="nm_vpn_service_plugin_set_login_banner ()" link="NMVpnServicePlugin.html#nm-vpn-service-plugin-set-login-banner"/> @@ -3212,6 +3218,9 @@ <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_YES" link="libnm-nm-dbus-interface.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS"/> <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_AUTH" link="libnm-nm-dbus-interface.html#NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS"/> <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_NO" link="libnm-nm-dbus-interface.html#NM-CLIENT-PERMISSION-RESULT-NO:CAPS"/> + <keyword type="constant" name="NM_RADIO_FLAG_NONE" link="libnm-nm-dbus-interface.html#NM-RADIO-FLAG-NONE:CAPS"/> + <keyword type="constant" name="NM_RADIO_FLAG_WLAN_AVAILABLE" link="libnm-nm-dbus-interface.html#NM-RADIO-FLAG-WLAN-AVAILABLE:CAPS"/> + <keyword type="constant" name="NM_RADIO_FLAG_WWAN_AVAILABLE" link="libnm-nm-dbus-interface.html#NM-RADIO-FLAG-WWAN-AVAILABLE:CAPS"/> <keyword type="constant" name="NM_CONNECTION_SERIALIZE_ALL" link="NMConnection.html#NM-CONNECTION-SERIALIZE-ALL:CAPS"/> <keyword type="constant" name="NM_CONNECTION_SERIALIZE_WITH_NON_SECRET" link="NMConnection.html#NM-CONNECTION-SERIALIZE-WITH-NON-SECRET:CAPS"/> <keyword type="constant" name="NM_CONNECTION_SERIALIZE_NO_SECRETS" link="NMConnection.html#NM-CONNECTION-SERIALIZE-NO-SECRETS:CAPS"/> diff --git a/docs/libnm/html/license.html b/docs/libnm/html/license.html index 490c9412..207a9d49 100644 --- a/docs/libnm/html/license.html +++ b/docs/libnm/html/license.html @@ -7,7 +7,7 @@ <link rel="home" href="index.html" title="libnm Reference Manual"> <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="annotation-glossary.html" title="Annotation Glossary"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -55,6 +55,6 @@ </p> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/object-tree.html b/docs/libnm/html/object-tree.html index 0c874eae..bca609ec 100644 --- a/docs/libnm/html/object-tree.html +++ b/docs/libnm/html/object-tree.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="NMVpnPluginOld.html" title="NMVpnPluginOld"> <link rel="next" href="api-index-full.html" title="API Index"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -146,6 +146,7 @@ <span class="lineart">├──</span> <a class="link" href="NMSettingIPTunnel.html#NMIPTunnelFlags" title="enum NMIPTunnelFlags">NMIPTunnelFlags</a> <span class="lineart">├──</span> <a class="link" href="libnm-nm-keyfile.html#NMKeyfileHandlerFlags" title="enum NMKeyfileHandlerFlags">NMKeyfileHandlerFlags</a> <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMManagerReloadFlags" title="enum NMManagerReloadFlags">NMManagerReloadFlags</a> + <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMRadioFlags" title="enum NMRadioFlags">NMRadioFlags</a> <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities" title="enum NMSecretAgentCapabilities">NMSecretAgentCapabilities</a> <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags" title="enum NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a> <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xAuthFlags" title="enum NMSetting8021xAuthFlags">NMSetting8021xAuthFlags</a> @@ -233,6 +234,6 @@ </pre> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/ref-overview.html b/docs/libnm/html/ref-overview.html index b0c7a2ef..25f70fa1 100644 --- a/docs/libnm/html/ref-overview.html +++ b/docs/libnm/html/ref-overview.html @@ -8,7 +8,7 @@ <link rel="up" href="index.html" title="libnm Reference Manual"> <link rel="prev" href="index.html" title="libnm Reference Manual"> <link rel="next" href="usage.html" title="Using libnm"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -62,6 +62,6 @@ </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/html/usage.html b/docs/libnm/html/usage.html index 6d2c0654..afb7ceb1 100644 --- a/docs/libnm/html/usage.html +++ b/docs/libnm/html/usage.html @@ -8,7 +8,7 @@ <link rel="up" href="ref-overview.html" title="Overview"> <link rel="prev" href="ref-overview.html" title="Overview"> <link rel="next" href="ch02.html" title="Client Object API Reference"> -<meta name="generator" content="GTK-Doc V1.33.0 (XML mode)"> +<meta name="generator" content="GTK-Doc V1.33.1 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> @@ -96,7 +96,7 @@ </p> <pre class="screen"><code class="prompt">$ </code><strong class="userinput"><code>cc $(pkg-config --libs --cflags libnm) -o hello-nm hello-nm.c</code></strong> <code class="prompt">$ </code><strong class="userinput"><code>./hello-nm</code></strong> - NetworkManager version: 1.36.4 + NetworkManager version: 1.37.92 <code class="prompt">$ </code></pre> <p> @@ -271,6 +271,6 @@ </div> </div> <div class="footer"> -<hr>Generated by GTK-Doc V1.33.0</div> +<hr>Generated by GTK-Doc V1.33.1</div> </body> </html> \ No newline at end of file diff --git a/docs/libnm/libnm-sections.txt b/docs/libnm/libnm-sections.txt index b074456d..50519dfa 100644 --- a/docs/libnm/libnm-sections.txt +++ b/docs/libnm/libnm-sections.txt @@ -130,6 +130,7 @@ NM_CLIENT_WIMAX_ENABLED NM_CLIENT_WIRELESS_HARDWARE_ENABLED NM_CLIENT_WWAN_HARDWARE_ENABLED NM_CLIENT_WIMAX_HARDWARE_ENABLED +NM_CLIENT_RADIO_FLAGS NM_CLIENT_ACTIVE_CONNECTIONS NM_CLIENT_CONNECTIVITY NM_CLIENT_CONNECTIVITY_CHECK_URI @@ -193,6 +194,7 @@ nm_client_wwan_hardware_get_enabled nm_client_wimax_get_enabled nm_client_wimax_set_enabled nm_client_wimax_hardware_get_enabled +nm_client_get_radio_flags nm_client_connectivity_check_get_available nm_client_connectivity_check_get_enabled nm_client_connectivity_check_set_enabled @@ -257,6 +259,9 @@ nm_client_dbus_call_finish nm_client_dbus_set_property nm_client_dbus_set_property_finish nm_utils_print +nm_utils_file_is_certificate +nm_utils_file_is_private_key +nm_utils_file_is_pkcs12 <SUBSECTION Standard> NMClientClass NMDnsEntry @@ -398,6 +403,7 @@ NM_TYPE_KEYFILE_WARN_SEVERITY NM_TYPE_MANAGER_ERROR NM_TYPE_MANAGER_RELOAD_FLAGS NM_TYPE_METERED +NM_TYPE_RADIO_FLAGS NM_TYPE_SECRET_AGENT_CAPABILITIES NM_TYPE_SECRET_AGENT_ERROR NM_TYPE_SECRET_AGENT_GET_SECRETS_FLAGS @@ -478,6 +484,7 @@ nm_keyfile_warn_severity_get_type nm_manager_error_get_type nm_manager_reload_flags_get_type nm_metered_get_type +nm_radio_flags_get_type nm_secret_agent_capabilities_get_type nm_secret_agent_error_get_type nm_secret_agent_get_secrets_flags_get_type @@ -707,6 +714,7 @@ NMManagerReloadFlags NMDeviceInterfaceFlags NMClientPermission NMClientPermissionResult +NMRadioFlags </SECTION> <SECTION> @@ -4331,9 +4339,6 @@ nm_utils_ip_addresses_from_variant nm_utils_ip_routes_to_variant nm_utils_ip_routes_from_variant nm_utils_uuid_generate -nm_utils_file_is_certificate -nm_utils_file_is_private_key -nm_utils_file_is_pkcs12 NMUtilsFileSearchInPathsPredicate NMUtilsCheckFilePredicate nm_utils_file_search_in_paths @@ -4449,6 +4454,9 @@ NM_AVAILABLE_IN_1_34 NM_DEPRECATED_IN_1_36 NM_DEPRECATED_IN_1_36_FOR NM_AVAILABLE_IN_1_36 +NM_DEPRECATED_IN_1_38 +NM_DEPRECATED_IN_1_38_FOR +NM_AVAILABLE_IN_1_38 </SECTION> <SECTION> @@ -4479,6 +4487,7 @@ NM_VERSION_1_30 NM_VERSION_1_32 NM_VERSION_1_34 NM_VERSION_1_36 +NM_VERSION_1_38 NM_API_VERSION NM_VERSION_CUR_STABLE NM_VERSION_NEXT_STABLE diff --git a/docs/libnm/libnm.types b/docs/libnm/libnm.types index d139a532..dac59104 100644 --- a/docs/libnm/libnm.types +++ b/docs/libnm/libnm.types @@ -80,6 +80,7 @@ nm_manager_error_get_type nm_manager_reload_flags_get_type nm_metered_get_type nm_object_get_type +nm_radio_flags_get_type nm_remote_connection_get_type nm_secret_agent_capabilities_get_type nm_secret_agent_error_get_type diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml index 08a6a38d..f2363fea 100644 --- a/docs/libnm/version.xml +++ b/docs/libnm/version.xml @@ -1 +1 @@ -1.36.4 +1.37.92 diff --git a/gtk-doc.make b/gtk-doc.make index 7d9a27f3..c673175d 100644 --- a/gtk-doc.make +++ b/gtk-doc.make @@ -57,6 +57,7 @@ DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ + $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ diff --git a/introspection/org.freedesktop.NetworkManager.AccessPoint.xml b/introspection/org.freedesktop.NetworkManager.AccessPoint.xml index 6edb25ea..7340bda3 100644 --- a/introspection/org.freedesktop.NetworkManager.AccessPoint.xml +++ b/introspection/org.freedesktop.NetworkManager.AccessPoint.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.AccessPoint: - @short_description: Wi-Fi Access Point + @short_description: Wi-Fi Access Point. --> <interface name="org.freedesktop.NetworkManager.AccessPoint"> diff --git a/introspection/org.freedesktop.NetworkManager.AgentManager.xml b/introspection/org.freedesktop.NetworkManager.AgentManager.xml index e5fbd100..66dfea2a 100644 --- a/introspection/org.freedesktop.NetworkManager.AgentManager.xml +++ b/introspection/org.freedesktop.NetworkManager.AgentManager.xml @@ -2,7 +2,7 @@ <node name="/org/freedesktop/NetworkManager/AgentManager"> <!-- org.freedesktop.NetworkManager.AgentManager: - @short_description: Secret Agent Manager + @short_description: Secret Agent Manager. --> <interface name="org.freedesktop.NetworkManager.AgentManager"> diff --git a/introspection/org.freedesktop.NetworkManager.Checkpoint.xml b/introspection/org.freedesktop.NetworkManager.Checkpoint.xml index 1496ed4e..d47407bf 100644 --- a/introspection/org.freedesktop.NetworkManager.Checkpoint.xml +++ b/introspection/org.freedesktop.NetworkManager.Checkpoint.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.Checkpoint: - @short_description: Configuration and State Snapshot + @short_description: Configuration and State Snapshot. A snapshot of NetworkManager state for a given device list --> diff --git a/introspection/org.freedesktop.NetworkManager.Connection.Active.xml b/introspection/org.freedesktop.NetworkManager.Connection.Active.xml index 54e1fd94..ebcdf952 100644 --- a/introspection/org.freedesktop.NetworkManager.Connection.Active.xml +++ b/introspection/org.freedesktop.NetworkManager.Connection.Active.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.Connection.Active: - @short_description: Active Connection + @short_description: Active Connection. Objects that implement the Connection.Active interface represent an attempt to connect to a network using the details provided by a Connection @@ -93,10 +93,10 @@ StateChanged: @state: (<link linkend="NMActiveConnectionState">NMActiveConnectionState</link>) The new state of the active connection. @reason: (<link linkend="NMActiveConnectionStateReason">NMActiveConnectionStateReason</link>) Reason code describing the change to the new state. + @since: 1.8 Emitted when the state of the active connection has changed. - Since: 1.8 --> <signal name="StateChanged"> <arg name="state" type="u"/> diff --git a/introspection/org.freedesktop.NetworkManager.DHCP4Config.xml b/introspection/org.freedesktop.NetworkManager.DHCP4Config.xml index 0da12d62..ae5c3741 100644 --- a/introspection/org.freedesktop.NetworkManager.DHCP4Config.xml +++ b/introspection/org.freedesktop.NetworkManager.DHCP4Config.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.DHCP4Config: - @short_description: IPv4 DHCP Client State + @short_description: IPv4 DHCP Client State. Options and configuration returned by the IPv4 DHCP server. --> diff --git a/introspection/org.freedesktop.NetworkManager.DHCP6Config.xml b/introspection/org.freedesktop.NetworkManager.DHCP6Config.xml index 940cf4e4..7da61b23 100644 --- a/introspection/org.freedesktop.NetworkManager.DHCP6Config.xml +++ b/introspection/org.freedesktop.NetworkManager.DHCP6Config.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.DHCP6Config: - @short_description: IPv6 DHCP Client State + @short_description: IPv6 DHCP Client State. Options and configuration returned by the IPv6 DHCP server. --> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Adsl.xml b/introspection/org.freedesktop.NetworkManager.Device.Adsl.xml index 29701d78..eeb92e9c 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Adsl.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Adsl.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Adsl: - @short_description: ADSL Device + @short_description: ADSL Device. --> <interface name="org.freedesktop.NetworkManager.Device.Adsl"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Bluetooth.xml b/introspection/org.freedesktop.NetworkManager.Device.Bluetooth.xml index 5cd0eaae..ce3d785c 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Bluetooth.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Bluetooth.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Bluetooth: - @short_description: Bluetooth Device + @short_description: Bluetooth Device. --> <interface name="org.freedesktop.NetworkManager.Device.Bluetooth"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Bond.xml b/introspection/org.freedesktop.NetworkManager.Device.Bond.xml index e29dee45..34803d17 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Bond.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Bond.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Bond: - @short_description: Bonding Device + @short_description: Bonding Device. --> <interface name="org.freedesktop.NetworkManager.Device.Bond"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Bridge.xml b/introspection/org.freedesktop.NetworkManager.Device.Bridge.xml index ee0a9c50..b3a8167d 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Bridge.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Bridge.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Bridge: - @short_description: Bridging Device + @short_description: Bridging Device. --> <interface name="org.freedesktop.NetworkManager.Device.Bridge"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Dummy.xml b/introspection/org.freedesktop.NetworkManager.Device.Dummy.xml index 22c917e8..ccef0b53 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Dummy.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Dummy.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Dummy: - @short_description: Dummy Device + @short_description: Dummy Device. --> <interface name="org.freedesktop.NetworkManager.Device.Dummy"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Generic.xml b/introspection/org.freedesktop.NetworkManager.Device.Generic.xml index 792c460b..231b22da 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Generic.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Generic.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Generic: - @short_description: Unrecognized Device + @short_description: Unrecognized Device. --> <interface name="org.freedesktop.NetworkManager.Device.Generic"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.IPTunnel.xml b/introspection/org.freedesktop.NetworkManager.Device.IPTunnel.xml index 4d8a85bb..475da375 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.IPTunnel.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.IPTunnel.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.IPTunnel: - @short_description: IP Tunneling Device + @short_description: IP Tunneling Device. --> <interface name="org.freedesktop.NetworkManager.Device.IPTunnel"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Infiniband.xml b/introspection/org.freedesktop.NetworkManager.Device.Infiniband.xml index e931a958..01d328b2 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Infiniband.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Infiniband.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Infiniband: - @short_description: Infiniband Device + @short_description: Infiniband Device. --> <interface name="org.freedesktop.NetworkManager.Device.Infiniband"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Lowpan.xml b/introspection/org.freedesktop.NetworkManager.Device.Lowpan.xml index 3866946d..4b99a884 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Lowpan.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Lowpan.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Lowpan: - @short_description: 6LoWPAN Device + @short_description: 6LoWPAN Device. --> <interface name="org.freedesktop.NetworkManager.Device.Lowpan"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Macsec.xml b/introspection/org.freedesktop.NetworkManager.Device.Macsec.xml index 6fd2cee5..2b7cabce 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Macsec.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Macsec.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Macsec: - @short_description: MACSec Device + @short_description: MACSec Device. --> <interface name="org.freedesktop.NetworkManager.Device.Macsec"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Macvlan.xml b/introspection/org.freedesktop.NetworkManager.Device.Macvlan.xml index cd810a53..121dec62 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Macvlan.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Macvlan.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Macvlan: - @short_description: MAC VLAN Device + @short_description: MAC VLAN Device. --> <interface name="org.freedesktop.NetworkManager.Device.Macvlan"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Modem.xml b/introspection/org.freedesktop.NetworkManager.Device.Modem.xml index b089bda2..1aa0c834 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Modem.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Modem.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Modem: - @short_description: Modem Device + @short_description: Modem Device. --> <interface name="org.freedesktop.NetworkManager.Device.Modem"> @@ -30,31 +30,31 @@ <!-- DeviceId: + @since: 1.20 An identifier used by the modem backend (ModemManager) that aims to uniquely identify the a device. Can be used to match a connection to a particular device. - Since: 1.20 --> <property name="DeviceId" type="s" access="read" /> <!-- OperatorCode: + @since: 1.20 The MCC and MNC (concatenated) of the network the modem is connected to. Blank if disconnected or not a 3GPP modem. - Since: 1.20 --> <property name="OperatorCode" type="s" access="read" /> <!-- Apn: + @since: 1.20 The access point name the modem is connected to. Blank if disconnected. - Since: 1.20 --> <property name="Apn" type="s" access="read" /> diff --git a/introspection/org.freedesktop.NetworkManager.Device.OlpcMesh.xml b/introspection/org.freedesktop.NetworkManager.Device.OlpcMesh.xml index 040a6a5d..00743bf0 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.OlpcMesh.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.OlpcMesh.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.OlpcMesh: - @short_description: OLPC Wireless Mesh Device + @short_description: OLPC Wireless Mesh Device. --> <interface name="org.freedesktop.NetworkManager.Device.OlpcMesh"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.OvsBridge.xml b/introspection/org.freedesktop.NetworkManager.Device.OvsBridge.xml index 5970a59d..01c09bdf 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.OvsBridge.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.OvsBridge.xml @@ -2,19 +2,18 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.OvsBridge: - @short_description: OvsBridge Device + @short_description: OvsBridge Device. --> <interface name="org.freedesktop.NetworkManager.Device.OvsBridge"> <!-- Slaves: + @since: 1.14 DEPRECATED. Use the "Ports" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.34.0. - - Since: 1.14 --> <property name="Slaves" type="ao" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.Device.OvsInterface.xml b/introspection/org.freedesktop.NetworkManager.Device.OvsInterface.xml index be64eb47..3c4c50c3 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.OvsInterface.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.OvsInterface.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.OvsInterface: - @short_description: OvsInterface Device + @short_description: OvsInterface Device. --> <interface name="org.freedesktop.NetworkManager.Device.OvsInterface"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.OvsPort.xml b/introspection/org.freedesktop.NetworkManager.Device.OvsPort.xml index 3cd1fa54..2a48e9b2 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.OvsPort.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.OvsPort.xml @@ -2,19 +2,18 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.OvsPort: - @short_description: OvsPort Device + @short_description: OvsPort Device. --> <interface name="org.freedesktop.NetworkManager.Device.OvsPort"> <!-- Slaves: + @since: 1.14 DEPRECATED. Use the "Ports" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.34.0. - - Since: 1.14 --> <property name="Slaves" type="ao" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Ppp.xml b/introspection/org.freedesktop.NetworkManager.Device.Ppp.xml index 0032692e..74ae7bc3 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Ppp.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Ppp.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Ppp: - @short_description: PPP Device + @short_description: PPP Device. --> <interface name="org.freedesktop.NetworkManager.Device.Ppp"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Statistics.xml b/introspection/org.freedesktop.NetworkManager.Device.Statistics.xml index 06781692..ab9076ce 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Statistics.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Statistics.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Statistics: - @short_description: Device Statistic Counters + @short_description: Device Statistic Counters. --> <interface name="org.freedesktop.NetworkManager.Device.Statistics"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Team.xml b/introspection/org.freedesktop.NetworkManager.Device.Team.xml index 0634d879..ee0f5900 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Team.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Team.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Team: - @short_description: Teaming Device + @short_description: Teaming Device. --> <interface name="org.freedesktop.NetworkManager.Device.Team"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Tun.xml b/introspection/org.freedesktop.NetworkManager.Device.Tun.xml index 55a9bacb..9e342556 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Tun.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Tun.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Tun: - @short_description: Userspace Tunneling Device + @short_description: Userspace Tunneling Device. --> <interface name="org.freedesktop.NetworkManager.Device.Tun"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Veth.xml b/introspection/org.freedesktop.NetworkManager.Device.Veth.xml index 900554c4..95bfeaef 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Veth.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Veth.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Veth: - @short_description: Virtual Ethernet Device + @short_description: Virtual Ethernet Device. --> <interface name="org.freedesktop.NetworkManager.Device.Veth"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Vlan.xml b/introspection/org.freedesktop.NetworkManager.Device.Vlan.xml index 1ab762b2..0dacbc94 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Vlan.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Vlan.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Vlan: - @short_description: Virtual LAN Device + @short_description: Virtual LAN Device. --> <interface name="org.freedesktop.NetworkManager.Device.Vlan"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Vrf.xml b/introspection/org.freedesktop.NetworkManager.Device.Vrf.xml index 9dfb6c87..66dc7793 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Vrf.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Vrf.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Vrf: - @short_description: VRF Device + @short_description: VRF Device. --> <interface name="org.freedesktop.NetworkManager.Device.Vrf"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Vxlan.xml b/introspection/org.freedesktop.NetworkManager.Device.Vxlan.xml index 4c04f9df..a8b68ca2 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Vxlan.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Vxlan.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Vxlan: - @short_description: VXLAN Device + @short_description: VXLAN Device. --> <interface name="org.freedesktop.NetworkManager.Device.Vxlan"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.WiMax.xml b/introspection/org.freedesktop.NetworkManager.Device.WiMax.xml index e510a142..573d170e 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.WiMax.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.WiMax.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.WiMax: - @short_description: WiMax Device + @short_description: WiMax Device. DEPRECATED: NetworkManager no longer supports WiMAX since version 1.2. This interface is no longer used. --> @@ -10,7 +10,7 @@ <!-- GetNspList: - @nsps: List of NSP object paths + @nsps: List of NSP object paths. Get the list of NSPs visible to this device. --> diff --git a/introspection/org.freedesktop.NetworkManager.Device.WifiP2P.xml b/introspection/org.freedesktop.NetworkManager.Device.WifiP2P.xml index f5e2fdce..73b8cc0c 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.WifiP2P.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.WifiP2P.xml @@ -2,9 +2,8 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.WifiP2P: - @short_description: Wi-Fi P2P Device - - Since: 1.16 + @short_description: Wi-Fi P2P Device. + @since: 1.16 --> <interface name="org.freedesktop.NetworkManager.Device.WifiP2P"> <annotation name="org.gtk.GDBus.C.Name" value="Device_Wifi_P2P"/> @@ -15,8 +14,6 @@ The active hardware address of the device. DEPRECATED. Use the "HwAddress" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.24.0. - - Since: 1.16 --> <property name="HwAddress" type="s" access="read"/> @@ -24,20 +21,24 @@ Peers: List of object paths of peers visible to this Wi-Fi P2P device. - - Since: 1.16 --> <property name="Peers" type="ao" access="read"/> <!-- StartFind: - @options: Options of find. Currently, 'timeout' option with value of "i" - in the range of 1-600 seconds is supported. The default is - 30 seconds. + @options: Options of find. Start a find operation for Wi-Fi P2P peers. - Since: 1.16 + The %options argument accepts the following keys: + + <variablelist> + <varlistentry> + <term><literal>i timeout</literal>:</term> + <listitem><para>Timeout value in the range of 1-600 seconds.</para> + <para>The default is 30 seconds.</para></listitem> + </varlistentry> + </variablelist> --> <method name="StartFind"> <arg name="options" type="a{sv}" direction="in"/> @@ -47,8 +48,6 @@ StopFind: Stop an ongoing find operation again. - - Since: 1.16 --> <method name="StopFind"> </method> @@ -58,8 +57,6 @@ @peer: The object path of the newly found access point. Emitted when a new Wi-Fi P2P peer is found by the device. - - Since: 1.16 --> <signal name="PeerAdded"> <arg name="peer" type="o"/> @@ -70,8 +67,6 @@ @peer: The object path of the Wi-Fi P2P peer that has disappeared. Emitted when a Wi-Fi P2P peer disappears from view of the device. - - Since: 1.16 --> <signal name="PeerRemoved"> <arg name="peer" type="o"/> diff --git a/introspection/org.freedesktop.NetworkManager.Device.WireGuard.xml b/introspection/org.freedesktop.NetworkManager.Device.WireGuard.xml index b4d46987..b81cae80 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.WireGuard.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.WireGuard.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.WireGuard: - @short_description: WireGuard Device + @short_description: WireGuard Device. --> <interface name="org.freedesktop.NetworkManager.Device.WireGuard"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Wired.xml b/introspection/org.freedesktop.NetworkManager.Device.Wired.xml index ec3aeae3..41ea1c67 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Wired.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Wired.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Wired: - @short_description: Wired Ethernet Device + @short_description: Wired Ethernet Device. --> <interface name="org.freedesktop.NetworkManager.Device.Wired"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Wireless.xml b/introspection/org.freedesktop.NetworkManager.Device.Wireless.xml index c57e5689..c428e998 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Wireless.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Wireless.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Wireless: - @short_description: Wi-Fi Device + @short_description: Wi-Fi Device. --> <interface name="org.freedesktop.NetworkManager.Device.Wireless"> @@ -100,11 +100,10 @@ <!-- LastScan: + @since: 1.12 The timestamp (in CLOCK_BOOTTIME milliseconds) for the last finished network scan. A value of -1 means the device never scanned for access points. - - Since: 1.12 --> <property name="LastScan" type="x" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.Device.Wpan.xml b/introspection/org.freedesktop.NetworkManager.Device.Wpan.xml index 1591ce81..f8acde57 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.Wpan.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.Wpan.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device.Wpan: - @short_description: IEEE 802.15.4 (WPAN) MAC Layer Device + @short_description: IEEE 802.15.4 (WPAN) MAC Layer Device. --> <interface name="org.freedesktop.NetworkManager.Device.Wpan"> diff --git a/introspection/org.freedesktop.NetworkManager.Device.xml b/introspection/org.freedesktop.NetworkManager.Device.xml index 82f127ed..e694fcda 100644 --- a/introspection/org.freedesktop.NetworkManager.Device.xml +++ b/introspection/org.freedesktop.NetworkManager.Device.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.Device: - @short_description: Device + @short_description: Device. --> <interface name="org.freedesktop.NetworkManager.Device"> @@ -268,58 +268,53 @@ <!-- Ip4Connectivity: + @since: 1.16 The result of the last IPv4 connectivity check. - Since: 1.16 - Returns: <link linkend="NMConnectivityState">NMConnectivityState</link> --> <property name="Ip4Connectivity" type="u" access="read"/> <!-- Ip6Connectivity: + @since: 1.16 The result of the last IPv6 connectivity check. - Since: 1.16 - Returns: <link linkend="NMConnectivityState">NMConnectivityState</link> --> <property name="Ip6Connectivity" type="u" access="read"/> <!-- InterfaceFlags: + @since: 1.22 The flags of the network interface. See <link linkend="NMDeviceInterfaceFlags">NMDeviceInterfaceFlags</link> for the currently defined flags. - - Since: 1.22 --> <property name="InterfaceFlags" type="u" access="read"/> <!-- HwAddress: + @since: 1.24 The hardware address of the device. This replaces the other 'HwAddress' properties on the device-specific D-Bus interfaces. - - Since: 1.24 --> <property name="HwAddress" type="s" access="read"/> <!-- Ports: + @since: 1.34 The port devices of the controller device. Array of object paths representing devices which are currently set as port of this device. This replaces the 'Slaves' properties on the device-specific D-Bus interfaces. - - Since: 1.34 --> <property name="Ports" type="ao" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.DnsManager.xml b/introspection/org.freedesktop.NetworkManager.DnsManager.xml index dd96e0f6..702efb87 100644 --- a/introspection/org.freedesktop.NetworkManager.DnsManager.xml +++ b/introspection/org.freedesktop.NetworkManager.DnsManager.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.DnsManager: - @short_description: DNS Configuration State + @short_description: DNS Configuration State. The interface contains DNS-related information. --> diff --git a/introspection/org.freedesktop.NetworkManager.IP4Config.xml b/introspection/org.freedesktop.NetworkManager.IP4Config.xml index ce659d71..f6e18b76 100644 --- a/introspection/org.freedesktop.NetworkManager.IP4Config.xml +++ b/introspection/org.freedesktop.NetworkManager.IP4Config.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.IP4Config: - @short_description: IPv4 Configuration Set + @short_description: IPv4 Configuration Set. --> <interface name="org.freedesktop.NetworkManager.IP4Config"> @@ -61,11 +61,10 @@ <!-- NameserverData: + @since: 1.14 The nameservers in use. Currently, only the value "address" is recognized (with an IP address string). - - Since: 1.14 --> <property name="NameserverData" type="aa{sv}" access="read"/> @@ -108,10 +107,9 @@ <!-- WinsServerData: + @since: 1.14 The Windows Internet Name Service servers associated with the connection. - - Since: 1.14 --> <property name="WinsServerData" type="as" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.IP6Config.xml b/introspection/org.freedesktop.NetworkManager.IP6Config.xml index 3fe4a468..e47b35f2 100644 --- a/introspection/org.freedesktop.NetworkManager.IP6Config.xml +++ b/introspection/org.freedesktop.NetworkManager.IP6Config.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.IP6Config: - @short_description: IPv6 Configuration Set + @short_description: IPv6 Configuration Set. --> <interface name="org.freedesktop.NetworkManager.IP6Config"> diff --git a/introspection/org.freedesktop.NetworkManager.PPP.xml b/introspection/org.freedesktop.NetworkManager.PPP.xml index d840c786..b64414f9 100644 --- a/introspection/org.freedesktop.NetworkManager.PPP.xml +++ b/introspection/org.freedesktop.NetworkManager.PPP.xml @@ -3,7 +3,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.PPP: - @short_description: Helper interface for a PPP plugin + @short_description: Helper interface for a PPP plugin. --> <interface name="org.freedesktop.NetworkManager.PPP"> diff --git a/introspection/org.freedesktop.NetworkManager.SecretAgent.xml b/introspection/org.freedesktop.NetworkManager.SecretAgent.xml index 7c96064b..928e39af 100644 --- a/introspection/org.freedesktop.NetworkManager.SecretAgent.xml +++ b/introspection/org.freedesktop.NetworkManager.SecretAgent.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.SecretAgent: - @short_description: User Secret Agent + @short_description: User Secret Agent. Private D-Bus interface used by secret agents that store and provide secrets to NetworkManager. If an agent provides secrets to NetworkManager diff --git a/introspection/org.freedesktop.NetworkManager.Settings.Connection.xml b/introspection/org.freedesktop.NetworkManager.Settings.Connection.xml index 55bdaff6..a9240ec1 100644 --- a/introspection/org.freedesktop.NetworkManager.Settings.Connection.xml +++ b/introspection/org.freedesktop.NetworkManager.Settings.Connection.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.Settings.Connection: - @short_description: Connection Settings Profile + @short_description: Connection Settings Profile. Represents a single network connection configuration. --> @@ -103,41 +103,73 @@ <!-- Update2: - @settings: New connection settings, properties, and (optionally) secrets. - Provide an empty array, to use the current settings. - @flags: optional flags argument. Currently, supported flags are: - "0x1" (to-disk), - "0x2" (in-memory), - "0x4" (in-memory-detached), - "0x8" (in-memory-only), - "0x10" (volatile), - "0x20" (block-autoconnect), - "0x40" (no-reapply). - Unknown flags cause the call to fail. - @args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. - @result: output argument, currently no results are returned. + @settings: New connection settings, properties, and (optionally) secrets. Provide an empty array to use the current settings. + @flags: Optional flags. Unknown flags cause the call to fail. + @args: Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail. + @result: Currently no results are returned. + @since: 1.12 Update the connection with new settings and properties (replacing all - previous settings and properties). If the flag 0x1 is present, - the connection is persisted to disk. If the flag 0x2 is present, - the change is only made in memory (without touching an eventual - profile on disk). If neither 0x1 nor 0x2 is set, the change is made - in memory only, if the connection is already in memory only. - The flags 0x4 (in-memory-detached) and 0x8 (in-memory-only) are like - "in-memory", but behave slightly different when migrating the profile - from disk to in-memory. - The flag 0x20 (block-autoconnect) blocks auto-connect on the updated - profile, and 0x40 (no-reapply) prevents "connection.zone" and "connection.metered" - properties to take effect on currently active devices. + previous settings and properties). + + Update2 is an alternative to + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings-Connection.Update">Update</link>, + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings-Connection.UpdateUnsaved">UpdateUnsaved</link> + and <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings-Connection.Save">Save</link> + extensible with extra %flags and %args arguments. + + The %flags argument accepts the combination of following values, + logically or-ed together: + + <variablelist> + <varlistentry> + <term><literal>0x1 (to-disk)</literal>:</term> + <listitem><para>The connection is persisted to disk.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x2 (in-memory)</literal>:</term> + <listitem><para>The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x4 (in-memory-detached)</literal>:</term> + <listitem><para>Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x8 (in-memory-only)</literal>:</term> + <listitem><para>Like "in-memory", but behaves slightly different when migrating + the profile from disk to in-memory.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x10 (volatile)</literal>:</term> + </varlistentry> + <varlistentry> + <term><literal>0x20 (block-autoconnect)</literal>:</term> + <listitem><para>Blocks auto-connect on the updated profile</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x40 (no-reapply)</literal>:</term> + <listitem><para>Prevents "connection.zone" and "connection.metered" properties + to take effect on currently active devices.</para></listitem> + </varlistentry> + </variablelist> + + The %args argument accepts the following keys: + + <variablelist> + <varlistentry> + <term><literal>plugin</literal>:</term> + <listitem><para>The settings plugin the connection will be migrated to + such as "keyfile" or "ifcfg-rh".</para> + <para role="since">Since 1.38</para></listitem> + </varlistentry> + </variablelist> + Secrets may be part of the update request, and will be either stored in persistent storage or sent to a Secret Agent for storage, depending on the flags associated with each secret. - - Update2 is a extensible alternative to Update, UpdateUnsaved and Save. - - Since: 1.12 --> <method name="Update2"> <arg name="settings" type="a{sa{sv}}" direction="in"/> @@ -168,21 +200,19 @@ <!-- Flags: + @since: 1.12 Additional flags of the connection profile. Returns: <link linkend="NMSettingsConnectionFlags">NMSettingsConnectionFlags</link> - - Since: 1.12 --> <property name="Flags" type="u" access="read"/> <!-- Filename: + @since: 1.12 File that stores the connection in case the connection is file-backed. - - Since: 1.12 --> <property name="Filename" type="s" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.Settings.xml b/introspection/org.freedesktop.NetworkManager.Settings.xml index 28c89ff4..ea271dfa 100644 --- a/introspection/org.freedesktop.NetworkManager.Settings.xml +++ b/introspection/org.freedesktop.NetworkManager.Settings.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.Settings: - @short_description: Connection Settings Profile Manager + @short_description: Connection Settings Profile Manager. The Settings interface allows clients to view and administrate the connections stored and used by NetworkManager. @@ -66,29 +66,55 @@ <!-- AddConnection2: @settings: New connection settings, properties, and (optionally) secrets. - @flags: optional flags argument. Currently, the following flags are supported: - "0x1" (to-disk), - "0x2" (in-memory), - "0x20" (block-autoconnect). - Unknown flags cause the call to fail. - @args: optional arguments dictionary, for extentibility. Currently, no - arguments are accepted. Specifying unknown keys causes the call - to fail. + @flags: Flags. Unknown flags cause the call to fail. + @args: Optional arguments dictionary, for extentibility. Specifying unknown keys causes the call to fail. @path: Object path of the new connection that was just added. - @result: output argument, currently no additional results are returned. + @result: Output argument, currently no additional results are returned. + @since: 1.20 Add a new connection profile. - Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. - The effect is whether to behave like AddConnection or AddConnectionUnsaved. - If 0x20 (block-autoconnect) is specified, autoconnect for the new profile - is blocked from the beginning. Otherwise, the profile might automatically - connect if a suitable device is around. - - AddConnection2 is a extensible alternative to AddConnection, and AddConnectionUnsaved. + AddConnection2 is an alternative to + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings.AddConnection">AddConnection</link> and + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings.AddConnectionUnsaved">AddConnectionUnsaved</link>. The new variant can do everything that the older variants could, and more. + Its behavior is extensible via extra %flags and %args arguments. + + The %flags argument accepts the combination of following values, + logically or-ed together: + + <variablelist> + <varlistentry> + <term><literal>0x1 (to-disk)</literal>:</term> + <listitem><para>The connection is persisted to disk.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x2 (in-memory)</literal>:</term> + <listitem><para>The change is only made in memory (without touching an eventual + profile on disk). If neither 0x1 nor 0x2 is set, the change is made in memory + only, if the connection is already in memory only.</para></listitem> + </varlistentry> + <varlistentry> + <term><literal>0x20 (block-autoconnect)</literal>:</term> + <listitem><para>Blocks auto-connect on the new profile</para></listitem> + </varlistentry> + </variablelist> + + The %args argument accepts the following keys: + + <variablelist> + <varlistentry> + <term><literal>plugin</literal>:</term> + <listitem><para>The settings plugin the newly added connection will + use, such as "keyfile" or "ifcfg-rh".</para> + <para role="since">Since 1.38</para></listitem> + </varlistentry> + </variablelist> - Since: 1.20 + Either the flags 0x1 (to-disk) or 0x2 (in-memory) must be specified. + The effect is whether to behave like + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings.AddConnection">AddConnection</link> or + <link linkend="gdbus-method-org-freedesktop-NetworkManager-Settings.AddConnectionUnsaved">AddConnectionUnsaved</link>. --> <method name="AddConnection2"> <arg name="settings" type="a{sa{sv}}" direction="in"/> @@ -102,7 +128,6 @@ LoadConnections: @filenames: Array of paths to on-disk connection profiles in directories monitored by NetworkManager. @status: Success or failure of the operation as a whole. True if NetworkManager at least tried to load the indicated connections, even if it did not succeed. False if an error occurred before trying to load the connections (eg, permission denied). - Note that before 1.20, NetworkManager had a bug and this @status value was wrong. It is better to assume success if the method does not return with a D-Bus error. On top of that, you can look at @failures to know whether any of the requested files failed. @failures: Paths of connection files that could not be loaded. Loads or reloads the indicated connections from disk. You should call this @@ -110,6 +135,10 @@ that NetworkManager sees the changes. As with AddConnection(), this operation does not necessarily start the network connection. + + Note that before 1.20, NetworkManager had a bug and this @status value was wrong. + It is better to assume success if the method does not return with a D-Bus error. + On top of that, you can look at @failures to know whether any of the requested files failed. --> <method name="LoadConnections"> <arg name="filenames" type="as" direction="in"/> diff --git a/introspection/org.freedesktop.NetworkManager.VPN.Connection.xml b/introspection/org.freedesktop.NetworkManager.VPN.Connection.xml index 92de1496..21670641 100644 --- a/introspection/org.freedesktop.NetworkManager.VPN.Connection.xml +++ b/introspection/org.freedesktop.NetworkManager.VPN.Connection.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.VPN.Connection: - @short_description: Active VPN Connection + @short_description: Active VPN Connection. Represents an active connection to a Virtual Private Network. --> diff --git a/introspection/org.freedesktop.NetworkManager.VPN.Plugin.xml b/introspection/org.freedesktop.NetworkManager.VPN.Plugin.xml index 4c8a8af8..b01f7a81 100644 --- a/introspection/org.freedesktop.NetworkManager.VPN.Plugin.xml +++ b/introspection/org.freedesktop.NetworkManager.VPN.Plugin.xml @@ -3,7 +3,7 @@ <!-- org.freedesktop.NetworkManager.VPN.Plugin: - @short_description: VPN Service + @short_description: VPN Service. This interface is provided by plugins providing VPN services to the NetworkManager daemon. diff --git a/introspection/org.freedesktop.NetworkManager.WiMax.Nsp.xml b/introspection/org.freedesktop.NetworkManager.WiMax.Nsp.xml index 6ebf9cb7..249df7e7 100644 --- a/introspection/org.freedesktop.NetworkManager.WiMax.Nsp.xml +++ b/introspection/org.freedesktop.NetworkManager.WiMax.Nsp.xml @@ -2,7 +2,7 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.WiMax.Nsp: - @short_description: WiMax Network Service Provider + @short_description: WiMax Network Service Provider. DEPRECATED: NetworkManager no longer supports WiMAX since version 1.2. This interface is no longer used. --> diff --git a/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml b/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml index 760849c3..349dc87f 100644 --- a/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml +++ b/introspection/org.freedesktop.NetworkManager.WifiP2PPeer.xml @@ -2,9 +2,8 @@ <node name="/"> <!-- org.freedesktop.NetworkManager.WifiP2PPeer: - @short_description: Wi-Fi P2P Peer - - Since: 1.16 + @short_description: Wi-Fi P2P Peer. + @since: 1.16 --> <interface name="org.freedesktop.NetworkManager.WifiP2PPeer"> <annotation name="org.gtk.GDBus.C.Name" value="Wifi_P2P_Peer"/> @@ -18,8 +17,6 @@ Name: Device name. - - Since: 1.16 --> <property name="Name" type="s" access="read"/> @@ -29,8 +26,6 @@ Flags describing the capabilities of the access point. Returns: <link linkend="NM80211ApFlags">NM80211ApFlags</link> - - Since: 1.16 --> <property name="Flags" type="u" access="read"/> @@ -38,8 +33,6 @@ Manufacturer: The manufacturer of the Wi-Fi P2P peer. - - Since: 1.16 --> <property name="Manufacturer" type="s" access="read"/> @@ -47,8 +40,6 @@ Model: The model of the Wi-Fi P2P peer. - - Since: 1.16 --> <property name="Model" type="s" access="read"/> @@ -56,8 +47,6 @@ ModelNumber: The model number of the Wi-Fi P2P peer. - - Since: 1.16 --> <property name="ModelNumber" type="s" access="read"/> @@ -65,8 +54,6 @@ Serial: The serial number of the Wi-Fi P2P peer. - - Since: 1.16 --> <property name="Serial" type="s" access="read"/> @@ -74,8 +61,6 @@ WfdIEs: The Wi-Fi Display Information Elements of the Wi-Fi P2P peer. - - Since: 1.16 --> <property name="WfdIEs" type="ay" access="read"/> @@ -83,8 +68,6 @@ HwAddress: The hardware address (BSSID) of the access point. - - Since: 1.16 --> <property name="HwAddress" type="s" access="read"/> @@ -92,8 +75,6 @@ Strength: The current signal quality of the access point, in percent. - - Since: 1.16 --> <property name="Strength" type="y" access="read"/> @@ -103,8 +84,6 @@ The timestamp (in CLOCK_BOOTTIME seconds) for the last time the access point was found in scan results. A value of -1 means the access point has never been found in scan results. - - Since: 1.16 --> <property name="LastSeen" type="i" access="read"/> diff --git a/introspection/org.freedesktop.NetworkManager.xml b/introspection/org.freedesktop.NetworkManager.xml index ff74c512..65859881 100644 --- a/introspection/org.freedesktop.NetworkManager.xml +++ b/introspection/org.freedesktop.NetworkManager.xml @@ -2,7 +2,7 @@ <node name="/org/freedesktop/NetworkManager"> <!-- org.freedesktop.NetworkManager: - @short_description: Connection Manager + @short_description: Connection Manager. --> <interface name="org.freedesktop.NetworkManager"> @@ -10,7 +10,7 @@ <!-- Reload: - @flags: optional flags to specify which parts shall be reloaded. + @flags: Optional flags to specify which parts shall be reloaded. Reload NetworkManager's configuration and perform certain updates, like flushing a cache or rewriting external state to disk. This is similar to sending SIGHUP to NetworkManager but it @@ -119,8 +119,7 @@ @options: Further options for the method call. @path: Object path of the new connection that was just added. @active_connection: The path of the active connection object representing this active connection. - @result: a dictionary of additional output arguments for future extension. Currently, not additional - output arguments are supported. + @result: A dictionary of additional output arguments for future extension. Currently, not additional output arguments are supported. Adds a new connection using the given details (if any) as a template (automatically filling in missing settings with the capabilities of the @@ -287,19 +286,19 @@ <!-- CheckpointAdjustRollbackTimeout: - @add_timeout: number of seconds from ~now~ in which the - timeout will expire. Set to 0 to disable the timeout. - Note that the added seconds start counting from now, - not "Created" timestamp or the previous expiration - time. Note that the "Created" property of the checkpoint - will stay unchanged by this call. However, the "RollbackTimeout" - will be recalculated to give the approximate new expiration time. - The new "RollbackTimeout" property will be approximate up to - one second precision, which is the accuracy of the property. + @checkpoint: The checkpoint to be rolled back. + @add_timeout: Number of seconds from <emphasis>now</emphasis> in which the timeout will expire. Set to 0 to disable the timeout. + @since: 1.12 Reset the timeout for rollback for the checkpoint. - Since: 1.12 + Note that the added seconds start counting from now, + not "Created" timestamp or the previous expiration + time. Note that the "Created" property of the checkpoint + will stay unchanged by this call. However, the "RollbackTimeout" + will be recalculated to give the approximate new expiration time. + The new "RollbackTimeout" property will be approximate up to + one second precision, which is the accuracy of the property. --> <method name="CheckpointAdjustRollbackTimeout"> <arg name="checkpoint" type="o" direction="in"/> @@ -385,6 +384,16 @@ --> <property name="WimaxHardwareEnabled" type="b" access="read"/> + <!-- + RadioFlags: + @since: 1.38 + + Flags related to radio devices. See <link + linkend="NMRadioFlags">NMRadioFlags</link> for the list of flags + supported. + --> + <property name="RadioFlags" type="u" access="read"/> + <!-- ActiveConnections: diff --git a/man/NetworkManager-dispatcher.8 b/man/NetworkManager-dispatcher.8 index e5d23832..b992cf3b 100644 --- a/man/NetworkManager-dispatcher.8 +++ b/man/NetworkManager-dispatcher.8 @@ -2,9 +2,9 @@ .\" Title: NetworkManager-dispatcher .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager-dispatcher 1.36.4 +.\" Source: NetworkManager-dispatcher 1.37.92 .\" Language: English .\" .TH "NETWORKMANAGER\-DISPATCHER" "8" "" "NetworkManager\-dispatcher 1\&" "Network management daemons" diff --git a/man/NetworkManager-wait-online.service.8 b/man/NetworkManager-wait-online.service.8 new file mode 100644 index 00000000..3b1be909 --- /dev/null +++ b/man/NetworkManager-wait-online.service.8 @@ -0,0 +1,178 @@ +'\" t +.\" Title: NetworkManager-wait-online.service +.\" Author: +.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> +.\" Date: 05/04/2022 +.\" Manual: Network management daemons +.\" Source: NetworkManager-wait-online.service 1.37.92 +.\" Language: English +.\" +.TH "NETWORKMANAGER\-WAIT\-ONLINE\&" "8" "" "NetworkManager\-wait\-online\&" "Network management daemons" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +NetworkManager-wait-online.service \- Wait for network to come online +.SH "DESCRIPTION" +.PP +NetworkManager\-wait\-online\&.service delays network\-online\&.target until network is ready\&. +.PP +The systemd target +network\-online\&.target +acts as a synchronization point for services to start after network is configured\&. Such services should order themselves +After=network\-online\&.target +(and never +After=NetworkManager\-wait\-online\&.service)\&. +NetworkManager\-wait\-online\&.service +is a one\-shot service that itself is ordered +Before=network\-online\&.target +and this way delays the target until the network is configured\&. +.PP +NetworkManager\-wait\-online\&.service +itself is almost not configurable itself\&. Instead the connection profiles and configuration in NetworkManager affects the behavior\&. +.PP +In the best case, all services on the system can react to networking changes dynamically and no service orders itself after +network\-online\&.target\&. That way, +NetworkManager\-wait\-online\&.service +has no effect and, for example, does not delay the boot\&. That means, if the problem is a long boot time related to +NetworkManager\-wait\-online\&.service, a possible solution is to investigate the services that claim to require network and fix those\&. +.PP +For services that require network configured, +NetworkManager\-wait\-online\&.service +is the default implementation provided by NetworkManager to delay the target\&. But it does nothing magical\&. With special requirements, it may be sensible to disable +NetworkManager\-wait\-online\&.service +and replace it with a similar service that better implements the requirement\&. +.PP +NetworkManager\-wait\-online\&.service +blocks until NetworkManager logs "startup complete" and announces startup complete on D\-Bus\&. How long that takes depends on the network and the NetworkManager configuration\&. If it takes longer than expected, then the reasons need to be investigated in NetworkManager\&. +.PP +There are various reasons what affects NetworkManager reaching "startup complete" and how long +NetworkManager\-wait\-online\&.service +blocks\&. +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +In general, startup complete is not reached as long as NetworkManager is busy activating a device and as long as there are profiles in activating state\&. During boot, NetworkManager starts autoactivating suitable profiles that are configured to autoconnect\&. If activation fails, NetworkManager might retry right away (depending on +connection\&.autoconnect\-retries +setting)\&. While trying and retrying, NetworkManager is busy until all profiles and devices either reached an activated or disconnected state and no further events are expected\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +When a device reaches activated state, depends on its configuration\&. For example, with a profile with both IPv4 and IPv6 addressing enabled, the device is possibly considered fully activated when either of the address families is ready\&. This can be controlled with the +ipv4\&.may\-fail +and +ipv6\&.may\-fail +settings, to indicate that the address family is required\&. There are also +ipv4\&.required\-timeout +and +ipv6\&.required\-timeout +settings which affect how long to wait for an address family\&. Likewise, properties like +ipv4\&.dhcp\-timeout +and +ipv6\&.ra\-timeout +affect how long NetworkManager will try the IP configuration before giving up\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +For example, a bridge or bond profile cannot do IP configuration without ports\&. When booting with such profiles that autoactivate without ports, +NetworkManager\-wait\-online\&.service +blocks until timeout\&. This is a configuration error\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +The property +connection\&.wait\-device\-timeout +of the connection profiles waits until the waited devices appear\&. This is useful if the driver takes a longer time to detect the networking interfaces\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +With Wi\-Fi devices, NetworkManager needs to wait for the first scan result to know which networks might be available\&. That always adds a delay\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +With ethernet devices, NetworkManager waits for carrier until the configurable +[device*]\&.carrier\-timeout +is reached\&. This is because some devices take a long time to detect carrier and it means to boot with cable unplugged, will unnecessarily delay +NetworkManager\-wait\-online\&.service\&. +.RE +.PP +NetworkManager\-wait\-online\&.service +internally uses +nm\-online\&. +.SH "BUGS" +.PP +Please report any bugs in NetworkManager at the +\m[blue]\fBNetworkManager issue tracker\fR\m[]\&\s-2\u[1]\d\s+2\&. +.SH "SEE ALSO" +.PP +\m[blue]\fBNetworkManager home page\fR\m[]\&\s-2\u[2]\d\s+2, +\fBNetworkManager\fR(8), +\fBnm-online\fR(1), +.SH "NOTES" +.IP " 1." 4 +NetworkManager issue tracker +.RS 4 +\%https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues +.RE +.IP " 2." 4 +NetworkManager home page +.RS 4 +\%https://networkmanager.dev +.RE diff --git a/man/NetworkManager-wait-online.service.xml b/man/NetworkManager-wait-online.service.xml new file mode 100644 index 00000000..d061643c --- /dev/null +++ b/man/NetworkManager-wait-online.service.xml @@ -0,0 +1,169 @@ +<?xml version='1.0'?> +<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ +<!ENTITY % entities SYSTEM "common.ent" > +%entities; +]> + +<!-- + NetworkManager-wait-online.service(8) manual page + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. You may obtain a copy of the GNU Free Documentation License + from the Free Software Foundation by visiting their Web site or by + writing to: + + Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +--> + +<refentry id="NetworkManager-wait-online.service"> + <refentryinfo> + <title>NetworkManager-wait-online.service + NetworkManager developers + + + NetworkManager-wait-online.service + 8 + NetworkManager-wait-online.service + Network management daemons + &NM_VERSION; + + + + NetworkManager-wait-online.service + Wait for network to come online + + + + Description + + NetworkManager-wait-online.service delays network-online.target until network + is ready. + + + The systemd target network-online.target acts as a synchronization point + for services to start after network is configured. Such services should + order themselves After=network-online.target + (and never After=NetworkManager-wait-online.service). + NetworkManager-wait-online.service is a one-shot service + that itself is ordered Before=network-online.target + and this way delays the target until the network is configured. + + + NetworkManager-wait-online.service itself is almost not configurable + itself. Instead the connection profiles and configuration in NetworkManager affects + the behavior. + + + In the best case, all services on the system can react to networking changes dynamically and + no service orders itself after network-online.target. That way, + NetworkManager-wait-online.service has no effect and, for example, + does not delay the boot. That means, if the problem is a long boot time related to + NetworkManager-wait-online.service, a possible solution is to + investigate the services that claim to require network and fix those. + + + For services that require network configured, + NetworkManager-wait-online.service is the default implementation + provided by NetworkManager to delay the target. But it does nothing magical. With + special requirements, it may be sensible to disable NetworkManager-wait-online.service + and replace it with a similar service that better implements the requirement. + + + NetworkManager-wait-online.service blocks until + NetworkManager logs "startup complete" and announces startup complete + on D-Bus. How long that takes depends on the network + and the NetworkManager configuration. If it takes longer than expected, then + the reasons need to be investigated in NetworkManager. + + + There are various reasons what affects NetworkManager reaching "startup complete" + and how long NetworkManager-wait-online.service blocks. + + + + In general, startup complete is not reached as long as NetworkManager is busy + activating a device and as long as there are profiles in activating state. + During boot, NetworkManager starts autoactivating + suitable profiles that are configured to autoconnect. If activation fails, + NetworkManager might retry right away (depending on connection.autoconnect-retries + setting). While trying and retrying, NetworkManager is busy until all + profiles and devices either reached an activated or disconnected state + and no further events are expected. + + + + + When a device reaches activated state, depends on its configuration. + For example, with a profile with both IPv4 and IPv6 addressing + enabled, the device is possibly considered fully activated when + either of the address families is ready. This can be controlled with the + ipv4.may-fail and ipv6.may-fail + settings, to indicate that the address family is required. + There are also ipv4.required-timeout and ipv6.required-timeout + settings which affect how long to wait for an address family. + Likewise, properties like ipv4.dhcp-timeout and + ipv6.ra-timeout affect how long NetworkManager + will try the IP configuration before giving up. + + + + + For example, a bridge or bond profile cannot do IP configuration + without ports. When booting with such profiles that autoactivate + without ports, NetworkManager-wait-online.service blocks until timeout. + This is a configuration error. + + + + + The property connection.wait-device-timeout of the connection + profiles waits until the waited devices appear. This is useful if the driver + takes a longer time to detect the networking interfaces. + + + + + With Wi-Fi devices, NetworkManager needs to wait for the first scan + result to know which networks might be available. That always adds a delay. + + + + + With ethernet devices, NetworkManager waits for carrier until the + configurable [device*].carrier-timeout is reached. + This is because some devices take a long time to detect carrier + and it means to boot with cable unplugged, will unnecessarily delay + NetworkManager-wait-online.service. + + + + + + NetworkManager-wait-online.service internally uses + nm-online. + + + + + Bugs + + Please report any bugs in NetworkManager at the + NetworkManager issue tracker. + + + + + See Also + + NetworkManager home page, + NetworkManager8, + nm-online1, + + + diff --git a/man/NetworkManager.8 b/man/NetworkManager.8 index 78e6c26d..504aba97 100644 --- a/man/NetworkManager.8 +++ b/man/NetworkManager.8 @@ -2,12 +2,12 @@ .\" Title: NetworkManager .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.36\&.4" "Network management daemons" +.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.37\&.92" "Network management daemons" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -231,6 +231,7 @@ Please report any bugs you find in NetworkManager at the \m[blue]\fBNetworkManager home page\fR\m[]\&\s-2\u[2]\d\s+2, \fBNetworkManager.conf\fR(5), \fBNetworkManager-dispatcher\fR(8), +\fBNetworkManager-wait-online.service\fR(8), \fBnmcli\fR(1), \fBnmcli-examples\fR(7), \fBnm-online\fR(1), diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 index 3bb3593e..48c85f81 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 @@ -2,12 +2,12 @@ .\" Title: NetworkManager.conf .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" +.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -485,11 +485,28 @@ false\&. .RE .SH "LOGGING SECTION" .PP -This section controls NetworkManager\*(Aqs logging\&. Any settings here are overridden by the +This section controls NetworkManager\*(Aqs logging\&. Logging is very important to understand what NetworkManager is doing\&. When you report a bug, do not unnecessarily filter or limit the log file\&. Just enable +level=TRACE +and +domains=ALL +to collect everything\&. +.PP +Any settings here are overridden by the \fB\-\-log\-level\fR and \fB\-\-log\-domains\fR -command\-line options\&. +command\-line options\&. Logging can also be reconfigured at runtime with +\fBnmcli general logging level "$LEVEL" domains "$DOMAINS"\fR\&. However, often it is interesting to get a complete log from the start\&. Especially, when debugging an issue, enable debug logging in NetworkManager\&.conf and restart the service to enable verbose logging early on\&. +.PP +NetworkManager\*(Aqs logging aims not to contain private sensitive data and you should be fine sharing the debug logs\&. Still, there will be IP addresses and your network setup, if you consider that private then review the log before sharing\&. Do not mangle the logfile in a way that distorts the meaning too much\&. +.PP +NetworkManager uses syslog or systemd\-journald, depending on configuration\&. In any case, debug logs are verbose and might be rate limited or filtered by the logging daemon\&. For systemd\-journald, see +RateLimitIntervalSec +and +RateLimitBurst +in +journald\&.conf +manual for how to disable that\&. .PP .PP \fIlevel\fR @@ -500,16 +517,39 @@ ERR, WARN, INFO, DEBUG, -TRACE\&. The ERR level logs only critical errors\&. WARN logs warnings that may reflect operation\&. INFO logs various informational messages that are useful for tracking state and operations\&. DEBUG enables verbose logging for debugging purposes\&. TRACE enables even more verbose logging then DEBUG level\&. Subsequent levels also log all messages from earlier levels; thus setting the log level to INFO also logs error and warning messages\&. +TRACE, in order of verbosity\&. +.sp +OFF +disables all logging\&. +INFO +is the default verbosity for regular operation\&. +TRACE +is for debugging\&. +.sp +The other levels are in most cases not useful\&. For example, +DEBUG +is between +TRACE +and +INFO, but it\*(Aqs too verbose for regular operation and lacks possibly interesting messages for debugging\&. Almost always, when debugging an issue or reporting a bug, collect full level +TRACE +logs to get the full picture\&. .RE .PP \fIdomains\fR .RS 4 -The following log domains are available: PLATFORM, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS, TEAM, CONCHECK, DCB, DISPATCH, AUDIT, SYSTEMD, VPN_PLUGIN, PROXY\&. +Filter the messages by their topic\&. When debugging an issue, it\*(Aqs better to collect all logs (ALL +domain) upfront\&. The unnecessary parts can always be ignored later\&. +.sp +In the uncommon case to tune out certain topics, the following log domains are available: PLATFORM, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, INFINIBAND, FIREWALL, ADSL, BOND, VLAN, BRIDGE, DBUS_PROPS, TEAM, CONCHECK, DCB, DISPATCH, AUDIT, SYSTEMD, VPN_PLUGIN, PROXY\&. .sp In addition, these special domains can be used: NONE, ALL, DEFAULT, DHCP, IP\&. .sp -You can specify per\-domain log level overrides by adding a colon and a log level to any domain\&. E\&.g\&., "WIFI:DEBUG,WIFI_SCAN:OFF"\&. +You can specify per\-domain log level overrides by adding a colon and a log level to any domain\&. E\&.g\&., "WIFI:DEBUG,WIFI_SCAN:OFF"\&. Another example is +ALL,VPN_PLUGIN:TRACE +to enable all the logging there is (see about +VPN_PLUGIN +below)\&. .RE .PP .RS 4 diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index c1afaad0..cb6b40af 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -622,9 +622,40 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth <literal>logging</literal> section - This section controls NetworkManager's logging. Any - settings here are overridden by the - and command-line options. + + This section controls NetworkManager's logging. + Logging is very important to understand what NetworkManager is doing. + When you report a bug, do not unnecessarily filter or limit the log file. + Just enable level=TRACE and domains=ALL + to collect everything. + + + + Any settings here are overridden by the + and command-line options. + Logging can also be reconfigured at runtime with + nmcli general logging level "$LEVEL" domains "$DOMAINS". + However, often it is interesting to get a complete log from the + start. Especially, when debugging an issue, enable debug logging + in NetworkManager.conf and restart the service to enable verbose logging + early on. + + + + NetworkManager's logging aims not to contain private sensitive data + and you should be fine sharing the debug logs. Still, there will + be IP addresses and your network setup, if you consider that private + then review the log before sharing. Do not mangle the logfile in + a way that distorts the meaning too much. + + + + NetworkManager uses syslog or systemd-journald, depending on configuration. + In any case, debug logs are verbose and might be rate limited + or filtered by the logging daemon. For systemd-journald, see + RateLimitIntervalSec and RateLimitBurst + in journald.conf manual for how to disable that. + @@ -633,18 +664,33 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth The default logging verbosity level. One of OFF, ERR, WARN, INFO, - DEBUG, TRACE. The ERR - level logs only critical errors. WARN logs warnings that may - reflect operation. INFO logs various informational messages that - are useful for tracking state and operations. DEBUG enables - verbose logging for debugging purposes. TRACE enables even more - verbose logging then DEBUG level. Subsequent levels also log - all messages from earlier levels; thus setting the log level - to INFO also logs error and warning messages. + DEBUG, TRACE, + in order of verbosity. + + + OFF disables all logging. INFO + is the default verbosity for regular operation. TRACE + is for debugging. + + + The other levels are in most cases not useful. For example, DEBUG + is between TRACE and INFO, but it's too + verbose for regular operation and lacks possibly interesting messages for debugging. + Almost always, when debugging an issue or reporting a bug, collect full + level TRACE logs to get the full picture. + + domains - The following log domains are available: + + Filter the messages by their topic. When debugging + an issue, it's better to collect all logs (ALL domain) + upfront. The unnecessary parts can always be ignored + later. + + In the uncommon case to tune out certain topics, the following log + domains are available: PLATFORM, RFKILL, ETHER, WIFI, BT, MB, DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT, AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX, @@ -655,7 +701,12 @@ unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth ALL, DEFAULT, DHCP, IP. You can specify per-domain log level overrides by adding a colon and a log level to any domain. E.g., - "WIFI:DEBUG,WIFI_SCAN:OFF". + "WIFI:DEBUG,WIFI_SCAN:OFF". + Another example is ALL,VPN_PLUGIN:TRACE + to enable all the logging there is (see about VPN_PLUGIN + below). + + Domain descriptions: diff --git a/man/NetworkManager.xml b/man/NetworkManager.xml index ca3cd29d..8f878885 100644 --- a/man/NetworkManager.xml +++ b/man/NetworkManager.xml @@ -340,6 +340,7 @@ NetworkManager home page, NetworkManager.conf5, NetworkManager-dispatcher8, + NetworkManager-wait-online.service8, nmcli1, nmcli-examples7, nm-online1, diff --git a/man/meson.build b/man/meson.build index fea0b9db..c8146044 100644 --- a/man/meson.build +++ b/man/meson.build @@ -27,6 +27,7 @@ mans_xmls = [] mans = [ ['NetworkManager', '8'], ['NetworkManager-dispatcher', '8'], + ['NetworkManager-wait-online.service', '8'], ['NetworkManager.conf', '5'], ['nm-online', '1'], ['nmcli-examples', '7'], diff --git a/man/nm-cloud-setup.8 b/man/nm-cloud-setup.8 index 5e223431..6d5a7e1d 100644 --- a/man/nm-cloud-setup.8 +++ b/man/nm-cloud-setup.8 @@ -2,12 +2,12 @@ .\" Title: nm-cloud-setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Automatic Network Configuration in Cloud with NetworkManager -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.36\&.4" "Automatic Network Configuratio" +.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.37\&.92" "Automatic Network Configuratio" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-initrd-generator.8 b/man/nm-initrd-generator.8 index 0e74d95a..9eaf533b 100644 --- a/man/nm-initrd-generator.8 +++ b/man/nm-initrd-generator.8 @@ -2,12 +2,12 @@ .\" Title: nm-initrd-generator .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: System Administration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.36\&.4" "System Administration" +.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.37\&.92" "System Administration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-online.1 b/man/nm-online.1 index 63eb50e9..c3460319 100644 --- a/man/nm-online.1 +++ b/man/nm-online.1 @@ -2,12 +2,12 @@ .\" Title: nm-online .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" +.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -43,13 +43,8 @@ This tool is not very useful to call directly\&. It is however used by NetworkManager\-wait\-online\&.service with \-\-wait\-for\-startup -argument\&. This is used to delay the service and indirectly -network\-online\&.target, until networking is up\&. Don\*(Aqt order your own systemd services after -NetworkManager\-wait\-online\&.service -directly\&. Instead if necessary, order your services after -network\-online\&.target\&. Even better is to have your services react to network changes dynamically and don\*(Aqt order them with respect to -network\-online\&.target -at all\&. +argument (see +\fBNetworkManager-wait-online.service\fR(8))\&. .PP By default, connections have the ipv4\&.may\-fail @@ -81,19 +76,8 @@ Wait for NetworkManager startup to complete, rather than waiting for network con \fBnm\-online \-s\fR will just return immediately, regardless of the current network state\&. .sp -There are various ways to affect when startup complete is reached\&. For example, by setting a connection profile to autoconnect, such a profile possibly will activate during startup and thus delay startup complete being reached\&. Also, a profile is considered ready when it fully reached the logical -connected -state in NetworkManager\&. That means, properties like -ipv4\&.may\-fail -and -ipv6\&.may\-fail -affect whether a certain address family is required\&. Also, the connection property -connection\&.wait\-device\-timeout -affects whether to wait for the driver to detect a certain device\&. Generally, a failure of -NetworkManager\-wait\-online\&.service -indicates a configuration error, where NetworkManager won\*(Aqt be able to reach the desired connectivity state during startup\&. An example for that are bridge or bond master profiles, that get autoconnected but without activating any slaves\&. Such master devices hang in activating state indefinitely, and cause -NetworkManager\-wait\-online\&.service -to fail\&. +There are various ways to affect when startup complete is reached\&. For details see +\fBNetworkManager-wait-online.service\fR(8)\&. .RE .PP \fB\-t\fR | \fB\-\-timeout\fR \fIseconds\fR @@ -129,4 +113,5 @@ Unknown or unspecified error\&. .SH "SEE ALSO" .PP \fBnmcli\fR(1), -\fBNetworkManager\fR(8)\&. +\fBNetworkManager\fR(8), +\fBNetworkManager-wait-online.service\fR(8)\&. diff --git a/man/nm-online.xml b/man/nm-online.xml index a0db6b3d..87672f74 100644 --- a/man/nm-online.xml +++ b/man/nm-online.xml @@ -59,14 +59,8 @@ This tool is not very useful to call directly. It is however used by NetworkManager-wait-online.service with - --wait-for-startup argument. This is used to delay - the service and indirectly network-online.target, - until networking is up. Don't order your own systemd services after - NetworkManager-wait-online.service directly. Instead - if necessary, order your services after network-online.target. - Even better is to have your services react to network changes dynamically - and don't order them with respect to network-online.target - at all. + --wait-for-startup argument + (see NetworkManager-wait-online.service8). By default, connections have the ipv4.may-fail and @@ -118,18 +112,8 @@ nm-online -s will just return immediately, regardless of the current network state. There are various ways to affect when startup complete is reached. - For example, by setting a connection profile to autoconnect, such a profile - possibly will activate during startup and thus delay startup complete being reached. - Also, a profile is considered ready when it fully reached the logical connected - state in NetworkManager. That means, properties like ipv4.may-fail and ipv6.may-fail - affect whether a certain address family is required. Also, the connection property - connection.wait-device-timeout affects whether to wait for - the driver to detect a certain device. Generally, a failure of NetworkManager-wait-online.service - indicates a configuration error, where NetworkManager won't be able to reach the - desired connectivity state during startup. An example for that are bridge or bond master - profiles, that get autoconnected but without activating any slaves. Such master devices - hang in activating state indefinitely, and cause NetworkManager-wait-online.service - to fail. + For details see + NetworkManager-wait-online.service8. @@ -197,7 +181,9 @@ See Also nmcli1, - NetworkManager8. + NetworkManager8, + NetworkManager-wait-online.service8. + diff --git a/man/nm-openvswitch.7 b/man/nm-openvswitch.7 index 7d4e4ddc..975bd18d 100644 --- a/man/nm-openvswitch.7 +++ b/man/nm-openvswitch.7 @@ -2,12 +2,12 @@ .\" Title: nm-openvswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Open vSwitch support overview -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.36\&.4" "Open vSwitch support overview" +.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.37\&.92" "Open vSwitch support overview" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.5 b/man/nm-settings-dbus.5 index 48f7b30a..d664fa95 100644 --- a/man/nm-settings-dbus.5 +++ b/man/nm-settings-dbus.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-dbus .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" +.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -116,7 +116,7 @@ boolean T}:T{ TRUE T}:T{ -Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available\&. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection\&. Autoconnect happens when the circumstances are suitable\&. That means for example that the device is currently managed and not active\&. Autoconnect thus never replaces or competes with an already active profile\&. Note that autoconnect is not implemented for VPN profiles\&. See "secondaries" as an alternative to automatically connect VPN profiles\&. +Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available\&. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection\&. Autoconnect happens when the circumstances are suitable\&. That means for example that the device is currently managed and not active\&. Autoconnect thus never replaces or competes with an already active profile\&. Note that autoconnect is not implemented for VPN profiles\&. See "secondaries" as an alternative to automatically connect VPN profiles\&. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection\&.autoconnect\-priority" is chosen\&. If the priorities are equal, then the most recently connected profile is activated\&. If the profiles were not connected earlier or their "connection\&.timestamp" is identical, the choice is undefined\&. Depending on "connection\&.multi\-connect", a profile can (auto)connect only once at a time or multiple times\&. T} T{ autoconnect\-priority @@ -287,7 +287,7 @@ string T}:T{ \ \& T}:T{ -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\*(Aqs 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 \*(Aq$\*(Aq 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 \*(Aq$\*(Aq are treated verbatim, however are reserved for future use\&. You are thus advised to avoid \*(Aq$\*(Aq 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\&. +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\*(Aqs name is included, so that different interfaces yield different addresses\&. The per\-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key\&. See NetworkManager(8) manual about the secret\-key and the host identity\&. The \*(Aq$\*(Aq 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 \*(Aq$\*(Aq are treated verbatim, however are reserved for future use\&. You are thus advised to avoid \*(Aq$\*(Aq 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\&. T} T{ timestamp @@ -3458,7 +3458,7 @@ string T}:T{ \ \& T}:T{ -PAC script for the connection\&. +PAC script for the connection\&. This is an UTF\-8 encoded javascript code that defines a FindProxyForURL() function\&. T} T{ pac\-url diff --git a/man/nm-settings-dbus.xml b/man/nm-settings-dbus.xml index 6602acc1..590bd892 100644 --- a/man/nm-settings-dbus.xml +++ b/man/nm-settings-dbus.xml @@ -1,6 +1,6 @@ -nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.36.4nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription +nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.37.92nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will @@ -32,7 +32,7 @@ profile type. nmcli connection editor has also a built-in describe command that can display description of particular settings and properties of this page. - connection settingGeneral Connection Profile Settings.Key NameValue TypeDefault ValueValue Descriptionauth-retriesint32-1The 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.autoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles.autoconnect-priorityint320The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.autoconnect-retriesint32-1The 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.autoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)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.dns-over-tlsint32-1Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.gateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.idstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-namestringThe 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.lldpint32-1Whether LLDP is enabled for the connection.llmnrint32-1Whether 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.masterstringInterface name of the master device or UUID of the master connection.mdnsint32-1Whether 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.meteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlstringIf 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".multi-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionsarray of stringAn 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.read-onlybooleanFALSEFALSE 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.secondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstringThis 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.timestampuint640The 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).typestringBase 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).uuidstringA 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 "-").wait-device-timeoutint32-1Timeout 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.zonestringThe 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.6lowpan setting6LoWPAN Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.802-1x settingIEEE 802.1x Authentication Settings.Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesarray of stringList 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.anonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certbyte arrayContains 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.ca-cert-passwordstringThe 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.ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property. (see for flag values)ca-pathstringUTF-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.client-certbyte arrayContains 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.client-cert-passwordstringThe 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.client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property. (see for flag values)domain-matchstringConstraint 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.domain-suffix-matchstringConstraint 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.eaparray of stringThe 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.identitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionalbooleanFALSEWhether 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.pac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)password-rawbyte arrayPassword 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.password-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property. (see for flag values)phase1-auth-flagsuint320Specifies 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.phase1-fast-provisioningstringEnables 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.phase1-peaplabelstringForces 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.phase1-peapverstringForces 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.phase2-altsubject-matchesarray of stringList 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.phase2-authstringSpecifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.phase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certbyte arrayContains 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.phase2-ca-cert-passwordstringThe 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.phase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property. (see for flag values)phase2-ca-pathstringUTF-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.phase2-client-certbyte arrayContains 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.phase2-client-cert-passwordstringThe 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.phase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property. (see for flag values)phase2-domain-matchstringConstraint 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.phase2-domain-suffix-matchstringConstraint 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.phase2-private-keybyte arrayContains 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.phase2-private-key-passwordstringThe 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.phase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property. (see for flag values)phase2-subject-matchstringSubstring 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.pinstringPIN used for EAP authentication methods.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)private-keybyte arrayContains 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.private-key-passwordstringThe 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.private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property. (see for flag values)subject-matchstringSubstring 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.system-ca-certsbooleanFALSEWhen 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).adsl settingADSL Settings.Key NameValue TypeDefault ValueValue DescriptionencapsulationstringEncapsulation of ADSL connection. Can be "vcmux" or "llc".passwordstringPassword used to authenticate with the ADSL service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)protocolstringADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".usernamestringUsername used to authenticate with the ADSL service.vciuint320VCI of ADSL connectionvpiuint320VPI of ADSL connectionbluetooth settingBluetooth Settings.Key NameValue TypeDefault ValueValue Descriptionbdaddrbyte arrayThe Bluetooth address of the device.typestringEither "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.bond settingBonding Settings.Key NameValue TypeDefault ValueValue Descriptioninterface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.optionsdict of string to string{'mode': 'balance-rr'}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]).bridge settingBridging Settings.Key NameValue TypeDefault ValueValue Descriptionageing-timeuint32300The Ethernet MAC address aging time, in seconds.forward-delayuint3215The Spanning Tree Protocol (STP) forwarding delay, in seconds.group-addressbyte arrayIf 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.group-forward-maskuint320A 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.hello-timeuint322The Spanning Tree Protocol (STP) hello time, in seconds.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.mac-addressbyte arrayIf 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: 1max-ageuint3220The Spanning Tree Protocol (STP) maximum message age, in seconds.multicast-hash-maxuint324096Set maximum size of multicast hash table (value must be a power of 2).multicast-last-member-countuint322Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received.multicast-last-member-intervaluint64100Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received.multicast-membership-intervaluint6426000Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received.multicast-querierbooleanFALSEEnable or disable sending of multicast queries by the bridge. If not specified the option is disabled.multicast-querier-intervaluint6425500If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries.multicast-query-intervaluint6412500Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase.multicast-query-response-intervaluint641000Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge.multicast-query-use-ifaddrbooleanFALSEIf 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.multicast-routerstringSets 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).multicast-snoopingbooleanTRUEControls 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.multicast-startup-query-countuint322Set the number of IGMP queries to send during startup phase.multicast-startup-query-intervaluint643125Sets the time (in deciseconds) between queries sent out at startup to determine membership information.priorityuint3232768Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.stpbooleanTRUEControls whether Spanning Tree Protocol (STP) is enabled for this bridge.vlan-default-pviduint321The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames.vlan-filteringbooleanFALSEControl whether VLAN filtering is enabled on the bridge.vlan-protocolstringIf specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'.vlan-stats-enabledbooleanFALSEControls whether per-VLAN stats accounting is enabled.vlansarray of vardictArray 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.bridge-port settingBridge Port Settings.Key NameValue TypeDefault ValueValue Descriptionhairpin-modebooleanFALSEEnables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.path-costuint32100The Spanning Tree Protocol (STP) port cost for destinations via this port.priorityuint3232The Spanning Tree Protocol (STP) priority of this bridge port.vlansarray of vardictArray 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.cdma settingCDMA-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue Descriptionmtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.numberstringThe 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.passwordstringThe 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.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)usernamestringThe 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.dcb settingData Center Bridging Settings.Key NameValue TypeDefault ValueValue Descriptionapp-fcoe-flagsNMSettingDcbFlags (uint32)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).app-fcoe-modestringThe FCoE controller mode; either "fabric" or "vn2vn". Since 1.34, NULL is the default and means "fabric". Before 1.34, NULL was rejected as invalid and the default was "fabric".app-fcoe-priorityint32-1The 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.app-fip-flagsNMSettingDcbFlags (uint32)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).app-fip-priorityint32-1The 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.app-iscsi-flagsNMSettingDcbFlags (uint32)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).app-iscsi-priorityint32-1The 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.priority-bandwidtharray of uint32An 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.priority-flow-controlarray of uint32An 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.priority-flow-control-flagsNMSettingDcbFlags (uint32)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).priority-group-bandwidtharray of uint32An 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.priority-group-flagsNMSettingDcbFlags (uint32)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).priority-group-idarray of uint32An 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.priority-strict-bandwidtharray of uint32An 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.priority-traffic-classarray of uint32An 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.dummy settingDummy Link Settings.Key NameValue TypeDefault ValueValue Descriptionethtool settingEthtool Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptiongeneric settingGeneric Link Settings.Key NameValue TypeDefault ValueValue Descriptiongsm settingGSM-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue DescriptionapnstringThe 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.auto-configbooleanFALSEWhen 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.device-idstringThe 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.home-onlybooleanFALSEWhen TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.network-idstringThe 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.numberstringLegacy setting that used to help establishing PPP data sessions for GSM-based modems. Deprecated: 1passwordstringThe 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.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)pinstringIf 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.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)sim-idstringThe 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.sim-operator-idstringA 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.usernamestringThe 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.infiniband settingInfiniband Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf 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).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.p-keyint32-1The 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.parentstringThe 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".transport-modestringThe IP-over-InfiniBand transport mode. Either "datagram" or "connected".ipv4 settingIPv4 Settings.Key NameValue TypeDefault ValueValue Descriptionaddress-dataarray of vardictArray of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of array of uint32Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet.dad-timeoutint32-1Timeout 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.dhcp-client-idstringA string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.dhcp-fqdnstringIf 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.dhcp-hostnamestringIf 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.dhcp-hostname-flagsuint320Flags 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.dhcp-iaidstringA 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.dhcp-reject-serversarray of stringArray 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.dhcp-send-hostnamebooleanTRUEIf 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.dhcp-timeoutint320A 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.dhcp-vendor-class-identifierstringThe 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.28dnsarray of uint32Array of IP addresses of DNS servers (as network-byte-order integers)dns-optionsarray of stringArray 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. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS 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.dns-searcharray of stringArray 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.gatewaystringThe 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.ignore-auto-dnsbooleanFALSEWhen "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.ignore-auto-routesbooleanFALSEWhen "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.may-failbooleanTRUEIf 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.methodstringIP 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.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.required-timeoutint32-1The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero).route-dataarray of vardictArray of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The 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.route-tableuint320Enable 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.routesarray of array of uint32Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)ipv6 settingIPv6 Settings.Key NameValue TypeDefault ValueValue Descriptionaddr-gen-modeint321Configure 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.address-dataarray of vardictArray of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of legacy IPv6 address struct (a(ayuay))Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.dad-timeoutint32-1Timeout 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.dhcp-duidstringA 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.dhcp-hostnamestringIf 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.dhcp-hostname-flagsuint320Flags 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.dhcp-iaidstringA 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.dhcp-reject-serversarray of stringArray 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.dhcp-send-hostnamebooleanTRUEIf 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.dhcp-timeoutint320A 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.dnsarray of byte arrayArray of IP addresses of DNS servers (in network byte order)dns-optionsarray of stringArray 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. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS 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.dns-searcharray of stringArray 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.gatewaystringThe 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.ignore-auto-dnsbooleanFALSEWhen "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.ignore-auto-routesbooleanFALSEWhen "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.ip6-privacyNMSettingIP6ConfigPrivacy (int32)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.may-failbooleanTRUEIf 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.methodstringIP 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.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.ra-timeoutint320A 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.required-timeoutint32-1The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero).route-dataarray of vardictArray of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The 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.route-tableuint320Enable 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.routesarray of legacy IPv6 route struct (a(ayuayu))Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.tokenstringConfigure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode.ip-tunnel settingIP Tunneling Settings.Key NameValue TypeDefault ValueValue Descriptionencapsulation-limituint320How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels.flagsuint320Tunnel 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.flow-labeluint320The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels.input-keystringThe key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.localstringThe local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address.modeuint320The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or NM_IP_TUNNEL_MODE_GRE (2).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments.output-keystringThe key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.parentstringIf 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.path-mtu-discoverybooleanTRUEWhether to enable Path MTU Discovery on this tunnel.remotestringThe remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address.tosuint320The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets.ttluint320The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value.macsec settingMACSec Settings.Key NameValue TypeDefault ValueValue DescriptionencryptbooleanTRUEWhether the transmitted traffic must be encrypted.mka-cakstringThe pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement.mka-cak-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "mka-cak" property. (see for flag values)mka-cknstringThe pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement.modeint320Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained.parentstringIf 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.portint321The port component of the SCI (Secure Channel Identifier), between 1 and 65534.send-scibooleanTRUESpecifies whether the SCI (Secure Channel Identifier) is included in every packet.validationint322Specifies the validation mode for incoming frames.macvlan settingMAC VLAN Settings.Key NameValue TypeDefault ValueValue Descriptionmodeuint320The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device.parentstringIf 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.promiscuousbooleanTRUEWhether the interface should be put in promiscuous mode.tapbooleanFALSEWhether the interface should be a MACVTAP.match settingMatch settings.Key NameValue TypeDefault ValueValue Descriptiondriverarray of stringA 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.interface-namearray of stringA 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".kernel-command-linearray of stringA list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or unset, if prefixed with the exclamation mark). The argument must either be a single word, or an assignment (i.e. two words, joined by "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. Wildcard patterns are not supported. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the match.patharray of stringA 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.802-11-olpc-mesh settingOLPC Wireless Mesh Settings.Key NameValue TypeDefault ValueValue Descriptionchanneluint320Channel on which the mesh network to join is located.dhcp-anycast-addressbyte arrayAnycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request. This is currently only implemented by dhclient DHCP plugin.ssidbyte arraySSID of the mesh network to join.ovs-bridge settingOvsBridge Link Settings.Key NameValue TypeDefault ValueValue Descriptiondatapath-typestringThe data path type. One of "system", "netdev" or empty.fail-modestringThe bridge failure mode. One of "secure", "standalone" or empty.mcast-snooping-enablebooleanFALSEEnable or disable multicast snooping.rstp-enablebooleanFALSEEnable or disable RSTP.stp-enablebooleanFALSEEnable or disable STP.ovs-dpdk settingOvsDpdk Link Settings.Key NameValue TypeDefault ValueValue DescriptiondevargsstringOpen vSwitch DPDK device arguments.n-rxquint320Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures one queue.ovs-interface settingOpen vSwitch Interface Settings.Key NameValue TypeDefault ValueValue DescriptiontypestringThe interface type. Either "internal", "system", "patch", "dpdk", or empty.ovs-patch settingOvsPatch Link Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringSpecifies 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.ovs-port settingOvsPort Link Settings.Key NameValue TypeDefault ValueValue Descriptionbond-downdelayuint320The time port must be inactive in order to be considered down.bond-modestringBonding mode. One of "active-backup", "balance-slb", or "balance-tcp".bond-updelayuint320The time port must be active before it starts forwarding traffic.lacpstringLACP mode. One of "active", "off", or "passive".taguint320The VLAN tag in the range 0-4095.vlan-modestringThe VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk" or unset.ppp settingPoint-to-Point Protocol Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint320If 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.crtsctsbooleanFALSEIf 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.lcp-echo-failureuint320If 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.lcp-echo-intervaluint320If 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.mppe-statefulbooleanFALSEIf TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.mruuint320If 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.mtuuint320If non-zero, instruct pppd to send packets no larger than the specified size.no-vj-compbooleanFALSEIf TRUE, Van Jacobsen TCP header compression will not be requested.noauthbooleanTRUEIf 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.nobsdcompbooleanFALSEIf TRUE, BSD compression will not be requested.nodeflatebooleanFALSEIf TRUE, "deflate" compression will not be requested.refuse-chapbooleanFALSEIf TRUE, the CHAP authentication method will not be used.refuse-eapbooleanFALSEIf TRUE, the EAP authentication method will not be used.refuse-mschapbooleanFALSEIf TRUE, the MSCHAP authentication method will not be used.refuse-mschapv2booleanFALSEIf TRUE, the MSCHAPv2 authentication method will not be used.refuse-papbooleanFALSEIf TRUE, the PAP authentication method will not be used.require-mppebooleanFALSEIf 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.require-mppe-128booleanFALSEIf 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.pppoe settingPPP-over-Ethernet Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf 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.passwordstringPassword used to authenticate with the PPPoE service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)servicestringIf 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.usernamestringUsername used to authenticate with the PPPoE service.proxy settingWWW Proxy Settings.Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptstringPAC script for the connection.pac-urlstringPAC URL for obtaining PAC file.serial settingSerial Link Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint3257600Speed 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.bitsuint328Byte-width of the serial communication. The 8 in "8n1" for example.paritybyteThe connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.send-delayuint640Time to delay between each byte sent to the modem, in microseconds.stopbitsuint321Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.sriov settingSR-IOV settings.Key NameValue TypeDefault ValueValue Descriptionautoprobe-driversNMTernary (int32)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).total-vfsuint320The 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.vfsarray of vardictArray 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.tc settingLinux Traffic Control Settings.Key NameValue TypeDefault ValueValue Descriptionqdiscsarray of vardictArray of TC queueing disciplines. When the "tc" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the "net.core.default_qdisc" sysctl. If the "tc" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface.tfiltersarray of vardictArray of TC traffic filters. When the "tc" setting is present, filters from this property are applied upon activation. If the property is empty, NetworkManager removes all the filters. If the "tc" setting is not present, NetworkManager doesn't touch the filters present on the interface.team settingTeaming Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe 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.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.link-watchersarray of vardictLink 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.mcast-rejoin-countint32-1Corresponds to the teamd mcast_rejoin.count.mcast-rejoin-intervalint32-1Corresponds to the teamd mcast_rejoin.interval.notify-peers-countint32-1Corresponds to the teamd notify_peers.count.notify-peers-intervalint32-1Corresponds to the teamd notify_peers.interval.runnerstringCorresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random".runner-activebooleanTRUECorresponds to the teamd runner.active.runner-agg-select-policystringCorresponds to the teamd runner.agg_select_policy.runner-fast-ratebooleanFALSECorresponds to the teamd runner.fast_rate.runner-hwaddr-policystringCorresponds to the teamd runner.hwaddr_policy.runner-min-portsint32-1Corresponds to the teamd runner.min_ports.runner-sys-prioint32-1Corresponds to the teamd runner.sys_prio.runner-tx-balancerstringCorresponds to the teamd runner.tx_balancer.name.runner-tx-balancer-intervalint32-1Corresponds to the teamd runner.tx_balancer.interval.runner-tx-hasharray of stringCorresponds to the teamd runner.tx_hash.team-port settingTeam Port Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe 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.lacp-keyint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_key.lacp-prioint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_prio.link-watchersarray of vardictLink 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.prioint320Corresponds to the teamd ports.PORTIFNAME.prio.queue-idint32-1Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.stickybooleanFALSECorresponds to the teamd ports.PORTIFNAME.sticky.tun settingTunnel Settings.Key NameValue TypeDefault ValueValue DescriptiongroupstringThe group ID which will own the device. If set to NULL everyone will be able to use the device.modeuint321The 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.multi-queuebooleanFALSEIf 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.ownerstringThe user ID which will own the device. If set to NULL everyone will be able to use the device.pibooleanFALSEIf TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.vnet-hdrbooleanFALSEIf TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.user settingGeneral User Profile Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}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.vlan settingVLAN Settings.Key NameValue TypeDefault ValueValue Descriptionegress-priority-maparray of stringFor 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".flagsNMVlanFlags (uint32)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.iduint320The 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.ingress-priority-maparray of stringFor 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".interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.parentstringIf 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.vpn settingVPN Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.persistentbooleanFALSEIf 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.secretsdict of string to string{}Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.service-typestringD-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.timeoutuint320Timeout 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.user-namestringIf 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.vrf settingVRF settings.Key NameValue TypeDefault ValueValue Descriptiontableuint320The routing table for this VRF.vxlan settingVXLAN Settings.Key NameValue TypeDefault ValueValue Descriptionageinguint32300Specifies the lifetime in seconds of FDB entries learnt by the kernel.destination-portuint328472Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint.iduint320Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use.l2-missbooleanFALSESpecifies whether netlink LL ADDR miss notifications are generated.l3-missbooleanFALSESpecifies whether netlink IP ADDR miss notifications are generated.learningbooleanTRUESpecifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database.limituint320Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries.localstringIf given, specifies the source IP address to use in outgoing packets.parentstringIf given, specifies the parent interface name or parent connection UUID.proxybooleanFALSESpecifies whether ARP proxy is turned on.remotestringSpecifies 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.rscbooleanFALSESpecifies whether route short circuit is turned on.source-port-maxuint320Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint.source-port-minuint320Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint.tosuint320Specifies the TOS value to use in outgoing packets.ttluint320Specifies the time-to-live value to use in outgoing packets.wifi-p2p settingWi-Fi P2P Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThe P2P device that should be connected to. Currently, this is the only way to create or join a group.wfd-iesbyte arrayThe 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.wps-methoduint320Flags 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.wimax settingWiMax Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf 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: 1network-namestringNetwork Service Provider (NSP) name of the WiMAX network this connection should use. Deprecated: 1802-3-ethernet settingWired Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptionaccept-all-mac-addressesNMTernary (int32)When TRUE, setup the interface to accept packets for all MAC addresses. This is enabling the kernel interface flag IFF_PROMISC. When FALSE, the interface will only accept the packets with the interface destination mac address or broadcast.assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".auto-negotiatebooleanFALSEWhen 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.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".duplexstringWhen 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.generate-mac-address-maskstringWith "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.mac-addressbyte arrayIf 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).mac-address-blacklistarray of stringIf 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).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.portstringSpecific 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.s390-nettypestrings390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.s390-optionsdict of string to string{}Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface.s390-subchannelsarray of stringIdentifies 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.speeduint320When 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.wake-on-lanuint321The 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).wake-on-lan-passwordstringIf specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.wireguard settingWireGuard Settings.Key NameValue TypeDefault ValueValue Descriptionfwmarkuint320The 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.ip4-auto-default-routeNMTernary (int32)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.ip6-auto-default-routeNMTernary (int32)Like ip4-auto-default-route, but for the IPv6 default route.listen-portuint320The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up.mtuuint320If 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.peer-routesbooleanTRUEWhether 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.peersarray of 'a{sv}'Array of dictionaries for the WireGuard peers.private-keystringThe 256 bit private-key in base64 encoding.private-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key" property. (see for flag values)802-11-wireless settingWi-Fi Settings.Key NameValue TypeDefault ValueValue Descriptionap-isolationNMTernary (int32)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).assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".bandstring802.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.bssidbyte arrayIf 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.channeluint320Wireless 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.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".generate-mac-address-maskstringWith "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.hiddenbooleanFALSEIf 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.mac-addressbyte arrayIf 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).mac-address-blacklistarray of stringA 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").mac-address-randomizationuint320One 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: 1modestringWi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.powersaveuint320One 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.rateuint320If 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.securityThis property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.seen-bssidsarray of stringA 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.ssidbyte arraySSID of the Wi-Fi network. Must be specified.tx-poweruint320If 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.wake-on-wlanuint321The 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).802-11-wireless-security settingWi-Fi Security Settings.Key NameValue TypeDefault ValueValue Descriptionauth-algstringWhen 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.filsint320Indicates 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.grouparray of stringA 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".key-mgmtstringKey management used for the connection. One of "none" (WEP or no password protection), "ieee8021x" (Dynamic WEP), "owe" (Opportunistic Wireless Encryption), "wpa-psk" (WPA2 + WPA3 personal), "sae" (WPA3 personal only), "wpa-eap" (WPA2 + WPA3 enterprise) or "wpa-eap-suite-b-192" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security.leap-passwordstringThe login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").leap-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "leap-password" property. (see for flag values)leap-usernamestringThe login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").pairwisearray of stringA 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".pmfint320Indicates 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.protoarray of stringList 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.pskstringPre-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.psk-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "psk" property. (see for flag values)wep-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties. (see for flag values)wep-key-typeNMWepKeyType (uint32)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.wep-key0stringIndex 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.wep-key1stringIndex 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.wep-key2stringIndex 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.wep-key3stringIndex 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.wep-tx-keyidxuint320When 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.wps-methoduint320Flags 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.wpan settingIEEE 802.15.4 (WPAN) MAC Settings.Key NameValue TypeDefault ValueValue Descriptionchannelint32-1IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to".mac-addressstringIf specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches.pageint32-1IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to".pan-iduint3265535IEEE 802.15.4 Personal Area Network (PAN) identifier.short-addressuint3265535Short IEEE 802.15.4 address to be used within a restricted environment.bond-port settingBond Port Settings.Key NameValue TypeDefault ValueValue Descriptionqueue-iduint320The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device.hostname settingHostname settings.Key NameValue TypeDefault ValueValue Descriptionfrom-dhcpNMTernary (int32)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).from-dns-lookupNMTernary (int32)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).only-from-defaultNMTernary (int32)If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).priorityint320The 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.ovs-external-ids settingOVS External IDs Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with exernal-ids for OVS.veth settingVeth Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThis property specifies the peer interface name of the veth. This property is mandatory.Secret flag types: + connection settingGeneral Connection Profile Settings.Key NameValue TypeDefault ValueValue Descriptionauth-retriesint32-1The 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.autoconnectbooleanTRUEWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times.autoconnect-priorityint320The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.autoconnect-retriesint32-1The 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.autoconnect-slavesNMSettingConnectionAutoconnectSlaves (int32)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.dns-over-tlsint32-1Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: "yes" (2) use DNSOverTls and disabled fallback, "opportunistic" (1) use DNSOverTls but allow fallback to unencrypted resolution, "no" (0) don't ever use DNSOverTls. If unspecified "default" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.gateway-ping-timeoutuint320If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping.idstringA human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".interface-namestringThe 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.lldpint32-1Whether LLDP is enabled for the connection.llmnrint32-1Whether 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.masterstringInterface name of the master device or UUID of the master connection.mdnsint32-1Whether 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.meteredNMMetered (int32)Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.mud-urlstringIf 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".multi-connectint320Specifies whether the profile can be active multiple times at a particular moment. The value is of type NMConnectionMultiConnect.permissionsarray of stringAn 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.read-onlybooleanFALSEFALSE 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.secondariesarray of stringList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.slave-typestringSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.stable-idstringThis 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. See NetworkManager(8) manual about the secret-key and the host identity. 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.timestampuint640The 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).typestringBase 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).uuidstringA 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 "-").wait-device-timeoutint32-1Timeout 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.zonestringThe 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.6lowpan setting6LoWPAN Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf given, specifies the parent interface name or parent connection UUID from which this 6LowPAN interface should be created.802-1x settingIEEE 802.1x Authentication Settings.Key NameValue TypeDefault ValueValue Descriptionaltsubject-matchesarray of stringList 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.anonymous-identitystringAnonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.auth-timeoutint320A timeout for the authentication. Zero means the global default; if the global default is not set, the authentication timeout is 25 seconds.ca-certbyte arrayContains 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.ca-cert-passwordstringThe 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.ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "ca-cert-password" property. (see for flag values)ca-pathstringUTF-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.client-certbyte arrayContains 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.client-cert-passwordstringThe 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.client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "client-cert-password" property. (see for flag values)domain-matchstringConstraint 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.domain-suffix-matchstringConstraint 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.eaparray of stringThe 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.identitystringIdentity string for EAP authentication methods. Often the user's user or login name.optionalbooleanFALSEWhether 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.pac-filestringUTF-8 encoded file path containing PAC for EAP-FAST.passwordstringUTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)password-rawbyte arrayPassword 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.password-raw-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password-raw" property. (see for flag values)phase1-auth-flagsuint320Specifies 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.phase1-fast-provisioningstringEnables 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.phase1-peaplabelstringForces 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.phase1-peapverstringForces 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.phase2-altsubject-matchesarray of stringList 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.phase2-authstringSpecifies the allowed "phase 2" inner authentication method when an EAP method that uses an inner TLS tunnel is specified in the "eap" property. For TTLS this property selects one of the supported non-EAP inner methods: "pap", "chap", "mschap", "mschapv2" while "phase2-autheap" selects an EAP inner method. For PEAP this selects an inner EAP method, one of: "gtc", "otp", "md5" and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details. Both "phase2-auth" and "phase2-autheap" cannot be specified.phase2-autheapstringSpecifies the allowed "phase 2" inner EAP-based authentication method when TTLS is specified in the "eap" property. Recognized EAP-based "phase 2" methods are "md5", "mschapv2", "otp", "gtc", and "tls". Each "phase 2" inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details.phase2-ca-certbyte arrayContains 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.phase2-ca-cert-passwordstringThe 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.phase2-ca-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-ca-cert-password" property. (see for flag values)phase2-ca-pathstringUTF-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.phase2-client-certbyte arrayContains 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.phase2-client-cert-passwordstringThe 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.phase2-client-cert-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-client-cert-password" property. (see for flag values)phase2-domain-matchstringConstraint 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.phase2-domain-suffix-matchstringConstraint 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.phase2-private-keybyte arrayContains 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.phase2-private-key-passwordstringThe 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.phase2-private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "phase2-private-key-password" property. (see for flag values)phase2-subject-matchstringSubstring 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.pinstringPIN used for EAP authentication methods.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)private-keybyte arrayContains 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.private-key-passwordstringThe 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.private-key-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key-password" property. (see for flag values)subject-matchstringSubstring 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.system-ca-certsbooleanFALSEWhen 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).adsl settingADSL Settings.Key NameValue TypeDefault ValueValue DescriptionencapsulationstringEncapsulation of ADSL connection. Can be "vcmux" or "llc".passwordstringPassword used to authenticate with the ADSL service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)protocolstringADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".usernamestringUsername used to authenticate with the ADSL service.vciuint320VCI of ADSL connectionvpiuint320VPI of ADSL connectionbluetooth settingBluetooth Settings.Key NameValue TypeDefault ValueValue Descriptionbdaddrbyte arrayThe Bluetooth address of the device.typestringEither "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.bond settingBonding Settings.Key NameValue TypeDefault ValueValue Descriptioninterface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.optionsdict of string to string{'mode': 'balance-rr'}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]).bridge settingBridging Settings.Key NameValue TypeDefault ValueValue Descriptionageing-timeuint32300The Ethernet MAC address aging time, in seconds.forward-delayuint3215The Spanning Tree Protocol (STP) forwarding delay, in seconds.group-addressbyte arrayIf 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.group-forward-maskuint320A 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.hello-timeuint322The Spanning Tree Protocol (STP) hello time, in seconds.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.mac-addressbyte arrayIf 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: 1max-ageuint3220The Spanning Tree Protocol (STP) maximum message age, in seconds.multicast-hash-maxuint324096Set maximum size of multicast hash table (value must be a power of 2).multicast-last-member-countuint322Set the number of queries the bridge will send before stopping forwarding a multicast group after a "leave" message has been received.multicast-last-member-intervaluint64100Set interval (in deciseconds) between queries to find remaining members of a group, after a "leave" message is received.multicast-membership-intervaluint6426000Set delay (in deciseconds) after which the bridge will leave a group, if no membership reports for this group are received.multicast-querierbooleanFALSEEnable or disable sending of multicast queries by the bridge. If not specified the option is disabled.multicast-querier-intervaluint6425500If no queries are seen after this delay (in deciseconds) has passed, the bridge will start to send its own queries.multicast-query-intervaluint6412500Interval (in deciseconds) between queries sent by the bridge after the end of the startup phase.multicast-query-response-intervaluint641000Set the Max Response Time/Max Response Delay (in deciseconds) for IGMP/MLD queries sent by the bridge.multicast-query-use-ifaddrbooleanFALSEIf 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.multicast-routerstringSets 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).multicast-snoopingbooleanTRUEControls 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.multicast-startup-query-countuint322Set the number of IGMP queries to send during startup phase.multicast-startup-query-intervaluint643125Sets the time (in deciseconds) between queries sent out at startup to determine membership information.priorityuint3232768Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.stpbooleanTRUEControls whether Spanning Tree Protocol (STP) is enabled for this bridge.vlan-default-pviduint321The default PVID for the ports of the bridge, that is the VLAN id assigned to incoming untagged frames.vlan-filteringbooleanFALSEControl whether VLAN filtering is enabled on the bridge.vlan-protocolstringIf specified, the protocol used for VLAN filtering. Supported values are: '802.1Q', '802.1ad'. If not specified the default value is '802.1Q'.vlan-stats-enabledbooleanFALSEControls whether per-VLAN stats accounting is enabled.vlansarray of vardictArray 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.bridge-port settingBridge Port Settings.Key NameValue TypeDefault ValueValue Descriptionhairpin-modebooleanFALSEEnables or disables "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.path-costuint32100The Spanning Tree Protocol (STP) port cost for destinations via this port.priorityuint3232The Spanning Tree Protocol (STP) priority of this bridge port.vlansarray of vardictArray 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.cdma settingCDMA-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue Descriptionmtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.numberstringThe 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.passwordstringThe 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.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)usernamestringThe 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.dcb settingData Center Bridging Settings.Key NameValue TypeDefault ValueValue Descriptionapp-fcoe-flagsNMSettingDcbFlags (uint32)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).app-fcoe-modestringThe FCoE controller mode; either "fabric" or "vn2vn". Since 1.34, NULL is the default and means "fabric". Before 1.34, NULL was rejected as invalid and the default was "fabric".app-fcoe-priorityint32-1The 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.app-fip-flagsNMSettingDcbFlags (uint32)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).app-fip-priorityint32-1The 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.app-iscsi-flagsNMSettingDcbFlags (uint32)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).app-iscsi-priorityint32-1The 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.priority-bandwidtharray of uint32An 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.priority-flow-controlarray of uint32An 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.priority-flow-control-flagsNMSettingDcbFlags (uint32)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).priority-group-bandwidtharray of uint32An 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.priority-group-flagsNMSettingDcbFlags (uint32)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).priority-group-idarray of uint32An 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.priority-strict-bandwidtharray of uint32An 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.priority-traffic-classarray of uint32An 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.dummy settingDummy Link Settings.Key NameValue TypeDefault ValueValue Descriptionethtool settingEthtool Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptiongeneric settingGeneric Link Settings.Key NameValue TypeDefault ValueValue Descriptiongsm settingGSM-based Mobile Broadband Settings.Key NameValue TypeDefault ValueValue DescriptionapnstringThe 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.auto-configbooleanFALSEWhen 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.device-idstringThe 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.home-onlybooleanFALSEWhen TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.network-idstringThe 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.numberstringLegacy setting that used to help establishing PPP data sessions for GSM-based modems. Deprecated: 1passwordstringThe 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.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)pinstringIf 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.pin-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "pin" property. (see for flag values)sim-idstringThe 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.sim-operator-idstringA 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.usernamestringThe 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.infiniband settingInfiniband Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf 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).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.p-keyint32-1The 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.parentstringThe 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".transport-modestringThe IP-over-InfiniBand transport mode. Either "datagram" or "connected".ipv4 settingIPv4 Settings.Key NameValue TypeDefault ValueValue Descriptionaddress-dataarray of vardictArray of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of array of uint32Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet.dad-timeoutint32-1Timeout 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.dhcp-client-idstringA string sent to the DHCP server to identify the local machine which the DHCP server may use to customize the DHCP lease and options. When the property is a hex string ('aa:bb:cc') it is interpreted as a binary client ID, in which case the first byte is assumed to be the 'type' field as per RFC 2132 section 9.14 and the remaining bytes may be an hardware address (e.g. '01:xx:xx:xx:xx:xx:xx' where 1 is the Ethernet ARP type and the rest is a MAC address). If the property is not a hex string it is considered as a non-hardware-address client ID and the 'type' field is set to 0. The special values "mac" and "perm-mac" are supported, which use the current or permanent MAC address of the device to generate a client identifier with type ethernet (01). Currently, these options only work for ethernet type of links. The special value "ipv6-duid" uses the DUID from "ipv6.dhcp-duid" property as an RFC4361-compliant client identifier. As IAID it uses "ipv4.dhcp-iaid" and falls back to "ipv6.dhcp-iaid" if unset. The special value "duid" generates a RFC4361-compliant client identifier based on "ipv4.dhcp-iaid" and uses a DUID generated by hashing /etc/machine-id. The special value "stable" is supported to generate a type 0 client identifier based on the stable-id (see connection.stable-id) and a per-host key. If you set the stable-id, you may want to include the "${DEVICE}" or "${MAC}" specifier to get a per-device key. If unset, a globally configured default is used. If still unset, the default depends on the DHCP plugin.dhcp-fqdnstringIf 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.dhcp-hostnamestringIf 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.dhcp-hostname-flagsuint320Flags 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.dhcp-iaidstringA 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.dhcp-reject-serversarray of stringArray 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.dhcp-send-hostnamebooleanTRUEIf 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.dhcp-timeoutint320A 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.dhcp-vendor-class-identifierstringThe 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.28dnsarray of uint32Array of IP addresses of DNS servers (as network-byte-order integers)dns-optionsarray of stringArray 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. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS 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.dns-searcharray of stringArray 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.gatewaystringThe 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.ignore-auto-dnsbooleanFALSEWhen "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.ignore-auto-routesbooleanFALSEWhen "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.may-failbooleanTRUEIf 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.methodstringIP 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.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.required-timeoutint32-1The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero).route-dataarray of vardictArray of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The 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.route-tableuint320Enable 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.routesarray of array of uint32Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv4 route structures. Each IPv4 route structure is composed of 4 32-bit values; the first being the destination IPv4 network or address (network byte order), the second the destination network or address prefix (1 - 32), the third being the next-hop (network byte order) if any, and the fourth being the route metric. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)ipv6 settingIPv6 Settings.Key NameValue TypeDefault ValueValue Descriptionaddr-gen-modeint321Configure 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.address-dataarray of vardictArray of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.addressesarray of legacy IPv6 address struct (a(ayuay))Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.dad-timeoutint32-1Timeout 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.dhcp-duidstringA 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.dhcp-hostnamestringIf 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.dhcp-hostname-flagsuint320Flags 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.dhcp-iaidstringA 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.dhcp-reject-serversarray of stringArray 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.dhcp-send-hostnamebooleanTRUEIf 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.dhcp-timeoutint320A 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.dnsarray of byte arrayArray of IP addresses of DNS servers (in network byte order)dns-optionsarray of stringArray 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. When using a caching DNS plugin (dnsmasq or systemd-resolved in NetworkManager.conf) then "edns0" and "trust-ad" are automatically added.dns-priorityint320DNS 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.dns-searcharray of stringArray 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.gatewaystringThe 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.ignore-auto-dnsbooleanFALSEWhen "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.ignore-auto-routesbooleanFALSEWhen "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.ip6-privacyNMSettingIP6ConfigPrivacy (int32)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.may-failbooleanTRUEIf 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.methodstringIP 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.never-defaultbooleanFALSEIf TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.ra-timeoutint320A 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.required-timeoutint32-1The minimum time interval in milliseconds for which dynamic IP configuration should be tried before the connection succeeds. This property is useful for example if both IPv4 and IPv6 are enabled and are allowed to fail. Normally the connection succeeds as soon as one of the two address families completes; by setting a required timeout for e.g. IPv4, one can ensure that even if IP6 succeeds earlier than IPv4, NetworkManager waits some time for IPv4 before the connection becomes active. Note that if "may-fail" is FALSE for the same address family, this property has no effect as NetworkManager needs to wait for the full DHCP timeout. A zero value means that no required timeout is present, -1 means the default value (either configuration ipvx.required-timeout override or zero).route-dataarray of vardictArray of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.route-metricint64-1The 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.route-tableuint320Enable 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.routesarray of legacy IPv6 route struct (a(ayuayu))Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.tokenstringConfigure the token for draft-chown-6man-tokenised-ipv6-identifiers-02 IPv6 tokenized interface identifiers. Useful with eui64 addr-gen-mode.ip-tunnel settingIP Tunneling Settings.Key NameValue TypeDefault ValueValue Descriptionencapsulation-limituint320How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels.flagsuint320Tunnel 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.flow-labeluint320The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels.input-keystringThe key used for tunnel input packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.localstringThe local endpoint of the tunnel; the value can be empty, otherwise it must contain an IPv4 or IPv6 address.modeuint320The tunneling mode, for example NM_IP_TUNNEL_MODE_IPIP (1) or NM_IP_TUNNEL_MODE_GRE (2).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple fragments.output-keystringThe key used for tunnel output packets; the property is valid only for certain tunnel modes (GRE, IP6GRE). If empty, no key is used.parentstringIf 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.path-mtu-discoverybooleanTRUEWhether to enable Path MTU Discovery on this tunnel.remotestringThe remote endpoint of the tunnel; the value must contain an IPv4 or IPv6 address.tosuint320The type of service (IPv4) or traffic class (IPv6) field to be set on tunneled packets.ttluint320The TTL to assign to tunneled packets. 0 is a special value meaning that packets inherit the TTL value.macsec settingMACSec Settings.Key NameValue TypeDefault ValueValue DescriptionencryptbooleanTRUEWhether the transmitted traffic must be encrypted.mka-cakstringThe pre-shared CAK (Connectivity Association Key) for MACsec Key Agreement.mka-cak-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "mka-cak" property. (see for flag values)mka-cknstringThe pre-shared CKN (Connectivity-association Key Name) for MACsec Key Agreement.modeint320Specifies how the CAK (Connectivity Association Key) for MKA (MACsec Key Agreement) is obtained.parentstringIf 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.portint321The port component of the SCI (Secure Channel Identifier), between 1 and 65534.send-scibooleanTRUESpecifies whether the SCI (Secure Channel Identifier) is included in every packet.validationint322Specifies the validation mode for incoming frames.macvlan settingMAC VLAN Settings.Key NameValue TypeDefault ValueValue Descriptionmodeuint320The macvlan mode, which specifies the communication mechanism between multiple macvlans on the same lower device.parentstringIf 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.promiscuousbooleanTRUEWhether the interface should be put in promiscuous mode.tapbooleanFALSEWhether the interface should be a MACVTAP.match settingMatch settings.Key NameValue TypeDefault ValueValue Descriptiondriverarray of stringA 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.interface-namearray of stringA 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".kernel-command-linearray of stringA list of kernel command line arguments to match. This may be used to check whether a specific kernel command line option is set (or unset, if prefixed with the exclamation mark). The argument must either be a single word, or an assignment (i.e. two words, joined by "="). In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is looked for with right and left hand side matching. Wildcard patterns are not supported. See NMSettingMatch:interface-name for how special characters '|', '&', '!' and '\\' are used for optional and mandatory matches and inverting the match.patharray of stringA 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.802-11-olpc-mesh settingOLPC Wireless Mesh Settings.Key NameValue TypeDefault ValueValue Descriptionchanneluint320Channel on which the mesh network to join is located.dhcp-anycast-addressbyte arrayAnycast DHCP MAC address used when requesting an IP address via DHCP. The specific anycast address used determines which DHCP server class answers the request. This is currently only implemented by dhclient DHCP plugin.ssidbyte arraySSID of the mesh network to join.ovs-bridge settingOvsBridge Link Settings.Key NameValue TypeDefault ValueValue Descriptiondatapath-typestringThe data path type. One of "system", "netdev" or empty.fail-modestringThe bridge failure mode. One of "secure", "standalone" or empty.mcast-snooping-enablebooleanFALSEEnable or disable multicast snooping.rstp-enablebooleanFALSEEnable or disable RSTP.stp-enablebooleanFALSEEnable or disable STP.ovs-dpdk settingOvsDpdk Link Settings.Key NameValue TypeDefault ValueValue DescriptiondevargsstringOpen vSwitch DPDK device arguments.n-rxquint320Open vSwitch DPDK number of rx queues. Defaults to zero which means to leave the parameter in OVS unspecified and effectively configures one queue.ovs-interface settingOpen vSwitch Interface Settings.Key NameValue TypeDefault ValueValue DescriptiontypestringThe interface type. Either "internal", "system", "patch", "dpdk", or empty.ovs-patch settingOvsPatch Link Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringSpecifies 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.ovs-port settingOvsPort Link Settings.Key NameValue TypeDefault ValueValue Descriptionbond-downdelayuint320The time port must be inactive in order to be considered down.bond-modestringBonding mode. One of "active-backup", "balance-slb", or "balance-tcp".bond-updelayuint320The time port must be active before it starts forwarding traffic.lacpstringLACP mode. One of "active", "off", or "passive".taguint320The VLAN tag in the range 0-4095.vlan-modestringThe VLAN mode. One of "access", "native-tagged", "native-untagged", "trunk" or unset.ppp settingPoint-to-Point Protocol Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint320If 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.crtsctsbooleanFALSEIf 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.lcp-echo-failureuint320If 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.lcp-echo-intervaluint320If 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.mppe-statefulbooleanFALSEIf TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.mruuint320If 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.mtuuint320If non-zero, instruct pppd to send packets no larger than the specified size.no-vj-compbooleanFALSEIf TRUE, Van Jacobsen TCP header compression will not be requested.noauthbooleanTRUEIf 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.nobsdcompbooleanFALSEIf TRUE, BSD compression will not be requested.nodeflatebooleanFALSEIf TRUE, "deflate" compression will not be requested.refuse-chapbooleanFALSEIf TRUE, the CHAP authentication method will not be used.refuse-eapbooleanFALSEIf TRUE, the EAP authentication method will not be used.refuse-mschapbooleanFALSEIf TRUE, the MSCHAP authentication method will not be used.refuse-mschapv2booleanFALSEIf TRUE, the MSCHAPv2 authentication method will not be used.refuse-papbooleanFALSEIf TRUE, the PAP authentication method will not be used.require-mppebooleanFALSEIf 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.require-mppe-128booleanFALSEIf 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.pppoe settingPPP-over-Ethernet Settings.Key NameValue TypeDefault ValueValue DescriptionparentstringIf 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.passwordstringPassword used to authenticate with the PPPoE service.password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "password" property. (see for flag values)servicestringIf 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.usernamestringUsername used to authenticate with the PPPoE service.proxy settingWWW Proxy Settings.Key NameValue TypeDefault ValueValue Descriptionbrowser-onlybooleanFALSEWhether the proxy configuration is for browser only.methodint320Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)pac-scriptstringPAC script for the connection. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function.pac-urlstringPAC URL for obtaining PAC file.serial settingSerial Link Settings.Key NameValue TypeDefault ValueValue Descriptionbauduint3257600Speed 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.bitsuint328Byte-width of the serial communication. The 8 in "8n1" for example.paritybyteThe connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.send-delayuint640Time to delay between each byte sent to the modem, in microseconds.stopbitsuint321Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.sriov settingSR-IOV settings.Key NameValue TypeDefault ValueValue Descriptionautoprobe-driversNMTernary (int32)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).total-vfsuint320The 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.vfsarray of vardictArray 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.tc settingLinux Traffic Control Settings.Key NameValue TypeDefault ValueValue Descriptionqdiscsarray of vardictArray of TC queueing disciplines. When the "tc" setting is present, qdiscs from this property are applied upon activation. If the property is empty, all qdiscs are removed and the device will only have the default qdisc assigned by kernel according to the "net.core.default_qdisc" sysctl. If the "tc" setting is not present, NetworkManager doesn't touch the qdiscs present on the interface.tfiltersarray of vardictArray of TC traffic filters. When the "tc" setting is present, filters from this property are applied upon activation. If the property is empty, NetworkManager removes all the filters. If the "tc" setting is not present, NetworkManager doesn't touch the filters present on the interface.team settingTeaming Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe 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.interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.link-watchersarray of vardictLink 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.mcast-rejoin-countint32-1Corresponds to the teamd mcast_rejoin.count.mcast-rejoin-intervalint32-1Corresponds to the teamd mcast_rejoin.interval.notify-peers-countint32-1Corresponds to the teamd notify_peers.count.notify-peers-intervalint32-1Corresponds to the teamd notify_peers.interval.runnerstringCorresponds to the teamd runner.name. Permitted values are: "roundrobin", "broadcast", "activebackup", "loadbalance", "lacp", "random".runner-activebooleanTRUECorresponds to the teamd runner.active.runner-agg-select-policystringCorresponds to the teamd runner.agg_select_policy.runner-fast-ratebooleanFALSECorresponds to the teamd runner.fast_rate.runner-hwaddr-policystringCorresponds to the teamd runner.hwaddr_policy.runner-min-portsint32-1Corresponds to the teamd runner.min_ports.runner-sys-prioint32-1Corresponds to the teamd runner.sys_prio.runner-tx-balancerstringCorresponds to the teamd runner.tx_balancer.name.runner-tx-balancer-intervalint32-1Corresponds to the teamd runner.tx_balancer.interval.runner-tx-hasharray of stringCorresponds to the teamd runner.tx_hash.team-port settingTeam Port Settings.Key NameValue TypeDefault ValueValue DescriptionconfigstringThe 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.lacp-keyint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_key.lacp-prioint32-1Corresponds to the teamd ports.PORTIFNAME.lacp_prio.link-watchersarray of vardictLink 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.prioint320Corresponds to the teamd ports.PORTIFNAME.prio.queue-idint32-1Corresponds to the teamd ports.PORTIFNAME.queue_id. When set to -1 means the parameter is skipped from the json config.stickybooleanFALSECorresponds to the teamd ports.PORTIFNAME.sticky.tun settingTunnel Settings.Key NameValue TypeDefault ValueValue DescriptiongroupstringThe group ID which will own the device. If set to NULL everyone will be able to use the device.modeuint321The 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.multi-queuebooleanFALSEIf 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.ownerstringThe user ID which will own the device. If set to NULL everyone will be able to use the device.pibooleanFALSEIf TRUE the interface will prepend a 4 byte header describing the physical interface to the packets.vnet-hdrbooleanFALSEIf TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.user settingGeneral User Profile Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}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.vlan settingVLAN Settings.Key NameValue TypeDefault ValueValue Descriptionegress-priority-maparray of stringFor 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".flagsNMVlanFlags (uint32)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.iduint320The 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.ingress-priority-maparray of stringFor 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".interface-namestringDeprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.parentstringIf 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.vpn settingVPN Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.persistentbooleanFALSEIf 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.secretsdict of string to string{}Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings.service-typestringD-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.timeoutuint320Timeout 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.user-namestringIf 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.vrf settingVRF settings.Key NameValue TypeDefault ValueValue Descriptiontableuint320The routing table for this VRF.vxlan settingVXLAN Settings.Key NameValue TypeDefault ValueValue Descriptionageinguint32300Specifies the lifetime in seconds of FDB entries learnt by the kernel.destination-portuint328472Specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint.iduint320Specifies the VXLAN Network Identifier (or VXLAN Segment Identifier) to use.l2-missbooleanFALSESpecifies whether netlink LL ADDR miss notifications are generated.l3-missbooleanFALSESpecifies whether netlink IP ADDR miss notifications are generated.learningbooleanTRUESpecifies whether unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database.limituint320Specifies the maximum number of FDB entries. A value of zero means that the kernel will store unlimited entries.localstringIf given, specifies the source IP address to use in outgoing packets.parentstringIf given, specifies the parent interface name or parent connection UUID.proxybooleanFALSESpecifies whether ARP proxy is turned on.remotestringSpecifies 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.rscbooleanFALSESpecifies whether route short circuit is turned on.source-port-maxuint320Specifies the maximum UDP source port to communicate to the remote VXLAN tunnel endpoint.source-port-minuint320Specifies the minimum UDP source port to communicate to the remote VXLAN tunnel endpoint.tosuint320Specifies the TOS value to use in outgoing packets.ttluint320Specifies the time-to-live value to use in outgoing packets.wifi-p2p settingWi-Fi P2P Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThe P2P device that should be connected to. Currently, this is the only way to create or join a group.wfd-iesbyte arrayThe 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.wps-methoduint320Flags 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.wimax settingWiMax Settings.Key NameValue TypeDefault ValueValue Descriptionmac-addressbyte arrayIf 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: 1network-namestringNetwork Service Provider (NSP) name of the WiMAX network this connection should use. Deprecated: 1802-3-ethernet settingWired Ethernet Settings.Key NameValue TypeDefault ValueValue Descriptionaccept-all-mac-addressesNMTernary (int32)When TRUE, setup the interface to accept packets for all MAC addresses. This is enabling the kernel interface flag IFF_PROMISC. When FALSE, the interface will only accept the packets with the interface destination mac address or broadcast.assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".auto-negotiatebooleanFALSEWhen 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.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".duplexstringWhen 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.generate-mac-address-maskstringWith "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.mac-addressbyte arrayIf 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).mac-address-blacklistarray of stringIf 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).mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.portstringSpecific 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.s390-nettypestrings390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.s390-optionsdict of string to string{}Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include "portno", "layer2", "portname", "protocol", among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]). Currently, NetworkManager itself does nothing with this information. However, s390utils ships a udev rule which parses this information and applies it to the interface.s390-subchannelsarray of stringIdentifies 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.speeduint320When 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.wake-on-lanuint321The 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).wake-on-lan-passwordstringIf specified, the password used with magic-packet-based Wake-on-LAN, represented as an Ethernet MAC address. If NULL, no password will be required.wireguard settingWireGuard Settings.Key NameValue TypeDefault ValueValue Descriptionfwmarkuint320The 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.ip4-auto-default-routeNMTernary (int32)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.ip6-auto-default-routeNMTernary (int32)Like ip4-auto-default-route, but for the IPv6 default route.listen-portuint320The listen-port. If listen-port is not specified, the port will be chosen randomly when the interface comes up.mtuuint320If 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.peer-routesbooleanTRUEWhether 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.peersarray of 'a{sv}'Array of dictionaries for the WireGuard peers.private-keystringThe 256 bit private-key in base64 encoding.private-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "private-key" property. (see for flag values)802-11-wireless settingWi-Fi Settings.Key NameValue TypeDefault ValueValue Descriptionap-isolationNMTernary (int32)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).assigned-mac-addressstringThe new field for the cloned MAC address. It can be either a hardware address in ASCII representation, or one of the special values "preserve", "permanent", "random" or "stable". This field replaces the deprecated "cloned-mac-address" on D-Bus, which can only contain explicit hardware addresses. Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".bandstring802.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.bssidbyte arrayIf 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.channeluint320Wireless 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.cloned-mac-addressbyte arrayThis D-Bus field is deprecated in favor of "assigned-mac-address" which is more flexible and allows specifying special variants like "random". For libnm and nmcli, this field is called "cloned-mac-address".generate-mac-address-maskstringWith "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.hiddenbooleanFALSEIf 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.mac-addressbyte arrayIf 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).mac-address-blacklistarray of stringA 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").mac-address-randomizationuint320One 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: 1modestringWi-Fi network mode; one of "infrastructure", "mesh", "adhoc" or "ap". If blank, infrastructure is assumed.mtuuint320If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.powersaveuint320One 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.rateuint320If 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.securityThis property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.seen-bssidsarray of stringA 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.ssidbyte arraySSID of the Wi-Fi network. Must be specified.tx-poweruint320If 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.wake-on-wlanuint321The 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).802-11-wireless-security settingWi-Fi Security Settings.Key NameValue TypeDefault ValueValue Descriptionauth-algstringWhen 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.filsint320Indicates 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.grouparray of stringA 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".key-mgmtstringKey management used for the connection. One of "none" (WEP or no password protection), "ieee8021x" (Dynamic WEP), "owe" (Opportunistic Wireless Encryption), "wpa-psk" (WPA2 + WPA3 personal), "sae" (WPA3 personal only), "wpa-eap" (WPA2 + WPA3 enterprise) or "wpa-eap-suite-b-192" (WPA3 enterprise only). This property must be set for any Wi-Fi connection that uses security.leap-passwordstringThe login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").leap-password-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "leap-password" property. (see for flag values)leap-usernamestringThe login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").pairwisearray of stringA 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".pmfint320Indicates 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.protoarray of stringList 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.pskstringPre-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.psk-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "psk" property. (see for flag values)wep-key-flagsNMSettingSecretFlags (uint32)Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties. (see for flag values)wep-key-typeNMWepKeyType (uint32)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.wep-key0stringIndex 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.wep-key1stringIndex 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.wep-key2stringIndex 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.wep-key3stringIndex 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.wep-tx-keyidxuint320When 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.wps-methoduint320Flags 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.wpan settingIEEE 802.15.4 (WPAN) MAC Settings.Key NameValue TypeDefault ValueValue Descriptionchannelint32-1IEEE 802.15.4 channel. A positive integer or -1, meaning "do not set, use whatever the device is already set to".mac-addressstringIf specified, this connection will only apply to the IEEE 802.15.4 (WPAN) MAC layer device whose permanent MAC address matches.pageint32-1IEEE 802.15.4 channel page. A positive integer or -1, meaning "do not set, use whatever the device is already set to".pan-iduint3265535IEEE 802.15.4 Personal Area Network (PAN) identifier.short-addressuint3265535Short IEEE 802.15.4 address to be used within a restricted environment.bond-port settingBond Port Settings.Key NameValue TypeDefault ValueValue Descriptionqueue-iduint320The queue ID of this bond port. The maximum value of queue ID is the number of TX queues currently active in device.hostname settingHostname settings.Key NameValue TypeDefault ValueValue Descriptionfrom-dhcpNMTernary (int32)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).from-dns-lookupNMTernary (int32)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).only-from-defaultNMTernary (int32)If set to NM_TERNARY_TRUE (1), NetworkManager attempts to get the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this device only when the device has the default route for the given address family (IPv4/IPv6). If set to NM_TERNARY_FALSE (0), the hostname can be set from this device even if it doesn't have the default route. When set to NM_TERNARY_DEFAULT (-1), the value from global configuration is used. If the property doesn't have a value in the global configuration, NetworkManager assumes the value to be NM_TERNARY_FALSE (0).priorityint320The 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.ovs-external-ids settingOVS External IDs Settings.Key NameValue TypeDefault ValueValue Descriptiondatadict of string to string{}A dictionary of key/value pairs with exernal-ids for OVS.veth settingVeth Settings.Key NameValue TypeDefault ValueValue DescriptionpeerstringThis property specifies the peer interface name of the veth. This property is mandatory.Secret flag types: Each password or secret property in a setting has an associated flags property that describes how to handle that secret. The flags property is a bitfield that contains zero or more of the following values logically OR-ed together. diff --git a/man/nm-settings-docs-dbus.xml b/man/nm-settings-docs-dbus.xml index 4a4f3206..bb8adb1c 100644 --- a/man/nm-settings-docs-dbus.xml +++ b/man/nm-settings-docs-dbus.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/man/nm-settings-docs-nmcli.xml b/man/nm-settings-docs-nmcli.xml index 7caece97..e2e8852a 100644 --- a/man/nm-settings-docs-nmcli.xml +++ b/man/nm-settings-docs-nmcli.xml @@ -1,4 +1,4 @@ - + A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: @@ -52,7 +52,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -70,7 +71,7 @@ fixed priority. Example: priority 5 from 192.167.4.0/24 table 45 - + A list of IPv6 destination addresses, prefix length, optional IPv6 next hop addresses, optional route metric, optional attribute. The valid syntax is: @@ -120,7 +121,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -138,7 +140,7 @@ fixed priority. Example: priority 5 from 1:2:3::5/128 table 45 - + Array of TC queueing disciplines. qdisc is a basic block in the Linux traffic control subsystem diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5 index 5b5f1592..3edc7f2a 100644 --- a/man/nm-settings-ifcfg-rh.5 +++ b/man/nm-settings-ifcfg-rh.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-ifcfg-rh .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" +.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -2689,9 +2689,9 @@ PAC_SCRIPT\fI(+)\fR T}:T{ \ \& T}:T{ -Path of the PAC script\&.\fB +The PAC script\&. This is an UTF\-8 encoded javascript code that defines a FindProxyForURL() function\&.\fB -Example: \fRPAC_SCRIPT=/home/joe/proxy\&.pac +Example: \fRPAC_SCRIPT="function FindProxyForURL (url, host) { return \*(AqPROXY proxy\&.example\&.com:8080; DIRECT\*(Aq; }" T} .TE .sp 1 diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml index 07372617..b1643a0a 100644 --- a/man/nm-settings-ifcfg-rh.xml +++ b/man/nm-settings-ifcfg-rh.xml @@ -1,6 +1,6 @@ -nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.36.4nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription +nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.37.92nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing @@ -415,9 +415,9 @@ Example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0" Allowed values: none, autobrowser-onlyBROWSER_ONLY(+)noWhether the proxy configuration is for browser only.pac-urlPAC_URL(+)URL for PAC file. -Example: PAC_URL=http://wpad.mycompany.com/wpad.datpac-scriptPAC_SCRIPT(+)Path of the PAC script. +Example: PAC_URL=http://wpad.mycompany.com/wpad.datpac-scriptPAC_SCRIPT(+)The PAC script. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function. -Example: PAC_SCRIPT=/home/joe/proxy.pacsriov settingPropertyIfcfg-rh VariableDefaultDescriptiontotal-vfsSRIOV_TOTAL_VFS(+)The total number of virtual functions to create +Example: PAC_SCRIPT="function FindProxyForURL (url, host) { return 'PROXY proxy.example.com:8080; DIRECT'; }"
    sriov settingPropertyIfcfg-rh VariableDefaultDescriptiontotal-vfsSRIOV_TOTAL_VFS(+)The total number of virtual functions to create Example: SRIOV_TOTAL_VFS=16vfsSRIOV_VF1(+), SRIOV_VF2(+), ...SR-IOV virtual function descriptors diff --git a/man/nm-settings-keyfile.5 b/man/nm-settings-keyfile.5 index cd40469b..26acc9c8 100644 --- a/man/nm-settings-keyfile.5 +++ b/man/nm-settings-keyfile.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-keyfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" +.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml index 90a99b3f..c66cc34b 100644 --- a/man/nm-settings-keyfile.xml +++ b/man/nm-settings-keyfile.xml @@ -1,6 +1,6 @@ -nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.36.4nm-settings-keyfileDescription of keyfile settings pluginDescription +nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.37.92nm-settings-keyfileDescription of keyfile settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-nmcli.5 b/man/nm-settings-nmcli.5 index d512ae8f..1be2d443 100644 --- a/man/nm-settings-nmcli.5 +++ b/man/nm-settings-nmcli.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.36\&.4" "Configuration" +.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -79,7 +79,7 @@ Format: int32 .RS 4 Alias: autoconnect .sp -Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available\&. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection\&. Autoconnect happens when the circumstances are suitable\&. That means for example that the device is currently managed and not active\&. Autoconnect thus never replaces or competes with an already active profile\&. Note that autoconnect is not implemented for VPN profiles\&. See "secondaries" as an alternative to automatically connect VPN profiles\&. +Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available\&. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection\&. Autoconnect happens when the circumstances are suitable\&. That means for example that the device is currently managed and not active\&. Autoconnect thus never replaces or competes with an already active profile\&. Note that autoconnect is not implemented for VPN profiles\&. See "secondaries" as an alternative to automatically connect VPN profiles\&. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection\&.autoconnect\-priority" is chosen\&. If the priorities are equal, then the most recently connected profile is activated\&. If the profiles were not connected earlier or their "connection\&.timestamp" is identical, the choice is undefined\&. Depending on "connection\&.multi\-connect", a profile can (auto)connect only once at a time or multiple times\&. .sp Format: boolean .RE @@ -220,7 +220,7 @@ Format: string .PP \fBstable\-id\fR .RS 4 -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\*(Aqs 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 \*(Aq$\*(Aq 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 \*(Aq$\*(Aq are treated verbatim, however are reserved for future use\&. You are thus advised to avoid \*(Aq$\*(Aq 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\&. +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\*(Aqs name is included, so that different interfaces yield different addresses\&. The per\-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key\&. See NetworkManager(8) manual about the secret\-key and the host identity\&. The \*(Aq$\*(Aq 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 \*(Aq$\*(Aq are treated verbatim, however are reserved for future use\&. You are thus advised to avoid \*(Aq$\*(Aq 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\&. .sp Format: string .RE @@ -2018,7 +2018,8 @@ unicast, local, blackhole, unavailable, -prohibit\&. The default is +prohibit, +throw\&. The default is unicast\&. .RE .sp @@ -2067,7 +2068,7 @@ Format: int32 .RS 4 Alias: ip6 .sp -A list of IPv6 addresses and their prefix length\&. Multiple addresses can be separated by comma\&. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64"\&. The addresses are listed in increasing priority, meaning the last address will be the primary address\&. +A list of IPv6 addresses and their prefix length\&. Multiple addresses can be separated by comma\&. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64"\&. The addresses are listed in decreasing priority, meaning the first address will be the primary address\&. This can make a difference with IPv6 source address selection (RFC 6724, section 5)\&. .sp Format: a comma separated list of addresses .RE @@ -2397,7 +2398,8 @@ unicast, local, blackhole, unavailable, -prohibit\&. The default is +prohibit, +throw\&. The default is unicast\&. .RE .sp @@ -3067,7 +3069,7 @@ Format: int32 .RS 4 Alias: pac\-script .sp -PAC script for the connection\&. +The PAC script\&. In the profile this must be an UTF\-8 encoded javascript code that defines a FindProxyForURL() function\&. When setting the property in nmcli, a filename is accepted too\&. In that case, nmcli will read the content of the file and set the script\&. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two\&. .sp Format: string .RE diff --git a/man/nm-settings-nmcli.xml b/man/nm-settings-nmcli.xml index b14d4eee..bec71310 100644 --- a/man/nm-settings-nmcli.xml +++ b/man/nm-settings-nmcli.xml @@ -1,6 +1,6 @@ -nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.36.4nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription +nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.37.92nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will @@ -35,7 +35,7 @@ Properties: The number of retries for the authentication. Zero means to try indefinitely; -1 means to use a global default. If the global default is not set, the authentication retries for 3 times before failing the connection. Currently, this only applies to 802-1x authentication. Format: int32 - Alias: autoconnectWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. + Alias: autoconnectWhether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times. Format: booleanThe autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen. Format: int32The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again. Format: int32Whether 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. @@ -58,7 +58,7 @@ Format: booleanList of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported. Format: array of string Alias: slave-typeSetting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave. - Format: stringThis 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. + Format: stringThis 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. See NetworkManager(8) manual about the secret-key and the host identity. 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. Format: stringThe time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved). Format: uint64 Alias: typeBase 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). @@ -352,7 +352,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -373,7 +374,7 @@ Example: priority 5 from 192.167.4.0/24 table 45 Properties: 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. Format: int32 - Alias: ip6A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in increasing priority, meaning the last address will be the primary address. + Alias: ip6A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5). Format: a comma separated list of addressesA string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value "lease" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and "dhclient" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values "llt" and "ll" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values "stable-llt", "stable-ll" and "stable-uuid" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the "${DEVICE}" or "${MAC}" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of "stable-ll" and "stable-llt" will be a generated address derived from the stable id. The DUID-LLT time value in the "stable-llt" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in "llt"). When the property is unset, the global value provided for "ipv6.dhcp-duid" is used. If no global value is provided, the default "lease" value is assumed. Format: stringIf the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and "dhcp-fqdn" are mutually exclusive and cannot be set at the same time. Format: stringFlags 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. @@ -444,7 +445,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -589,7 +591,7 @@ Example: priority 5 from 1:2:3::5/128 table 45 Format: boolean Alias: methodMethod for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0) Format: int32 - Alias: pac-scriptPAC script for the connection. + Alias: pac-scriptThe PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two. Format: string Alias: pac-urlPAC URL for obtaining PAC file. Format: stringserial settingSerial Link Settings. diff --git a/man/nmcli-examples.7 b/man/nmcli-examples.7 index f3786a94..06b7e27e 100644 --- a/man/nmcli-examples.7 +++ b/man/nmcli-examples.7 @@ -2,12 +2,12 @@ .\" Title: nmcli-examples .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: Examples -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.36\&.4" "Examples" +.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.37\&.92" "Examples" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmcli.1 b/man/nmcli.1 index 217f8e41..b041795f 100644 --- a/man/nmcli.1 +++ b/man/nmcli.1 @@ -2,12 +2,12 @@ .\" Title: nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NMCLI" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" +.TH "NMCLI" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -389,7 +389,7 @@ and to watch for changes in certain devices or connections\&. .SH "CONNECTION MANAGEMENT COMMANDS" .HP \w'\fBnmcli\ connection\fR\ 'u -\fBnmcli connection\fR {\fBshow\fR | \fBup\fR | \fBdown\fR | \fBmodify\fR | \fBadd\fR | \fBedit\fR | \fBclone\fR | \fBdelete\fR | \fBmonitor\fR | \fBreload\fR | \fBload\fR | \fBimport\fR | \fBexport\fR} [\fIARGUMENTS\fR...] +\fBnmcli connection\fR {\fBshow\fR | \fBup\fR | \fBdown\fR | \fBmodify\fR | \fBadd\fR | \fBedit\fR | \fBclone\fR | \fBdelete\fR | \fBmonitor\fR | \fBreload\fR | \fBload\fR | \fBimport\fR | \fBexport\fR | \fBmigrate\fR} [\fIARGUMENTS\fR...] .PP NetworkManager stores all network configuration as "connections", which are collections of data (Layer2 details, IP addressing, etc\&.) that describe how to create or connect to a network\&. A connection is "active" when a device uses that connection\*(Aqs configuration to create or connect to a network\&. There may be multiple connections that apply to a device, but only one of them can be active on that device at any given time\&. The additional connections can be used to allow quick switching between different networks and configurations\&. .PP @@ -1254,6 +1254,34 @@ could export a connection\&. If no \fIfile\fR is provided, the VPN configuration data will be printed to standard output\&. .RE +.PP +\fBmigrate\fR [\fB\-\-plugin\fR\ \fIplugin\fR...] [\fBid\fR | \fBuuid\fR | \fBpath\fR] [\fIID\fR...] +.RS 4 +Migrate connection profiles to a different settings plugin, such as +keyfile +(default) or +ifcfg\-rh\&. +.sp +The connection to be migrated is identified by its name, UUID or D\-Bus path\&. If +\fIID\fR +is ambiguous, a keyword +\fBid\fR, +\fBuuid\fR +or +\fBpath\fR +can be used\&. See +\fBconnection show\fR +above for the description of the +\fIID\fR\-specifying keywords\&. +.sp +If no connections are specified, the command acts on all available connections\&. Therefore, with no arguments, the command migrates all connection profiles to the +keyfile +plugin\&. +.sp +If +\fB\-\-wait\fR +option is not specified, the default timeout will be 10 seconds\&. +.RE .SH "DEVICE MANAGEMENT COMMANDS" .HP \w'\fBnmcli\ device\fR\ 'u \fBnmcli device\fR {\fBstatus\fR | \fBshow\fR | \fBset\fR | \fBup\fR | \fBconnect\fR | \fBreapply\fR | \fBmodify\fR | \fBdown\fR | \fBdisconnect\fR | \fBdelete\fR | \fBmonitor\fR | \fBwifi\fR | \fBlldp\fR} [\fIARGUMENTS\fR...] @@ -1561,6 +1589,11 @@ Connection representing configuration created externally to NetworkManager\&. Connection whose details is the user not permitted to see\&. .RE .PP +\fBconnection\-deprecated\fR +.RS 4 +Connection that uses deprecated settings\&. It might not be possible to activate it\&. +.RE +.PP \fBconnectivity\-full\fR .RS 4 Connectivity state when Internet is reachable\&. @@ -1721,6 +1754,11 @@ Wi\-Fi network with a poor signal level\&. Wi\-Fi network that hasn\*(Aqt been actually seen (a hidden AP)\&. .RE .PP +\fBwifi\-deprecated\fR +.RS 4 +Wi\-Fi network that might be impossible to connect to due to use of deprecated functionality\&. +.RE +.PP \fBdisabled\fR .RS 4 A property that is turned off\&. diff --git a/man/nmcli.xml b/man/nmcli.xml index fad874f6..d4f27b0b 100644 --- a/man/nmcli.xml +++ b/man/nmcli.xml @@ -659,6 +659,7 @@ load import export + migrate ARGUMENTS @@ -1312,6 +1313,40 @@ data will be printed to standard output. + + + + migrate + + + plugin + + + + + + + ID + + + Migrate connection profiles to a different settings plugin, such + as keyfile (default) or ifcfg-rh. + + The connection to be migrated is identified by its name, UUID or D-Bus path. + If ID is ambiguous, a keyword , + or can be used. See connection + show above for the description of the + ID-specifying keywords. + + If no connections are specified, the command acts on all available + connections. Therefore, with no arguments, the command migrates all connection + profiles to the keyfile plugin. + + If option is not specified, the default timeout will be 10 + seconds. + + + @@ -1880,6 +1915,13 @@ + + + + Connection that uses deprecated settings. It might not be possible to activate it. + + + @@ -2104,6 +2146,13 @@ + + + + Wi-Fi network that might be impossible to connect to due to use of deprecated functionality. + + + diff --git a/man/nmtui.1 b/man/nmtui.1 index 9c963f45..bede5b9a 100644 --- a/man/nmtui.1 +++ b/man/nmtui.1 @@ -2,12 +2,12 @@ .\" Title: nmtui .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 03/22/2022 +.\" Date: 05/04/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.36.4 +.\" Source: NetworkManager 1.37.92 .\" Language: English .\" -.TH "NMTUI" "1" "" "NetworkManager 1\&.36\&.4" "General Commands Manual" +.TH "NMTUI" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/meson.build b/meson.build index f14aa62c..df7eb948 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( # - add corresponding NM_VERSION_x_y_z macros in # "src/libnm-core-public/nm-version-macros.h.in" # - update number in configure.ac - version: '1.36.4', + version: '1.37.92', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', @@ -541,10 +541,11 @@ crypto = get_option('crypto') if crypto == 'nss' assert(crypto_nss_dep.found(), 'Requires nss crypto support') crypto_dep = crypto_nss_dep -else - assert(crypto == 'gnutls', 'Unexpected setting "crypto=' + crypto + '"') +elif crypto == 'gnutls' assert(crypto_gnutls_dep.found(), 'Requires gnutls crypto support') crypto_dep = crypto_gnutls_dep +else + assert(crypto == 'null', 'Unexpected setting "crypto=' + crypto + '"') endif dbus_conf_dir = get_option('dbus_conf_dir') @@ -1093,7 +1094,9 @@ output += '\n' output += ' code coverage: ' + get_option('b_coverage').to_string() + '\n' output += ' LTO: ' + enable_lto.to_string() + '\n' output += ' Linker garbage collection: ' + enable_ld_gc.to_string() + '\n' -output += ' crypto: ' + crypto + '\n' +output += ' crypto: ' + crypto + ' (' +output += 'have-gnutls: ' + crypto_gnutls_dep.found().to_string() + ', ' +output += 'have-nss: ' + crypto_nss_dep.found().to_string() + ')\n' output += ' sanitizers: ' + get_option('b_sanitize') + '\n' output += ' Mozilla Public Suffix List: ' + enable_libpsl.to_string() + '\n' output += ' vapi: ' + enable_vapi.to_string() + '\n' diff --git a/meson_options.txt b/meson_options.txt index cfebe446..42f84711 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -71,6 +71,6 @@ option('valgrind', type: 'array', value: ['no'], description: 'Use valgrind to m option('valgrind_suppressions', type: 'string', value: '', description: 'Use specific valgrind suppression file') option('ld_gc', type: 'boolean', value: true, description: 'Enable garbage collection of unused symbols on linking') option('libpsl', type: 'boolean', value: true, description: 'Link against libpsl') -option('crypto', type: 'combo', choices: ['nss', 'gnutls'], value: 'nss', description: 'Cryptography library to use for certificate and key operations') +option('crypto', type: 'combo', choices: ['nss', 'gnutls', 'null'], value: 'nss', description: 'Cryptography library to use for certificate and key operations') option('qt', type: 'boolean', value: true, description: 'enable Qt examples') option('readline', type: 'combo', choices: ['auto', 'libreadline', 'libedit', 'none'], description: 'Using readline (auto) or libedit)') diff --git a/po/LINGUAS b/po/LINGUAS index 3195e695..bf42d1a2 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -1,6 +1,5 @@ # please keep this list sorted alphabetically # -ar as be@latin bg @@ -48,6 +47,7 @@ pa pl pt pt_BR +ro ru rw sk diff --git a/po/POTFILES.in b/po/POTFILES.in index 76d20094..151f58fc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -72,9 +72,6 @@ src/libnm-client-impl/nm-vpn-service-plugin.c src/libnm-core-aux-extern/nm-libnm-core-aux.c src/libnm-core-aux-intern/nm-libnm-core-utils.c src/libnm-core-impl/nm-connection.c -src/libnm-core-impl/nm-crypto-gnutls.c -src/libnm-core-impl/nm-crypto-nss.c -src/libnm-core-impl/nm-crypto.c src/libnm-core-impl/nm-dbus-utils.c src/libnm-core-impl/nm-keyfile-utils.c src/libnm-core-impl/nm-keyfile.c @@ -131,6 +128,10 @@ src/libnm-core-impl/nm-team-utils.c src/libnm-core-impl/nm-utils.c src/libnm-core-impl/nm-vpn-editor-plugin.c src/libnm-core-impl/nm-vpn-plugin-info.c +src/libnm-crypto/nm-crypto-gnutls.c +src/libnm-crypto/nm-crypto-nss.c +src/libnm-crypto/nm-crypto-null.c +src/libnm-crypto/nm-crypto.c src/libnm-glib-aux/nm-shared-utils.c src/libnm-log-core/nm-logging.c src/libnmc-base/nm-client-utils.c diff --git a/po/ar.po b/po/ar.po deleted file mode 100644 index 29b8db55..00000000 --- a/po/ar.po +++ /dev/null @@ -1,12838 +0,0 @@ -# translation of NetworkManager.HEAD.ar.po to Arabic -# Arabic translations for PACKAGE package. -# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Automatically generated, 2006. -# Khaled Hosny , 2007. -# Lubomir Rintel , 2016. #zanata -# Lubomir Rintel , 2017. #zanata -# Thomas Haller , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-01 17:17+0200\n" -"PO-Revision-Date: 2017-04-21 05:04-0400\n" -"Last-Translator: Copied by Zanata \n" -"Language-Team: Arabic \n" -"Language: ar\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : n>=3 && " -"n<=10 ? 2 : 3\n" -"X-Poedit-Language: Arabic\n" -"X-Generator: Zanata 3.9.6\n" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:1 -msgid "Enable or disable system networking" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:2 -msgid "System policy prevents enabling or disabling system networking" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:3 -msgid "Reload NetworkManager configuration" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:4 -msgid "System policy prevents reloading NetworkManager" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:5 -msgid "" -"Put NetworkManager to sleep or wake it up (should only be used by system " -"power management)" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:6 -msgid "System policy prevents putting NetworkManager to sleep or waking it up" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:7 -msgid "Enable or disable Wi-Fi devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:8 -msgid "System policy prevents enabling or disabling Wi-Fi devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:9 -msgid "Enable or disable mobile broadband devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:10 -msgid "System policy prevents enabling or disabling mobile broadband devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:11 -msgid "Enable or disable WiMAX mobile broadband devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:12 -msgid "" -"System policy prevents enabling or disabling WiMAX mobile broadband devices" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:13 -msgid "Allow control of network connections" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:14 -msgid "System policy prevents control of network connections" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:15 -msgid "Allow control of Wi-Fi scans" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:16 -msgid "System policy prevents Wi-Fi scans" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:17 -msgid "Connection sharing via a protected Wi-Fi network" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:18 -msgid "" -"System policy prevents sharing connections via a protected Wi-Fi network" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:19 -msgid "Connection sharing via an open Wi-Fi network" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:20 -msgid "System policy prevents sharing connections via an open Wi-Fi network" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:21 -#, fuzzy -msgid "Modify personal network connections" -msgstr "أضف اتصال VPN جديد" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:22 -msgid "System policy prevents modification of personal network settings" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:23 -msgid "Modify network connections for all users" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:24 -msgid "System policy prevents modification of network settings for all users" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:25 -msgid "Modify persistent system hostname" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:26 -msgid "System policy prevents modification of the persistent system hostname" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:27 -msgid "Modify persistent global DNS configuration" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:28 -msgid "" -"System policy prevents modification of the persistent global DNS " -"configuration" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:29 -msgid "Perform a checkpoint or rollback of interfaces configuration" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:30 -msgid "System policy prevents the creation of a checkpoint or its rollback" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:31 -msgid "Enable or disable device statistics" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:32 -msgid "System policy prevents enabling or disabling device statistics" -msgstr "" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:33 -#, fuzzy -msgid "Enable or disable connectivity checking" -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../data/org.freedesktop.NetworkManager.policy.in.in.h:34 -msgid "System policy prevents enabling or disabling connectivity checking" -msgstr "" - -#. TRANSLATORS: the first %s is a prefix for the connection id, such -#. * as "Wired Connection" or "VPN Connection". The %d is a number -#. * that is combined with the first argument to create a unique -#. * connection id. -#: ../src/core/NetworkManagerUtils.c:113 -#, c-format -msgctxt "connection id fallback" -msgid "%s %u" -msgstr "" - -#: ../src/core/devices/adsl/nm-device-adsl.c:117 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8080 -#, fuzzy -msgid "ADSL connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/bluetooth/nm-bluez-manager.c:1327 -#, c-format -msgid "%s Network" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:301 -msgid "PAN requested, but Bluetooth device does not support NAP" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:314 -msgid "PAN connections cannot specify GSM, CDMA, or serial settings" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:329 -#, fuzzy -msgid "PAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:336 -msgid "DUN requested, but Bluetooth device does not support DUN" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:349 -msgid "DUN connection must include a GSM or CDMA setting" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:360 -#: ../src/core/devices/wwan/nm-modem-broadband.c:821 -#, fuzzy -msgid "GSM connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:362 -#: ../src/core/devices/wwan/nm-modem-broadband.c:846 -#, fuzzy -msgid "CDMA connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:370 -msgid "Unknown/unhandled Bluetooth connection type" -msgstr "" - -#: ../src/core/devices/bluetooth/nm-device-bt.c:395 -msgid "connection does not match device" -msgstr "" - -#: ../src/core/devices/nm-device-6lowpan.c:190 -#, fuzzy -msgid "6LOWPAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-bond.c:89 -#, fuzzy -msgid "Bond connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-bridge.c:155 -#, fuzzy -msgid "Bridge connection" -msgstr "أضف اتصال VPN جديد" - -#: ../src/core/devices/nm-device-dummy.c:58 -#, fuzzy -msgid "Dummy connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-ethernet-utils.c:20 -#, fuzzy, c-format -msgid "Wired connection %d" -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../src/core/devices/nm-device-ethernet.c:1614 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8117 -#, fuzzy -msgid "Veth connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-ethernet.c:1680 -#, fuzzy -msgid "PPPoE connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-ethernet.c:1680 -#, fuzzy -msgid "Wired connection" -msgstr "انشيء اتصال VPN" - -#: ../src/core/devices/nm-device-infiniband.c:161 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8093 -#, fuzzy -msgid "InfiniBand connection" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/core/devices/nm-device-ip-tunnel.c:399 -#, fuzzy -msgid "IP tunnel connection" -msgstr "أضف اتصال VPN جديد" - -#: ../src/core/devices/nm-device-macvlan.c:389 -#, fuzzy -msgid "MACVLAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-tun.c:144 -#, fuzzy -msgid "TUN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-vlan.c:401 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8118 -#, fuzzy -msgid "VLAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-vrf.c:181 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8120 -#, fuzzy -msgid "VRF connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-vxlan.c:382 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8121 -#, fuzzy -msgid "VXLAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/nm-device-wpan.c:54 -#, fuzzy -msgid "WPAN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/devices/team/nm-device-team.c:88 -#, fuzzy -msgid "Team connection" -msgstr "انشيء اتصال VPN" - -#: ../src/core/devices/wifi/nm-device-olpc-mesh.c:115 -#: ../src/nmcli/devices.c:1352 -msgid "Mesh" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:32 -#, c-format -msgid "%s is incompatible with static WEP keys" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:67 -msgid "LEAP authentication requires a LEAP username" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:79 -msgid "LEAP username requires 'leap' authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:94 -msgid "LEAP authentication requires IEEE 802.1x key management" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:116 -msgid "LEAP authentication is incompatible with Ad-Hoc mode" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:128 -msgid "LEAP authentication is incompatible with 802.1x setting" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:148 -#, c-format -msgid "a connection using '%s' authentication cannot use WPA key management" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:161 -#, c-format -msgid "a connection using '%s' authentication cannot specify WPA protocols" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:179 -#: ../src/core/devices/wifi/nm-wifi-utils.c:198 -#, c-format -msgid "a connection using '%s' authentication cannot specify WPA ciphers" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:212 -#, c-format -msgid "a connection using '%s' authentication cannot specify a WPA password" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:245 -msgid "Dynamic WEP requires an 802.1x setting" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:255 -#: ../src/core/devices/wifi/nm-wifi-utils.c:287 -msgid "Dynamic WEP requires 'open' authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:272 -msgid "Dynamic WEP requires 'ieee8021x' key management" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:323 -msgid "WPA-PSK authentication is incompatible with 802.1x" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:333 -msgid "WPA-PSK requires 'open' authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:347 -msgid "Access point does not support PSK but setting requires it" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:362 -msgid "WPA Ad-Hoc authentication requires 'rsn' protocol" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:375 -msgid "WPA Ad-Hoc authentication requires 'ccmp' pairwise cipher" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:388 -msgid "WPA Ad-Hoc requires 'ccmp' group cipher" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:419 -msgid "WPA-EAP authentication requires an 802.1x setting" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:429 -msgid "WPA-EAP requires 'open' authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:442 -msgid "802.1x setting requires 'wpa-eap' key management" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:456 -msgid "Access point does not support 802.1x but setting requires it" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:486 -msgid "Ad-Hoc mode requires 'none' or 'wpa-psk' key management" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:498 -msgid "Ad-Hoc mode is incompatible with 802.1x security" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:507 -msgid "Ad-Hoc mode is incompatible with LEAP security" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:519 -msgid "Ad-Hoc mode requires 'open' authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:563 -#: ../src/core/devices/wifi/nm-wifi-utils.c:598 -#, c-format -msgid "connection does not match access point" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:652 -#, fuzzy, c-format -msgid "connection does not match mesh point" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:671 -msgid "Access point is unencrypted but setting specifies security" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:762 -msgid "" -"WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic " -"WEP" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:775 -msgid "WPA authentication is incompatible with Shared Key authentication" -msgstr "" - -#: ../src/core/devices/wifi/nm-wifi-utils.c:866 -msgid "Failed to determine AP security information" -msgstr "" - -#: ../src/core/dhcp/nm-dhcp-dhclient-utils.c:317 -msgid "# Created by NetworkManager\n" -msgstr "" - -#: ../src/core/dhcp/nm-dhcp-dhclient-utils.c:330 -#, c-format -msgid "" -"# Merged from %s\n" -"\n" -msgstr "" - -#: ../src/core/main-utils.c:87 -#, c-format -msgid "Opening %s failed: %s\n" -msgstr "" - -#: ../src/core/main-utils.c:94 -#, c-format -msgid "Writing to %s failed: %s\n" -msgstr "" - -#: ../src/core/main-utils.c:100 -#, c-format -msgid "Closing %s failed: %s\n" -msgstr "" - -#: ../src/core/main-utils.c:140 ../src/core/main-utils.c:152 -#, c-format -msgid "Cannot create '%s': %s" -msgstr "" - -#: ../src/core/main-utils.c:207 -#, c-format -msgid "%s is already running (pid %ld)\n" -msgstr "" - -#: ../src/core/main-utils.c:217 -#, c-format -msgid "You must be root to run %s!\n" -msgstr "" - -#: ../src/core/main-utils.c:284 ../src/core/main.c:375 -#: ../src/core/nm-iface-helper.c:585 -#, fuzzy, c-format -msgid "%s. Please use --help to see a list of valid options.\n" -msgstr "خيار غير صحيح. استعمل --help لعرض قائمة الخيارات الممكنة.\n" - -#: ../src/core/main.c:164 ../src/core/main.c:385 -#, c-format -msgid "Failed to read configuration: %s\n" -msgstr "" - -#: ../src/core/main.c:191 ../src/core/nm-iface-helper.c:406 -msgid "Print NetworkManager version and exit" -msgstr "" - -#: ../src/core/main.c:198 ../src/core/nm-iface-helper.c:413 -msgid "Don't become a daemon" -msgstr "" - -#: ../src/core/main.c:205 ../src/core/nm-iface-helper.c:427 -#, c-format -msgid "Log level: one of [%s]" -msgstr "" - -#: ../src/core/main.c:212 ../src/core/nm-iface-helper.c:434 -#, c-format -msgid "Log domains separated by ',': any combination of [%s]" -msgstr "" - -#: ../src/core/main.c:219 ../src/core/nm-iface-helper.c:441 -msgid "Make all warnings fatal" -msgstr "" - -#: ../src/core/main.c:226 -msgid "Specify the location of a PID file" -msgstr "" - -#: ../src/core/main.c:240 -msgid "Print NetworkManager configuration and exit" -msgstr "" - -#: ../src/core/main.c:251 -msgid "" -"NetworkManager monitors all network connections and automatically\n" -"chooses the best connection to use. It also allows the user to\n" -"specify wireless access points which wireless cards in the computer\n" -"should associate with." -msgstr "" - -#: ../src/core/main.c:408 ../src/core/nm-iface-helper.c:599 -#, c-format -msgid "Could not daemonize: %s [error %u]\n" -msgstr "" - -#: ../src/core/nm-config.c:542 -#: ../src/libnm-core-impl/nm-setting-ovs-bridge.c:187 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2157 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:4175 -#, c-format -msgid "'%s' is not valid" -msgstr "" - -#: ../src/core/nm-config.c:561 -#, c-format -msgid "Bad '%s' option: " -msgstr "" - -#: ../src/core/nm-config.c:578 -msgid "Config file location" -msgstr "" - -#: ../src/core/nm-config.c:585 -msgid "Config directory location" -msgstr "" - -#: ../src/core/nm-config.c:592 -msgid "System config directory location" -msgstr "" - -#: ../src/core/nm-config.c:599 -msgid "Internal config file location" -msgstr "" - -#: ../src/core/nm-config.c:606 -msgid "State file location" -msgstr "" - -#: ../src/core/nm-config.c:613 -msgid "State file for no-auto-default devices" -msgstr "" - -#: ../src/core/nm-config.c:620 -msgid "List of plugins separated by ','" -msgstr "" - -#: ../src/core/nm-config.c:627 -msgid "Quit after initial configuration" -msgstr "" - -#: ../src/core/nm-config.c:634 ../src/core/nm-iface-helper.c:420 -msgid "Don't become a daemon, and log to stderr" -msgstr "" - -#: ../src/core/nm-config.c:643 -msgid "An http(s) address for checking internet connectivity" -msgstr "" - -#: ../src/core/nm-config.c:650 -msgid "The interval between connectivity checks (in seconds)" -msgstr "" - -#: ../src/core/nm-config.c:657 -msgid "The expected start of the response" -msgstr "" - -#: ../src/core/nm-config.c:666 -msgid "NetworkManager options" -msgstr "" - -#: ../src/core/nm-config.c:667 -msgid "Show NetworkManager options" -msgstr "" - -#: ../src/core/nm-iface-helper.c:292 -msgid "The interface to manage" -msgstr "" - -#: ../src/core/nm-iface-helper.c:299 -#, fuzzy -msgid "Connection UUID" -msgstr "إتّصالات VPN" - -#: ../src/core/nm-iface-helper.c:306 -msgid "Connection Token for Stable IDs" -msgstr "" - -#: ../src/core/nm-iface-helper.c:313 -msgid "Whether to manage IPv6 SLAAC" -msgstr "" - -#: ../src/core/nm-iface-helper.c:320 -msgid "Whether SLAAC must be successful" -msgstr "" - -#: ../src/core/nm-iface-helper.c:327 -msgid "Use an IPv6 temporary privacy address" -msgstr "" - -#: ../src/core/nm-iface-helper.c:334 -msgid "Current DHCPv4 address" -msgstr "" - -#: ../src/core/nm-iface-helper.c:341 -msgid "Whether DHCPv4 must be successful" -msgstr "" - -#: ../src/core/nm-iface-helper.c:348 -msgid "Hex-encoded DHCPv4 client ID" -msgstr "" - -#: ../src/core/nm-iface-helper.c:355 -msgid "Hostname to send to DHCP server" -msgstr "" - -#: ../src/core/nm-iface-helper.c:356 -msgid "barbar" -msgstr "" - -#: ../src/core/nm-iface-helper.c:362 -msgid "FQDN to send to DHCP server" -msgstr "" - -#: ../src/core/nm-iface-helper.c:363 -msgid "host.domain.org" -msgstr "" - -#: ../src/core/nm-iface-helper.c:369 -msgid "Route priority for IPv4" -msgstr "" - -#: ../src/core/nm-iface-helper.c:370 -msgid "0" -msgstr "" - -#: ../src/core/nm-iface-helper.c:376 -msgid "Route priority for IPv6" -msgstr "" - -#: ../src/core/nm-iface-helper.c:377 -msgid "1024" -msgstr "" - -#: ../src/core/nm-iface-helper.c:383 -msgid "Hex-encoded Interface Identifier" -msgstr "" - -#: ../src/core/nm-iface-helper.c:390 -msgid "IPv6 SLAAC address generation mode" -msgstr "" - -#: ../src/core/nm-iface-helper.c:397 -msgid "" -"The logging backend configuration value. See logging.backend in " -"NetworkManager.conf" -msgstr "" - -#: ../src/core/nm-iface-helper.c:451 -msgid "" -"nm-iface-helper is a small, standalone process that manages a single network " -"interface." -msgstr "" - -#: ../src/core/nm-iface-helper.c:562 -#, c-format -msgid "An interface name and UUID are required\n" -msgstr "" - -#: ../src/core/nm-iface-helper.c:570 -#, c-format -msgid "Failed to find interface index for %s (%s)\n" -msgstr "" - -#: ../src/core/nm-iface-helper.c:590 -#, c-format -msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n" -msgstr "" - -#: ../src/core/nm-iface-helper.c:636 -#, c-format -msgid "(%s): Invalid IID %s\n" -msgstr "" - -#: ../src/core/nm-iface-helper.c:648 -#, c-format -msgid "(%s): Invalid DHCP client-id %s\n" -msgstr "" - -#: ../src/core/nm-manager.c:5926 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:8119 -#, fuzzy -msgid "VPN connection" -msgstr "إتّصالات VPN" - -#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5478 -#: ../src/libnm-client-impl/nm-device.c:1683 -#: ../src/libnm-core-impl/nm-connection.c:2707 -#: ../src/nmtui/nm-editor-utils.c:180 -msgid "Bond" -msgstr "" - -#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5549 -#: ../src/libnm-client-impl/nm-device.c:1685 -#: ../src/libnm-core-impl/nm-connection.c:2709 -#: ../src/nmtui/nm-editor-utils.c:198 -msgid "Team" -msgstr "" - -#: ../src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c:5886 -#: ../src/libnm-client-impl/nm-device.c:1687 -#: ../src/libnm-core-impl/nm-connection.c:2711 -#: ../src/nmtui/nm-editor-utils.c:189 -msgid "Bridge" -msgstr "" - -#: ../src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c:9974 -#: ../src/libnm-core-impl/nm-team-utils.c:2396 -#, fuzzy, c-format -msgid "invalid json" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-client-impl/nm-client.c:3782 -#, c-format -msgid "request succeeded with %s but object is in an unsuitable state" -msgstr "" - -#: ../src/libnm-client-impl/nm-client.c:3874 -#, c-format -msgid "operation succeeded but object %s does not exist" -msgstr "" - -#: ../src/libnm-client-impl/nm-device-adsl.c:66 -msgid "The connection was not an ADSL connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bond.c:106 -msgid "The connection was not a bond connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bridge.c:109 -msgid "The connection was not a bridge connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bt.c:133 -#, c-format -msgid "The connection was not a Bluetooth connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bt.c:141 -#, fuzzy, c-format -msgid "The connection is of Bluetooth NAP type." -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../src/libnm-client-impl/nm-device-bt.c:152 -msgid "Invalid device Bluetooth address." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bt.c:161 -msgid "The Bluetooth addresses of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-bt.c:173 -msgid "" -"The device is lacking Bluetooth capabilities required by the connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-dummy.c:65 -#, fuzzy -msgid "The connection was not a dummy connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-dummy.c:74 -#: ../src/libnm-client-impl/nm-device-generic.c:89 -#: ../src/libnm-client-impl/nm-device-ovs-bridge.c:89 -#: ../src/libnm-client-impl/nm-device-ovs-interface.c:57 -#: ../src/libnm-client-impl/nm-device-ovs-port.c:89 -msgid "The connection did not specify an interface name." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:189 -msgid "The connection was not an Ethernet or PPPoE connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:206 -msgid "The connection and device differ in S390 subchannels." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:223 -#, c-format -msgid "Invalid device MAC address %s." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:231 -msgid "The MACs of the device and the connection do not match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:243 -#, c-format -msgid "Invalid MAC in the blacklist: %s." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ethernet.c:252 -#, c-format -msgid "Device MAC (%s) is blacklisted by the connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-generic.c:80 -msgid "The connection was not a generic connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-infiniband.c:90 -msgid "The connection was not an InfiniBand connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-infiniband.c:100 -#: ../src/libnm-client-impl/nm-device-wifi.c:481 -msgid "Invalid device MAC address." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-infiniband.c:110 -#: ../src/libnm-client-impl/nm-device-wifi.c:490 -msgid "The MACs of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ip-tunnel.c:266 -msgid "The connection was not an IP tunnel connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-macvlan.c:151 -msgid "The connection was not a MAC-VLAN connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-modem.c:177 -msgid "The connection was not a modem connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-modem.c:187 -msgid "The connection was not a valid modem connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-modem.c:196 -msgid "The device is lacking capabilities required by the connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-olpc-mesh.c:102 -msgid "The connection was not an OLPC Mesh connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-ovs-bridge.c:80 -#, fuzzy -msgid "The connection was not a ovs_bridge connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-ovs-interface.c:48 -#, fuzzy -msgid "The connection was not a ovs_interface connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-ovs-port.c:80 -#, fuzzy -msgid "The connection was not a ovs_port connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-team.c:125 -msgid "The connection was not a team connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-tun.c:204 -msgid "The connection was not a tun connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-tun.c:215 -msgid "The mode of the device and the connection didn't match" -msgstr "" - -#: ../src/libnm-client-impl/nm-device-vlan.c:121 -#, fuzzy -msgid "The connection was not a VLAN connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-vlan.c:131 -msgid "The VLAN identifiers of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-vlan.c:148 -msgid "The hardware address of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-vrf.c:65 -#, fuzzy -msgid "The connection was not a VRF connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-vrf.c:74 -msgid "The VRF table of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-vxlan.c:383 -msgid "The connection was not a VXLAN connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-vxlan.c:393 -msgid "The VXLAN identifiers of the device and the connection didn't match." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-wifi-p2p.c:266 -#, fuzzy -msgid "The connection was not a Wi-Fi P2P connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device-wifi.c:470 -msgid "The connection was not a Wi-Fi connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-wifi.c:511 -msgid "The device is lacking WPA capabilities required by the connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-wifi.c:521 -msgid "The device is lacking WPA2/RSN capabilities required by the connection." -msgstr "" - -#: ../src/libnm-client-impl/nm-device-wpan.c:57 -#, fuzzy -msgid "The connection was not a wpan connection." -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-client-impl/nm-device.c:1663 ../src/nmtui/nm-editor-utils.c:128 -msgid "Ethernet" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1665 ../src/nmtui/nm-editor-utils.c:144 -msgid "Wi-Fi" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1667 -msgid "Bluetooth" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1669 -msgid "OLPC Mesh" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1671 -msgid "Open vSwitch Interface" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1673 -msgid "Open vSwitch Port" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1675 -msgid "Open vSwitch Bridge" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1677 -msgid "WiMAX" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1679 ../src/nmtui/nm-editor-utils.c:162 -msgid "Mobile Broadband" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1681 -#: ../src/libnm-core-impl/nm-connection.c:2715 -#: ../src/nmtui/nm-editor-utils.c:153 -msgid "InfiniBand" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1689 -#: ../src/libnm-core-impl/nm-connection.c:2713 -#: ../src/nmtui/nm-editor-utils.c:207 ../src/nmtui/nmt-page-vlan.c:64 -msgid "VLAN" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1691 -msgid "ADSL" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1693 -msgid "MACVLAN" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1695 -msgid "VXLAN" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1697 -msgid "IPTunnel" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1699 -msgid "Tun" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1701 ../src/nmtui/nm-editor-utils.c:136 -msgid "Veth" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1703 -msgid "MACsec" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1705 -msgid "Dummy" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1707 -msgid "PPP" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1709 -msgid "IEEE 802.15.4" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1711 -msgid "6LoWPAN" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1713 -msgid "WireGuard" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1715 -msgid "Wi-Fi P2P" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1717 -msgid "VRF" -msgstr "" - -#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason) -#. TRANSLATORS: Unknown reason for a connection state change (NMActiveConnectionStateReason) -#: ../src/libnm-client-impl/nm-device.c:1724 -#: ../src/libnmc-base/nm-client-utils.c:352 -#: ../src/libnmc-base/nm-client-utils.c:473 -msgid "Unknown" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1749 -msgid "Wired" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1781 -msgid "PCI" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:1783 -msgid "USB" -msgstr "" - -#. TRANSLATORS: the first %s is a bus name (eg, "USB") or -#. * product name, the second is a device type (eg, -#. * "Ethernet"). You can change this to something like -#. * "%2$s (%1$s)" if there's no grammatical way to combine -#. * the strings otherwise. -#. -#: ../src/libnm-client-impl/nm-device.c:2082 -#: ../src/libnm-client-impl/nm-device.c:2101 -#, c-format -msgctxt "long device name" -msgid "%s %s" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:2761 -#, c-format -msgid "The connection was not valid: %s" -msgstr "" - -#: ../src/libnm-client-impl/nm-device.c:2773 -#, c-format -msgid "The interface names of the device and the connection didn't match" -msgstr "" - -#: ../src/libnm-client-impl/nm-secret-agent-old.c:1384 -#, fuzzy -msgid "registration failed" -msgstr "إتّصالات VPN" - -#: ../src/libnm-client-impl/nm-vpn-plugin-old.c:817 -#: ../src/libnm-client-impl/nm-vpn-service-plugin.c:1063 -msgid "No service name specified" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:286 -#, c-format -msgid "'%s' is not valid: properties should be specified as 'key=value'" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:300 -#, fuzzy, c-format -msgid "'%s' is not a valid key" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:305 -#, c-format -msgid "duplicate key '%s'" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:319 -#, c-format -msgid "number for '%s' is out of range" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:324 -#, c-format -msgid "value for '%s' must be a number" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:337 -#, c-format -msgid "value for '%s' must be a boolean" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:346 -msgid "missing 'name' attribute" -msgstr "" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:355 -#, fuzzy, c-format -msgid "invalid 'name' \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-aux-extern/nm-libnm-core-aux.c:368 -#, c-format -msgid "attribute '%s' is invalid for \"%s\"" -msgstr "" - -#: ../src/libnm-core-aux-intern/nm-libnm-core-utils.c:293 -msgid "property cannot be an empty string" -msgstr "" - -#: ../src/libnm-core-aux-intern/nm-libnm-core-utils.c:310 -msgid "property cannot be longer than 255 bytes" -msgstr "" - -#: ../src/libnm-core-aux-intern/nm-libnm-core-utils.c:321 -msgid "property cannot contain any nul bytes" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:300 -msgid "wrong type; should be a list of strings." -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:374 -msgid "unknown setting name" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:386 -msgid "duplicate setting name" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1433 -msgid "setting not found" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1486 -#: ../src/libnm-core-impl/nm-connection.c:1511 -#: ../src/libnm-core-impl/nm-connection.c:1536 -msgid "setting is required for non-slave connections" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1499 -#: ../src/libnm-core-impl/nm-connection.c:1524 -#: ../src/libnm-core-impl/nm-connection.c:1549 -msgid "setting not allowed in slave connection" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1654 -msgid "Unexpected failure to normalize the connection" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1715 -msgid "Unexpected failure to verify the connection" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:1752 -#, c-format -msgid "unexpected uuid %s instead of %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:2566 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2618 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2641 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2681 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2704 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2754 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2795 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2895 -#: ../src/libnm-core-impl/nm-setting-adsl.c:157 -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:110 -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:174 -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:191 -#: ../src/libnm-core-impl/nm-setting-cdma.c:127 -#: ../src/libnm-core-impl/nm-setting-connection.c:1075 -#: ../src/libnm-core-impl/nm-setting-connection.c:1113 -#: ../src/libnm-core-impl/nm-setting-connection.c:1385 -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5333 -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:371 -#: ../src/libnm-core-impl/nm-setting-olpc-mesh.c:83 -#: ../src/libnm-core-impl/nm-setting-ovs-patch.c:75 -#: ../src/libnm-core-impl/nm-setting-pppoe.c:129 -#: ../src/libnm-core-impl/nm-setting-vpn.c:532 -#: ../src/libnm-core-impl/nm-setting-wifi-p2p.c:120 -#: ../src/libnm-core-impl/nm-setting-wimax.c:92 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:899 -#: ../src/libnm-core-impl/nm-setting-wireless.c:788 -msgid "property is missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-connection.c:2719 -#, fuzzy -msgid "IP Tunnel" -msgstr "أضف اتصال VPN جديد" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:59 -msgid "Failed to initialize the crypto engine." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:92 -#: ../src/libnm-core-impl/nm-crypto-nss.c:118 -#, c-format -msgid "Unsupported key cipher for decryption" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:103 -#: ../src/libnm-core-impl/nm-crypto-nss.c:126 -#, c-format -msgid "Invalid IV length (must be at least %u)." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:121 -#, c-format -msgid "Failed to initialize the decryption cipher context: %s (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:135 -#, c-format -msgid "Failed to decrypt the private key: %s (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:148 -#: ../src/libnm-core-impl/nm-crypto-nss.c:221 -#, c-format -msgid "Failed to decrypt the private key: unexpected padding length." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:160 -#: ../src/libnm-core-impl/nm-crypto-nss.c:233 -#, c-format -msgid "Failed to decrypt the private key." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:194 -#: ../src/libnm-core-impl/nm-crypto-nss.c:288 -#, c-format -msgid "Unsupported key cipher for encryption" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:211 -#, c-format -msgid "Failed to initialize the encryption cipher context: %s (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:239 -#, c-format -msgid "Failed to encrypt the data: %s (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:264 -#, c-format -msgid "Error initializing certificate data: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:287 -#, c-format -msgid "Couldn't decode certificate: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:312 -#, c-format -msgid "Couldn't initialize PKCS#12 decoder: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:326 -#, c-format -msgid "Couldn't decode PKCS#12 file: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:341 -#, c-format -msgid "Couldn't verify PKCS#12 file: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:370 -#, c-format -msgid "Couldn't initialize PKCS#8 decoder: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-gnutls.c:398 -#, c-format -msgid "Couldn't decode PKCS#8 file: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:70 -#, c-format -msgid "Failed to initialize the crypto engine: %d." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:139 -#, c-format -msgid "Failed to initialize the decryption cipher slot." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:150 -#, c-format -msgid "Failed to set symmetric key for decryption." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:161 -#, c-format -msgid "Failed to set IV for decryption." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:170 -#, c-format -msgid "Failed to initialize the decryption context." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:187 -#, c-format -msgid "Failed to decrypt the private key: %d." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:196 -#, c-format -msgid "Failed to decrypt the private key: decrypted data too large." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:208 -#, c-format -msgid "Failed to finalize decryption of the private key: %d." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:300 -#, c-format -msgid "Failed to initialize the encryption cipher slot." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:309 -#, c-format -msgid "Failed to set symmetric key for encryption." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:318 -#, c-format -msgid "Failed to set IV for encryption." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:327 -#, c-format -msgid "Failed to initialize the encryption context." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:352 -#, c-format -msgid "Failed to encrypt: %d." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:361 -#, c-format -msgid "Unexpected amount of data after encrypting." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:398 -#, c-format -msgid "Couldn't decode certificate: %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:443 -#, c-format -msgid "Password must be UTF-8" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:464 -#, c-format -msgid "Couldn't initialize slot" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:473 -#, c-format -msgid "Couldn't initialize PKCS#12 decoder: %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:483 -#, c-format -msgid "Couldn't decode PKCS#12 file: %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:493 -#, c-format -msgid "Couldn't verify PKCS#12 file: %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto-nss.c:544 -msgid "Could not generate random data." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:208 -#, c-format -msgid "PEM key file had no start tag" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:217 -#, c-format -msgid "PEM key file had no end tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:245 -#, c-format -msgid "Malformed PEM file: Proc-Type was not first tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:254 -#, c-format -msgid "Malformed PEM file: unknown Proc-Type tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:267 -#, c-format -msgid "Malformed PEM file: DEK-Info was not the second tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:279 -#, c-format -msgid "Malformed PEM file: no IV found in DEK-Info tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:288 -#, c-format -msgid "Malformed PEM file: invalid format of IV in DEK-Info tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:300 -#, c-format -msgid "Malformed PEM file: unknown private key cipher '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:323 -#, c-format -msgid "Could not decode private key." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:365 -msgid "Failed to find expected PKCS#8 start tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:374 -#, c-format -msgid "Failed to find expected PKCS#8 end tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:387 -msgid "Failed to decode PKCS#8 private key." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:417 -msgid "Failed to find expected TSS start tag." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:426 -#, c-format -msgid "Failed to find expected TSS end tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:481 -#, c-format -msgid "IV must be an even number of bytes in length." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:498 -#, c-format -msgid "IV contains non-hexadecimal digits." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:574 -#, c-format -msgid "IV must contain at least 8 characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:624 -#, c-format -msgid "Unable to determine private key type." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:637 -#, c-format -msgid "Password provided, but key was not encrypted." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:693 -#, c-format -msgid "PEM certificate had no start tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:703 -#, c-format -msgid "PEM certificate had no end tag '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:716 -#, c-format -msgid "Failed to decode certificate." -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:745 -#: ../src/libnm-core-impl/nm-crypto.c:796 -#, c-format -msgid "Certificate file is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:778 -#, c-format -msgid "Failed to recognize certificate" -msgstr "" - -#: ../src/libnm-core-impl/nm-crypto.c:886 -#, c-format -msgid "not a valid private key" -msgstr "" - -#: ../src/libnm-core-impl/nm-dbus-utils.c:181 -#, c-format -msgid "Method returned type '%s', but expected '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile-utils.c:174 -#, c-format -msgid "Value cannot be interpreted as a list of numbers." -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile-utils.c:303 -#, c-format -msgid "value is not an integer in range [%lld, %lld]" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:270 -msgid "ignoring missing number" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:282 -#, c-format -msgid "ignoring invalid number '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:311 -#, c-format -msgid "ignoring invalid %s address: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:357 -#, c-format -msgid "ignoring invalid gateway '%s' for %s route" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:379 -#, c-format -msgid "ignoring invalid %s route: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:557 -#, c-format -msgid "unexpected character '%c' for address %s: '%s' (position %td)" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:573 -#, c-format -msgid "unexpected character '%c' for %s: '%s' (position %td)" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:588 -#, c-format -msgid "unexpected character '%c' in prefix length for %s: '%s' (position %td)" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:605 -#, c-format -msgid "garbage at the end of value %s: '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:615 -#, c-format -msgid "deprecated semicolon at the end of value %s: '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:634 -#, c-format -msgid "invalid prefix length for %s '%s', defaulting to %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:646 -#, c-format -msgid "missing prefix length for %s '%s', defaulting to %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:989 -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:320 -#: ../src/libnm-core-impl/nm-setting-user.c:372 -#, c-format -msgid "invalid value for \"%s\": %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1067 -#, c-format -msgid "ignoring invalid DNS server IPv%c address '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1104 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1651 -#, c-format -msgid "invalid option '%s', use one of [%s]" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1162 -msgid "ignoring invalid MAC address" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1238 -#, c-format -msgid "ignoring invalid bond option %s%s%s = %s%s%s: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1428 -msgid "ignoring invalid SSID" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1446 -msgid "ignoring invalid raw password" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1587 -msgid "invalid key/cert value" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1602 -#, c-format -msgid "invalid key/cert value path \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1627 -#: ../src/libnm-core-impl/nm-keyfile.c:1724 -#, c-format -msgid "certificate or key file '%s' does not exist" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1640 -#, c-format -msgid "invalid PKCS#11 URI \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1686 -msgid "invalid key/cert value data:;base64, is not base64" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1699 -msgid "invalid key/cert value data:;base64,file://" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1740 -msgid "invalid key/cert value is not a valid blob" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1842 -#, c-format -msgid "invalid parity value '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1864 -#: ../src/libnm-core-impl/nm-keyfile.c:3337 -#, fuzzy, c-format -msgid "invalid setting: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-keyfile.c:1884 -#, c-format -msgid "ignoring invalid team configuration: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:1967 -#, c-format -msgid "invalid qdisc: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:2017 -#, fuzzy, c-format -msgid "invalid tfilter: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-keyfile.c:3162 -#, fuzzy, c-format -msgid "error loading setting value: %s" -msgstr "خطأ في قراءة رسالة نتلينك: %s" - -#: ../src/libnm-core-impl/nm-keyfile.c:3193 -#: ../src/libnm-core-impl/nm-keyfile.c:3205 -#: ../src/libnm-core-impl/nm-keyfile.c:3224 -#: ../src/libnm-core-impl/nm-keyfile.c:3236 -#: ../src/libnm-core-impl/nm-keyfile.c:3248 -#: ../src/libnm-core-impl/nm-keyfile.c:3310 -#: ../src/libnm-core-impl/nm-keyfile.c:3322 -msgid "value cannot be interpreted as integer" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3278 -#, c-format -msgid "ignoring invalid byte element '%u' (not between 0 and 255 inclusive)" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3362 -#, c-format -msgid "invalid setting name '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3409 -#, fuzzy, c-format -msgid "invalid key '%s.%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-keyfile.c:3425 -#, c-format -msgid "key '%s.%s' is not boolean" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3442 -#, fuzzy, c-format -msgid "key '%s.%s' is not a uint32" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-keyfile.c:3499 -#, c-format -msgid "invalid peer public key in section '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3514 -#, c-format -msgid "key '%s.%s' is not a valid 256 bit key in base64 encoding" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3537 -#, fuzzy, c-format -msgid "key '%s.%s' is not a valid secret flag" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-keyfile.c:3560 -#, c-format -msgid "key '%s.%s' is not a integer in range 0 to 2^32" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3576 -#, fuzzy, c-format -msgid "key '%s.%s' is not a valid endpoint" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-keyfile.c:3602 -#, c-format -msgid "key '%s.%s' has invalid allowed-ips" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:3617 -#, c-format -msgid "peer '%s' is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-keyfile.c:4108 -#, c-format -msgid "the profile is not valid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-6lowpan.c:78 -#: ../src/libnm-core-impl/nm-setting-veth.c:80 -#, fuzzy, c-format -msgid "property is not specified" -msgstr "إتّصالات VPN" - -#: ../src/libnm-core-impl/nm-setting-6lowpan.c:101 -#: ../src/libnm-core-impl/nm-setting-macsec.c:284 -#: ../src/libnm-core-impl/nm-setting-vlan.c:591 -#, c-format -msgid "'%s' value doesn't match '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-6lowpan.c:117 -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:344 -#: ../src/libnm-core-impl/nm-setting-macsec.c:300 -#: ../src/libnm-core-impl/nm-setting-macvlan.c:122 -#: ../src/libnm-core-impl/nm-setting-vlan.c:607 -#: ../src/libnm-core-impl/nm-setting-vxlan.c:352 -#, c-format -msgid "'%s' is neither an UUID nor an interface name" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:218 -msgid "binary data missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:250 -msgid "URI not NUL terminated" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:259 -msgid "URI is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:267 -msgid "URI is not valid UTF-8" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:285 -msgid "data missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:306 -#: ../src/libnm-core-impl/nm-setting-8021x.c:674 -#, c-format -msgid "certificate is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:315 -#, c-format -msgid "certificate detected as invalid scheme" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:541 -msgid "CA certificate must be in X.509 format" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:553 -msgid "invalid certificate format" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:685 -#, c-format -msgid "password is not supported when certificate is not on a PKCS#11 token" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2628 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2651 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2691 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2714 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2759 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2805 -#: ../src/libnm-core-impl/nm-setting-adsl.c:165 -#: ../src/libnm-core-impl/nm-setting-cdma.c:134 -#: ../src/libnm-core-impl/nm-setting-cdma.c:143 -#: ../src/libnm-core-impl/nm-setting-connection.c:1085 -#: ../src/libnm-core-impl/nm-setting-connection.c:1128 -#: ../src/libnm-core-impl/nm-setting-connection.c:1323 -#: ../src/libnm-core-impl/nm-setting-gsm.c:282 -#: ../src/libnm-core-impl/nm-setting-gsm.c:337 -#: ../src/libnm-core-impl/nm-setting-gsm.c:380 -#: ../src/libnm-core-impl/nm-setting-gsm.c:389 -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5342 -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:206 -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:218 -#: ../src/libnm-core-impl/nm-setting-pppoe.c:136 -#: ../src/libnm-core-impl/nm-setting-pppoe.c:145 -#: ../src/libnm-core-impl/nm-setting-vpn.c:540 -#: ../src/libnm-core-impl/nm-setting-vpn.c:550 -#: ../src/libnm-core-impl/nm-setting-wimax.c:104 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:955 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:983 -#: ../src/libnm-core-impl/nm-setting.c:1240 -msgid "property is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2667 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2730 -#, c-format -msgid "has to match '%s' property for PKCS#12" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2773 -msgid "exactly one property must be set" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2883 -#, fuzzy -msgid "can be enabled only on Ethernet connections" -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2904 -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:92 -#: ../src/libnm-core-impl/nm-setting-infiniband.c:163 -#: ../src/libnm-core-impl/nm-setting-infiniband.c:175 -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:194 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:243 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:257 -#: ../src/libnm-core-impl/nm-setting-olpc-mesh.c:121 -#: ../src/libnm-core-impl/nm-setting-wifi-p2p.c:132 -#: ../src/libnm-core-impl/nm-setting-wimax.c:116 -#: ../src/libnm-core-impl/nm-setting-wired.c:820 -#: ../src/libnm-core-impl/nm-setting-wired.c:833 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1008 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1020 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1032 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1045 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1058 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1089 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1156 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1205 -#: ../src/libnm-core-impl/nm-setting-wireless.c:884 -#: ../src/libnm-core-impl/nm-setting-wireless.c:896 -#: ../src/libnm-core-impl/nm-setting-wireless.c:909 -#: ../src/libnm-core-impl/nm-setting-wpan.c:161 -#: ../src/libnm-core-impl/nm-utils.c:4232 -msgid "property is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2929 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2942 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2955 -#: ../src/libnm-core-impl/nm-setting-8021x.c:2989 -#: ../src/libnm-core-impl/nm-setting-8021x.c:3002 -#: ../src/libnm-core-impl/nm-setting-adsl.c:177 -#: ../src/libnm-core-impl/nm-setting-adsl.c:190 -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:127 -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:911 -#, c-format -msgid "'%s' is not a valid value for the property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-8021x.c:2968 -msgid "invalid auth flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:151 -#, c-format -msgid "'%s' connection requires '%s' or '%s' setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bluetooth.c:203 -#, c-format -msgid "'%s' connection requires '%s' setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:495 -#, c-format -msgid "'%s' option is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:504 -#, c-format -msgid "'%s' is not a valid IPv4 address for '%s' option" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:531 -#, c-format -msgid "missing option name" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:536 -#, fuzzy, c-format -msgid "invalid option '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-bond.c:572 -#, fuzzy, c-format -msgid "invalid value '%s' for option '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-bond.c:814 -#, c-format -msgid "mandatory option '%s' is missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:824 -#, c-format -msgid "'%s' is not a valid value for '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:837 -#, c-format -msgid "'%s=%s' is incompatible with '%s > 0'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:854 -#, c-format -msgid "'%s' is not valid for the '%s' option: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:866 -#, c-format -msgid "'%s' option is only valid for '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:879 -#, c-format -msgid "'%s=%s' is not a valid configuration for '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:894 -#: ../src/libnm-core-impl/nm-setting-bond.c:905 -#, c-format -msgid "'%s' option requires '%s' option to be enabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:922 -#: ../src/libnm-core-impl/nm-setting-bond.c:933 -#, c-format -msgid "'%s' option requires '%s' option to be set" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:946 -#, c-format -msgid "'%s' option is only valid with mode '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:959 -#, c-format -msgid "'%s' and '%s' cannot have different values" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:982 -#, c-format -msgid "'%s' option should be string" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bond.c:995 -#, c-format -msgid "'%s' option is not valid with mode '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge-port.c:310 -#: ../src/libnm-core-impl/nm-setting-ovs-bridge.c:151 -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:289 -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:170 -#: ../src/libnm-core-impl/nm-setting-team-port.c:307 -#, c-format -msgid "missing setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge-port.c:320 -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:312 -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:193 -#: ../src/libnm-core-impl/nm-setting-team-port.c:317 -#, c-format -msgid "" -"A connection with a '%s' setting must have the slave-type set to '%s'. " -"Instead it is '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1175 -#, c-format -msgid "value '%d' is out of range <%d-%d>" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1194 -msgid "is not a valid MAC address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1238 -msgid "the mask can't contain bits 0 (STP), 1 (MAC) or 2 (LACP)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1260 -msgid "is not a valid link local MAC address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1272 -msgid "is not a valid VLAN filtering protocol" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1284 -#, fuzzy -msgid "is not a valid option" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-bridge.c:1296 -#, c-format -msgid "'%s' option must be a power of 2" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:968 -#, c-format -msgid "setting required for connection of type '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:999 -#, c-format -msgid "Unknown slave type '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1014 -#, c-format -msgid "Slave connections need a valid '%s' property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1038 -#, c-format -msgid "Cannot set '%s' without '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1097 -#, c-format -msgid "'%s' is not a valid UUID" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1142 -#, c-format -msgid "connection type '%s' is not valid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1248 -#, c-format -msgid "'%s' connections must be enslaved to '%s', not '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1264 -#, c-format -msgid "metered value %d is not valid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1278 -#: ../src/libnm-core-impl/nm-setting-connection.c:1292 -#: ../src/libnm-core-impl/nm-setting-connection.c:1309 -#, c-format -msgid "value %d is not valid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1337 -msgid "DHCP option cannot be longer than 255 characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1348 -#, fuzzy -msgid "MUD URL is not a valid URL" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1368 -#, fuzzy -msgid "invalid permissions not in format \"user:$UNAME[:]\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1397 -#, c-format -msgid "property type should be set to '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1415 -#, c-format -msgid "slave-type '%s' requires a '%s' setting in the connection" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1426 -#, c-format -msgid "" -"Detect a slave connection with '%s' set and a port type '%s'. '%s' should be " -"set to '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1452 -#, c-format -msgid "A slave connection with '%s' set to '%s' cannot have a '%s' setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-connection.c:1469 -msgid "UUID needs normalization" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:483 -msgid "flags invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:492 -msgid "flags invalid - disabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:518 -#: ../src/libnm-core-impl/nm-setting-dcb.c:564 -msgid "property invalid (not enabled)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:527 -msgid "element invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:542 -msgid "sum not 100%" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:573 -#: ../src/libnm-core-impl/nm-setting-dcb.c:608 -msgid "property invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-dcb.c:598 -msgid "property missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ethtool.c:311 -msgid "unsupported ethtool setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ethtool.c:320 -#, fuzzy -msgid "setting has invalid variant type" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ethtool.c:332 -msgid "coalesce option must be either 0 or 1" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ethtool.c:349 -msgid "pause-autoneg cannot be enabled when setting rx/tx options" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ethtool.c:374 -#, fuzzy, c-format -msgid "unknown ethtool option '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:295 -#, c-format -msgid "property value '%s' is empty or too long (>64)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:325 -#, c-format -msgid "'%s' contains invalid char(s) (use [A-Za-z._-])" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:351 -#, c-format -msgid "'%s' length is invalid (should be 5 or 6 digits)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:365 -#, c-format -msgid "'%s' is not a number" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:402 -msgid "property is empty or wrong size" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:415 -msgid "property must contain only digits" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-gsm.c:429 -msgid "can't be enabled when manual configuration is present" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-infiniband.c:201 -msgid "Must specify a P_Key if specifying parent" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-infiniband.c:212 -msgid "InfiniBand P_Key connection did not specify parent interface name" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-infiniband.c:234 -#, c-format -msgid "" -"interface name of software infiniband device must be '%s' or unset (instead " -"it is '%s')" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-infiniband.c:262 -#, c-format -msgid "mtu can be at most %u but it is %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:112 -#, c-format -msgid "Missing IPv4 address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:112 -#, c-format -msgid "Missing IPv6 address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:119 -#, c-format -msgid "Invalid IPv4 address '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:120 -#, c-format -msgid "Invalid IPv6 address '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:136 -#, c-format -msgid "Invalid IPv4 address prefix '%u'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:137 -#, c-format -msgid "Invalid IPv6 address prefix '%u'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:154 -#, c-format -msgid "Invalid routing metric '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1318 -#: ../src/libnm-core-impl/nm-setting-sriov.c:399 -msgid "unknown attribute" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1328 -#: ../src/libnm-core-impl/nm-setting-sriov.c:409 -#, fuzzy, c-format -msgid "invalid attribute type '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1337 -#, c-format -msgid "attribute is not valid for a IPv4 route" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1338 -#, c-format -msgid "attribute is not valid for a IPv6 route" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1351 -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1381 -#, c-format -msgid "'%s' is not a valid IPv4 address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1352 -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1382 -#, c-format -msgid "'%s' is not a valid IPv6 address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1372 -#, c-format -msgid "invalid prefix %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1393 -#, fuzzy, c-format -msgid "%s is not a valid route type" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:1452 -#, c-format -msgid "route scope is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2631 -msgid "invalid priority" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2644 -msgid "missing table" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2654 -#, fuzzy -msgid "invalid action type" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2663 -msgid "has from/src but the prefix-length is zero" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2671 -msgid "missing from/src for a non zero prefix-length" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2678 -#, fuzzy -msgid "invalid from/src" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2685 -msgid "invalid prefix length for from/src" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2694 -msgid "has to/dst but the prefix-length is zero" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2702 -msgid "missing to/dst for a non zero prefix-length" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2709 -#, fuzzy -msgid "invalid to/dst" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2716 -msgid "invalid prefix length for to/dst" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2726 -msgid "invalid iifname" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2736 -msgid "invalid oifname" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2744 -msgid "invalid source port range" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2752 -msgid "invalid destination port range" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2762 -msgid "suppress_prefixlength out of range" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2770 -msgid "suppress_prefixlength is only allowed with the to-table action" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2913 -#, fuzzy, c-format -msgid "invalid key \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2925 -#, c-format -msgid "duplicate key %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2941 -#, fuzzy, c-format -msgid "invalid variant type '%s' for \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2952 -msgid "missing \"family\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:2960 -#, fuzzy -msgid "invalid \"family\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3017 -msgid "\"uid-range-start\" is greater than \"uid-range-end\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3211 -msgid "Unsupported to-string-flags argument" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3219 -msgid "Unsupported extra-argument" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3524 -#, c-format -msgid "unsupported key \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3531 -#, c-format -msgid "duplicate key \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3538 -#, fuzzy, c-format -msgid "invalid value for \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3550 -msgid "empty text does not describe a rule" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3558 -#, c-format -msgid "missing argument for \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3572 -msgid "invalid \"from\" part" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3588 -msgid "invalid \"to\" part" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3599 -#, c-format -msgid "cannot detect address family for rule" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3666 -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3756 -#, c-format -msgid "rule is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:3737 -msgid "invalid address family" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5010 -#, c-format -msgid "rule #%u is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5358 -#, c-format -msgid "%d. DNS server address is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5377 -#, c-format -msgid "%d. IP address is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5392 -#, c-format -msgid "%d. IP address has 'label' property with invalid type" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5404 -#, c-format -msgid "%d. IP address has invalid label '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5422 -msgid "gateway cannot be set if there are no addresses configured" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5434 -msgid "gateway is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5452 -#, c-format -msgid "%d. route is invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5465 -#, fuzzy, c-format -msgid "invalid attribute: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5485 -#, c-format -msgid "%u. rule has wrong address-family" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5497 -#, c-format -msgid "%u. rule is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5513 -#, fuzzy, c-format -msgid "'%s' is not a valid IAID" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5527 -#, c-format -msgid "the property cannot be set when '%s' is disabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5552 -msgid "the property is currently supported only for DHCPv4" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5569 -#, fuzzy, c-format -msgid "'%s' is not a valid IP or subnet" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ip-config.c:5585 -#, c-format -msgid "a gateway is incompatible with '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:330 -#, c-format -msgid "'%d' is not a valid tunnel mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:357 -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:383 -#, c-format -msgid "'%s' is not a valid IPv%c address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:402 -msgid "tunnel keys can only be specified for GRE tunnels" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:415 -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:433 -#, c-format -msgid "'%s' is not a valid tunnel key" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:447 -msgid "a fixed TTL is allowed only when path MTU discovery is enabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:462 -#, c-format -msgid "some flags are invalid for the select mode: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip-tunnel.c:475 -#, c-format -msgid "wired setting not allowed for mode %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:132 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:177 -#, c-format -msgid "this property cannot be empty for '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:148 -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:162 -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:178 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:197 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:211 -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:225 -#, c-format -msgid "this property is not allowed for '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:230 -#, c-format -msgid "'%s' is not a valid FQDN" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:243 -msgid "property cannot be set when dhcp-hostname is also set" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:258 -msgid "FQDN flags requires a FQDN set" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:277 -#, c-format -msgid "multiple addresses are not allowed for '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip4-config.c:294 -msgid "property should be TRUE when method is set to disabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:275 -msgid "value is not a valid token" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:289 -msgid "only makes sense with EUI64 address generation mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:303 -msgid "invalid DUID" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:318 -msgid "token is not in canonical form" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ip6-config.c:335 -msgid "property should be TRUE when method is set to ignore or disabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:229 -msgid "the key is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:238 -#, c-format -msgid "the key must be %d characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:247 -msgid "the key contains non-hexadecimal characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:316 -#: ../src/libnm-core-impl/nm-setting-macvlan.c:138 -#: ../src/libnm-core-impl/nm-setting-vlan.c:620 -#, c-format -msgid "property is not specified and neither is '%s:%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:347 -#, c-format -msgid "EAP key management requires '%s' setting presence" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:356 -msgid "must be either psk (0) or eap (1)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:365 -#, c-format -msgid "invalid port %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macsec.c:375 -msgid "only valid for psk mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-macvlan.c:153 -msgid "non promiscuous operation is allowed only in passthru mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-match.c:714 -#: ../src/libnm-core-impl/nm-setting-match.c:730 -#: ../src/libnm-core-impl/nm-setting-match.c:746 -#: ../src/libnm-core-impl/nm-setting-match.c:762 -#, c-format -msgid "is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-olpc-mesh.c:96 -#: ../src/libnm-core-impl/nm-setting-wireless.c:801 -msgid "SSID length is out of range <1-32> bytes" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-olpc-mesh.c:108 -#: ../src/libnm-core-impl/nm-setting-wireless.c:854 -#, c-format -msgid "'%d' is not a valid channel" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-bridge.c:160 -#, c-format -msgid "A connection with a '%s' setting must not have a master." -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-bridge.c:174 -#, fuzzy, c-format -msgid "'%s' is not allowed in fail_mode" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:90 -#: ../src/libnm-core-impl/nm-setting-user.c:91 -msgid "missing key" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:98 -#: ../src/libnm-core-impl/nm-setting-user.c:99 -msgid "key is too long" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:105 -#: ../src/libnm-core-impl/nm-setting-user.c:106 -msgid "key must be UTF8" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:114 -#: ../src/libnm-core-impl/nm-setting-user.c:153 -msgid "key contains invalid characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:123 -msgid "key cannot start with \"NM.\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:153 -#: ../src/libnm-core-impl/nm-setting-user.c:180 -msgid "value is missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:162 -#: ../src/libnm-core-impl/nm-setting-user.c:189 -msgid "value is too large" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:170 -#: ../src/libnm-core-impl/nm-setting-user.c:197 -msgid "value is not valid UTF8" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:313 -#: ../src/libnm-core-impl/nm-setting-user.c:365 -#, c-format -msgid "invalid key \"%s\": %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:337 -#: ../src/libnm-core-impl/nm-setting-user.c:389 -#, c-format -msgid "maximum number of user data entries reached (%u instead of %u)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-external-ids.c:380 -msgid "" -"OVS external IDs can only be added to a profile of type OVS bridge/port/" -"interface or to OVS system interface" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:93 -#, fuzzy, c-format -msgid "'%s' is not a valid interface type" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:120 -#, c-format -msgid "A connection with a '%s' setting needs connection.type explicitly set" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:134 -#, c-format -msgid "A connection of type '%s' cannot have ovs-interface.type \"system\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:148 -#, c-format -msgid "A connection of type '%s' cannot have an ovs-interface.type \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:170 -#, c-format -msgid "A connection can not have both '%s' and '%s' settings at the same time" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:184 -#, c-format -msgid "" -"A connection with '%s' setting must be of connection.type \"ovs-interface\" " -"but is \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:200 -#, c-format -msgid "" -"A connection with '%s' setting needs to be of '%s' interface type, not '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:222 -#, c-format -msgid "A connection with ovs-interface.type '%s' setting a 'ovs-patch' setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:250 -#, c-format -msgid "Missing ovs interface setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:256 -#, c-format -msgid "Missing ovs interface type" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-interface.c:298 -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:179 -#, c-format -msgid "A connection with a '%s' setting must have a master." -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:215 -#, c-format -msgid "'%s' is not allowed in vlan_mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:228 -#, c-format -msgid "the tag id must be in range 0-4094 but is %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:238 -#, fuzzy, c-format -msgid "'%s' is not allowed in lacp" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-ovs-port.c:251 -#, c-format -msgid "'%s' is not allowed in bond_mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ppp.c:335 -#, c-format -msgid "'%d' is out of valid range <128-16384>" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-ppp.c:348 -#, c-format -msgid "setting this property requires non-zero '%s' property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-proxy.c:123 -#, c-format -msgid "invalid proxy method" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-proxy.c:133 -#: ../src/libnm-core-impl/nm-setting-proxy.c:145 -#, c-format -msgid "this property is not allowed for method none" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-proxy.c:159 -#, c-format -msgid "the script is too large" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-proxy.c:170 -#, c-format -msgid "the script is not valid utf8" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-proxy.c:181 -#, c-format -msgid "the script lacks FindProxyForURL function" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-sriov.c:424 -#: ../src/libnm-core-impl/nm-setting-wired.c:787 -#: ../src/libnm-core-impl/nm-setting-wired.c:803 -#: ../src/libnm-core-impl/nm-setting-wired.c:877 -#: ../src/libnm-core-impl/nm-setting-wired.c:935 -#: ../src/libnm-core-impl/nm-setting-wireless.c:944 -#: ../src/libnm-core-impl/nm-setting-wireless.c:963 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:4125 -#, c-format -msgid "'%s' is not a valid MAC address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-sriov.c:1054 -#, c-format -msgid "VF with index %u, but the total number of VFs is %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-sriov.c:1068 -#, c-format -msgid "invalid VF %u: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-sriov.c:1082 -#, c-format -msgid "duplicate VF index %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-sriov.c:1106 -#, c-format -msgid "VFs %d and %d are not sorted by ascending index" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tc-config.c:54 -#: ../src/libnm-core-impl/nm-setting-tc-config.c:420 -#: ../src/libnm-core-impl/nm-setting-tc-config.c:697 -#, c-format -msgid "kind is missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tc-config.c:62 -#: ../src/libnm-core-impl/nm-setting-tc-config.c:428 -#: ../src/libnm-core-impl/nm-setting-tc-config.c:705 -#, c-format -msgid "'%s' is not a valid kind" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tc-config.c:71 -#: ../src/libnm-core-impl/nm-setting-tc-config.c:714 -msgid "parent handle missing" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tc-config.c:1284 -msgid "there are duplicate TC qdiscs" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tc-config.c:1303 -msgid "there are duplicate TC filters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:119 -#: ../src/libnm-core-impl/nm-setting-team.c:193 -#: ../src/libnm-core-impl/nm-setting-team.c:325 -#, c-format -msgid "%s is out of range [0, %d]" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:170 -#, c-format -msgid "Missing target-host in nsna_ping link watcher" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:178 -#: ../src/libnm-core-impl/nm-setting-team.c:301 -#, c-format -msgid "target-host '%s' contains invalid characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:292 -#, c-format -msgid "Missing %s in arp_ping link watcher" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:310 -#, c-format -msgid "source-host '%s' contains invalid characters" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-team.c:335 -msgid "vlanid is out of range [-1, 4094]" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tun.c:149 -#, c-format -msgid "'%u': invalid mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tun.c:160 -#, c-format -msgid "'%s': invalid user ID" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-tun.c:172 -#, c-format -msgid "'%s': invalid group ID" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-user.c:131 -msgid "key requires a '.' for a namespace" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-user.c:146 -msgid "key cannot contain \"..\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-user.c:322 -msgid "maximum number of user data entries reached" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-veth.c:89 -#, fuzzy, c-format -msgid "'%s' is not a valid interface name" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-vlan.c:632 -#, c-format -msgid "the vlan id must be in range 0-4094 but is %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vlan.c:642 -msgid "flags are invalid" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vlan.c:654 -msgid "vlan setting should have a ethernet setting as well" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:560 -msgid "cannot set connection.multi-connect for VPN setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:599 -msgid "setting contained a secret with an empty name" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:638 -#: ../src/libnm-core-impl/nm-setting.c:2126 -msgid "not a secret property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:646 -msgid "secret is not of correct type" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:728 -#: ../src/libnm-core-impl/nm-setting-vpn.c:778 -#, c-format -msgid "secret name cannot be empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vpn.c:744 -msgid "secret flags property not found" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vrf.c:73 -msgid "table cannot be zero" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-vxlan.c:329 -#: ../src/libnm-core-impl/nm-setting-vxlan.c:340 -#, fuzzy, c-format -msgid "'%s' is not a valid IP%s address" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-setting-vxlan.c:363 -#, c-format -msgid "%d is greater than local port max %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:767 -#, c-format -msgid "'%s' is not a valid Ethernet port value" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:777 -#, c-format -msgid "'%s' is not a valid duplex value" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:850 -#, fuzzy, c-format -msgid "invalid key '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-wired.c:862 -#, fuzzy, c-format -msgid "invalid value for key '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-wired.c:911 -msgid "Wake-on-LAN mode 'default' and 'ignore' are exclusive flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:923 -msgid "Wake-on-LAN password can only be used with magic packet mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:954 -msgid "both speed and duplex should have a valid value or both should be unset" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wired.c:955 -msgid "both speed and duplex are required for static link configuration" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:748 -msgid "missing public-key for peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:754 -msgid "invalid public-key for peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:764 -msgid "invalid preshared-key for peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:783 -msgid "invalid endpoint for peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:795 -#, c-format -msgid "invalid IP address \"%s\" for allowed-ip of peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:806 -msgid "invalid preshared-key-flags for peer" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1598 -#, c-format -msgid "peer #%u has no public-key" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1611 -#, c-format -msgid "peer #%u has invalid public-key" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1627 -#, c-format -msgid "peer #%u has invalid endpoint" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1659 -#, c-format -msgid "peer #%u has invalid allowed-ips setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1673 -#, c-format -msgid "peer #%u is invalid: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1744 -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1763 -#, c-format -msgid "method \"%s\" is not supported for WireGuard" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1787 -msgid "key must be 32 bytes base64 encoded" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1918 -#, fuzzy -msgid "invalid peer secrets" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1944 -#, c-format -msgid "peer #%u lacks public-key" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireguard.c:1961 -#, c-format -msgid "non-existing peer '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:925 -#, fuzzy, c-format -msgid "'%s' is not a valid value for '%s' mode connections" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:941 -#, c-format -msgid "'%s' security requires '%s=%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:970 -#, c-format -msgid "'%s' security requires '%s' setting presence" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:995 -#, c-format -msgid "'%d' value is out of range <0-3>" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1072 -#, c-format -msgid "'%s' can only be used with '%s=%s' (WEP)" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1109 -#, c-format -msgid "" -"'%s' can only be used with 'owe', 'wpa-psk', 'sae', 'wpa-eap' or 'wpa-eap-" -"suite-b-192' key management" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless-security.c:1127 -#, c-format -msgid "" -"pmf can only be 'default' or 'required' when using 'owe', 'sae' or 'wpa-eap-" -"suite-b-192' key management" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:813 -#, c-format -msgid "'%s' is not a valid Wi-Fi mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:826 -#, c-format -msgid "'%s' is not a valid band" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:839 -#, c-format -msgid "'%s' requires setting '%s' property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:869 -#, c-format -msgid "'%s' requires '%s' and '%s' property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:981 -#: ../src/libnm-core-impl/nm-team-utils.c:2253 -#, c-format -msgid "invalid value" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:994 -msgid "Wake-on-WLAN mode 'default' and 'ignore' are exclusive flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:1005 -msgid "Wake-on-WLAN trying to set unknown flag" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:1018 -msgid "AP isolation can be set only in AP mode" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wireless.c:1042 -#, c-format -msgid "conflicting value of mac-address-randomization and cloned-mac-address" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wpan.c:171 -msgid "page must be defined along with a channel" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wpan.c:180 -#, c-format -msgid "page must be between %d and %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting-wpan.c:191 -#, c-format -msgid "channel must not be between %d and %d" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting.c:795 -#, c-format -msgid "duplicate property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting.c:815 -#, c-format -msgid "unknown property" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting.c:896 -#: ../src/libnm-core-impl/nm-setting.c:950 -#, c-format -msgid "can't set property of type '%s' from value of type '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting.c:917 -#: ../src/libnm-core-impl/nm-setting.c:933 -#, fuzzy, c-format -msgid "failed to set property: %s" -msgstr "تعذّر التحميل" - -#: ../src/libnm-core-impl/nm-setting.c:970 -#, c-format -msgid "can not set property: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-setting.c:2016 -msgid "secret not found" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:1531 -#: ../src/libnm-core-impl/nm-team-utils.c:1548 -#, fuzzy, c-format -msgid "invalid D-Bus property \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-team-utils.c:1560 -#, c-format -msgid "duplicate D-Bus property \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:1580 -#, c-format -msgid "invalid D-Bus property \"%s\" for \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:1652 -#, c-format -msgid "unknown link-watcher name \"%s\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:2239 -#, c-format -msgid "value out or range" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:2274 -#, fuzzy, c-format -msgid "invalid runner-tx-hash" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-team-utils.c:2303 -#, fuzzy, c-format -msgid "%s is only allowed for runner %s" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-team-utils.c:2313 -#, fuzzy, c-format -msgid "%s is only allowed for runners %s" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-core-impl/nm-team-utils.c:2334 -#, c-format -msgid "cannot set parameters for lacp and activebackup runners together" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:2348 -#, fuzzy, c-format -msgid "missing link watcher" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-team-utils.c:2374 -#, c-format -msgid "team config exceeds size limit" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:2385 -#, c-format -msgid "team config is not valid UTF-8" -msgstr "" - -#: ../src/libnm-core-impl/nm-team-utils.c:2560 -#, fuzzy, c-format -msgid "invalid D-Bus type \"%s\"" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-team-utils.c:2599 -#, fuzzy, c-format -msgid "invalid link-watchers: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:2227 -#, c-format -msgid "'%s' is not a valid handle." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2375 -#, c-format -msgid "'%s' unexpected: parent already specified." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2393 -#, fuzzy, c-format -msgid "invalid handle: '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:2415 -msgid "parent not specified." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2479 -#, c-format -msgid "unsupported qdisc option: '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2609 -msgid "action name missing." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2634 -#, c-format -msgid "unsupported action option: '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2771 -msgid "invalid action: " -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:2775 -#, c-format -msgid "unsupported tfilter option: '%s'." -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3163 -#, c-format -msgid "failed stat file %s: %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3174 -#, c-format -msgid "not a file (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3185 -#, c-format -msgid "invalid file owner %d for %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3197 -#, c-format -msgid "file permissions for %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3207 -#, c-format -msgid "reject %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3227 -#, c-format -msgid "path is not absolute (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3242 -#, c-format -msgid "Plugin file does not exist (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3251 -#, c-format -msgid "Plugin is not a valid file (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3262 -#, c-format -msgid "libtool archives are not supported (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:3339 -#, c-format -msgid "Could not find \"%s\" binary" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4183 -#, fuzzy -msgid "unknown secret flags" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:4193 -msgid "conflicting secret flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4204 -msgid "secret flags must not be \"not-required\"" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4212 -msgid "unsupported secret flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4242 -msgid "can't be simultaneously disabled and enabled" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4250 -msgid "WPS is required" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4318 -#, c-format -msgid "not a valid ethernet MAC address for mask at position %lld" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4337 -#, c-format -msgid "not a valid ethernet MAC address #%u at position %lld" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4952 -msgid "not valid utf-8" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:4973 -#: ../src/libnm-core-impl/nm-utils.c:5026 -msgid "is not a JSON object" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5002 -msgid "value is NULL" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5002 -msgid "value is empty" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5014 -#, c-format -msgid "invalid JSON at position %d (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5142 -#: ../src/libnm-core-impl/nm-utils.c:5162 -msgid "unterminated escape sequence" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5188 -#, fuzzy, c-format -msgid "unknown attribute '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:5206 -#, c-format -msgid "missing key-value separator '%c' after '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5226 -#, c-format -msgid "invalid uint32 value '%s' for attribute '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5240 -#, fuzzy, c-format -msgid "invalid int32 value '%s' for attribute '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:5253 -#, fuzzy, c-format -msgid "invalid uint64 value '%s' for attribute '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:5266 -#, c-format -msgid "invalid uint8 value '%s' for attribute '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5280 -#, c-format -msgid "invalid boolean value '%s' for attribute '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5294 -#, c-format -msgid "unsupported attribute '%s' of type '%s'" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5596 -#, c-format -msgid "Bridge VLANs %d and %d are not sorted by ascending vid" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5620 -#, c-format -msgid "duplicate bridge VLAN vid %u" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5632 -msgid "only one VLAN can be the PVID" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5677 -#, fuzzy, c-format -msgid "unknown flags 0x%x" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnm-core-impl/nm-utils.c:5689 -msgid "" -"'fqdn-no-update' and 'fqdn-serv-update' flags cannot be set at the same time" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5700 -msgid "'fqdn-clear-flags' flag is incompatible with other FQDN flags" -msgstr "" - -#: ../src/libnm-core-impl/nm-utils.c:5708 -msgid "DHCPv6 does not support the E (encoded) FQDN flag" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:284 -#, c-format -msgid "cannot load plugin \"%s\": %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:295 -#, c-format -msgid "failed to load nm_vpn_editor_plugin_factory() from %s (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:321 -#, c-format -msgid "unknown error initializing plugin %s" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:341 -#, c-format -msgid "cannot load VPN plugin in '%s': missing plugin name" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:349 -#, c-format -msgid "cannot load VPN plugin in '%s': invalid service name" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:481 -#, c-format -msgid "the plugin does not support import capability" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-editor-plugin.c:505 -#, c-format -msgid "the plugin does not support export capability" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:109 -#, c-format -msgid "missing filename" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:117 -#, c-format -msgid "filename must be an absolute path (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:126 -#, c-format -msgid "filename has invalid format (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:419 -#, c-format -msgid "there exists a conflicting plugin (%s) that has the same %s.%s value" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:458 -#, c-format -msgid "there exists a conflicting plugin with the same name (%s)" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:1050 -#, c-format -msgid "missing \"plugin\" setting" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:1060 -#, c-format -msgid "%s: don't retry loading plugin which already failed previously" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:1134 -msgid "missing filename to load VPN plugin info" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:1149 -msgid "missing name for VPN plugin info" -msgstr "" - -#: ../src/libnm-core-impl/nm-vpn-plugin-info.c:1163 -msgid "missing service for VPN plugin info" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2453 -#, c-format -msgid "object class '%s' has no property named '%s'" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2462 -#, c-format -msgid "property '%s' of object class '%s' is not writable" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2471 -#, c-format -msgid "" -"construct property \"%s\" for object '%s' can't be set after construction" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2482 -#, c-format -msgid "'%s::%s' is not a valid property name; '%s' is not a GObject subtype" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2495 -#, c-format -msgid "unable to set property '%s' of type '%s' from value of type '%s'" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:2507 -#, c-format -msgid "" -"value \"%s\" of type '%s' is invalid or out of range for property '%s' of " -"type '%s'" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5405 -msgid "interface name is missing" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5413 -msgid "interface name is too short" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5421 -msgid "interface name is reserved" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5434 -msgid "interface name contains an invalid character" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5442 -msgid "interface name is longer than 15 characters" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5467 -#, fuzzy, c-format -msgid "'%%' is not allowed in interface names" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5479 -#, fuzzy, c-format -msgid "'%s' is not allowed as interface name" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5501 -msgid "" -"interface name must be alphanumerical with no forward or backward slashes" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5518 -msgid "interface name must not be empty" -msgstr "" - -#: ../src/libnm-glib-aux/nm-shared-utils.c:5526 -msgid "interface name must be UTF-8 encoded" -msgstr "" - -#: ../src/libnm-log-core/nm-logging.c:252 -#, c-format -msgid "Unknown log level '%s'" -msgstr "" - -#: ../src/libnm-log-core/nm-logging.c:360 -#, c-format -msgid "Unknown log domain '%s'" -msgstr "" - -#. TRANSLATORS: the first %s is the partial value entered by -#. * the user, the second %s a list of compatible values. -#. -#: ../src/libnmc-base/nm-client-utils.c:108 -#: ../src/libnmc-base/nm-client-utils.c:152 -#, c-format -msgid "'%s' is ambiguous (%s)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:123 -#, c-format -msgid "'%s' is not valid; use [%s] or [%s]" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:176 -#, c-format -msgid "'%s' is not valid; use [%s], [%s] or [%s]" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:230 -#, c-format -msgid "'%s' is ambiguous: %s" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:243 -#, c-format -msgid "missing name, try one of [%s]" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:248 ../src/nmcli/connections.c:3543 -#: ../src/nmcli/connections.c:3601 -#, c-format -msgid "'%s' not among [%s]" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:291 -#: ../src/libnmc-base/nm-client-utils.c:305 -#: ../src/libnmc-base/nm-client-utils.c:341 -#: ../src/libnmc-base/nm-client-utils.c:346 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1818 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1849 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2793 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2850 ../src/nmcli/common.c:1453 -#: ../src/nmcli/connections.c:73 ../src/nmcli/connections.c:83 -#: ../src/nmcli/devices.c:476 ../src/nmcli/devices.c:583 -#: ../src/nmcli/devices.c:589 ../src/nmcli/general.c:30 -#: ../src/nmcli/general.c:85 ../src/nmcli/general.c:91 -msgid "unknown" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:292 -msgid "unmanaged" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:293 -msgid "unavailable" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:294 ../src/nmcli/general.c:39 -msgid "disconnected" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:295 -msgid "connecting (prepare)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:296 -msgid "connecting (configuring)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:297 -msgid "connecting (need authentication)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:298 -msgid "connecting (getting IP configuration)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:299 -msgid "connecting (checking IP connectivity)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:301 -msgid "connecting (starting secondary connections)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:302 ../src/nmcli/general.c:37 -msgid "connected" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:303 ../src/nmcli/connections.c:76 -msgid "deactivating" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:304 -msgid "connection failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:311 -#: ../src/libnmc-base/nm-client-utils.c:312 -#: ../src/libnmc-base/nm-client-utils.c:313 -#: ../src/libnmc-base/nm-client-utils.c:314 -#: ../src/libnmc-base/nm-client-utils.c:315 -#: ../src/libnmc-base/nm-client-utils.c:316 -#, fuzzy -msgid "connecting (externally)" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:317 -msgid "connected (externally)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:318 -#: ../src/libnmc-base/nm-client-utils.c:319 -msgid "deactivating (externally)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:342 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:880 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2785 -#: ../src/nmcli/connections.c:5295 ../src/nmcli/connections.c:7221 -#: ../src/nmcli/connections.c:7222 ../src/nmcli/devices.c:582 -#: ../src/nmcli/devices.c:588 ../src/nmcli/devices.c:1363 -#: ../src/nmcli/general.c:92 ../src/nmcli/utils.h:311 -msgid "yes" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:343 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:880 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2788 -#: ../src/nmcli/connections.c:5294 ../src/nmcli/connections.c:7221 -#: ../src/nmcli/connections.c:7222 ../src/nmcli/devices.c:582 -#: ../src/nmcli/devices.c:588 ../src/nmcli/devices.c:1363 -#: ../src/nmcli/general.c:93 ../src/nmcli/utils.h:311 -#, fuzzy -msgid "no" -msgstr "بلا" - -#: ../src/libnmc-base/nm-client-utils.c:344 -msgid "yes (guessed)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:345 -msgid "no (guessed)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:353 -msgid "No reason given" -msgstr "" - -#. We should not really come here -#: ../src/libnmc-base/nm-client-utils.c:354 ../src/nmcli/connections.c:3563 -#: ../src/nmcli/connections.c:3622 -#, c-format -msgid "Unknown error" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:355 -msgid "Device is now managed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:356 -msgid "Device is now unmanaged" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:358 -msgid "The device could not be readied for configuration" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:361 -msgid "" -"IP configuration could not be reserved (no available address, timeout, etc.)" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:363 -msgid "The IP configuration is no longer valid" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:365 -msgid "Secrets were required, but not provided" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:367 -msgid "802.1X supplicant disconnected" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:369 -msgid "802.1X supplicant configuration failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:370 -msgid "802.1X supplicant failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:372 -msgid "802.1X supplicant took too long to authenticate" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:374 -msgid "PPP service failed to start" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:375 -msgid "PPP service disconnected" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:376 -msgid "PPP failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:378 -msgid "DHCP client failed to start" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:379 -msgid "DHCP client error" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:380 -msgid "DHCP client failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:382 -msgid "Shared connection service failed to start" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:384 -msgid "Shared connection service failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:386 -msgid "AutoIP service failed to start" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:387 -msgid "AutoIP service error" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:388 -msgid "AutoIP service failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:389 -msgid "The line is busy" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:390 -msgid "No dial tone" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:392 -msgid "No carrier could be established" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:394 -msgid "The dialing request timed out" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:396 -msgid "The dialing attempt failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:398 -msgid "Modem initialization failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:400 -msgid "Failed to select the specified APN" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:402 -msgid "Not searching for networks" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:404 -msgid "Network registration denied" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:406 -msgid "Network registration timed out" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:408 -msgid "Failed to register with the requested network" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:409 -msgid "PIN check failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:411 -msgid "Necessary firmware for the device may be missing" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:412 -msgid "The device was removed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:413 -msgid "NetworkManager went to sleep" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:415 -msgid "The device's active connection disappeared" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:417 -msgid "Device disconnected by user or client" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:418 -msgid "Carrier/link changed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:420 -msgid "The device's existing connection was assumed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:422 -msgid "The supplicant is now available" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:424 -msgid "The modem could not be found" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:426 -msgid "The Bluetooth connection failed or timed out" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:428 -msgid "GSM Modem's SIM card not inserted" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:430 -msgid "GSM Modem's SIM PIN required" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:432 -msgid "GSM Modem's SIM PUK required" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:433 -msgid "GSM Modem's SIM wrong" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:435 -msgid "InfiniBand device does not support connected mode" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:437 -msgid "A dependency of the connection failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:439 -msgid "A problem with the RFC 2684 Ethernet over ADSL bridge" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:441 -msgid "ModemManager is unavailable" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:443 -msgid "The Wi-Fi network could not be found" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:445 -msgid "A secondary connection of the base connection failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:446 -msgid "DCB or FCoE setup failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:447 -msgid "teamd control failed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:449 -msgid "Modem failed or no longer available" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:451 -msgid "Modem now ready and available" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:452 -msgid "SIM PIN was incorrect" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:454 -msgid "New connection activation was enqueued" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:455 -msgid "The device's parent changed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:457 -msgid "The device parent's management changed" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:459 -#, fuzzy -msgid "Open vSwitch database connection failed" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:461 -msgid "A duplicate IP address was detected" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:463 -msgid "The selected IP method is not supported" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:465 -msgid "Failed to configure SR-IOV parameters" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:467 -msgid "The Wi-Fi P2P peer could not be found" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:474 -msgid "Unknown reason" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:476 -#, fuzzy -msgid "The connection was disconnected" -msgstr "لا يمكن إضافة اتصال VPN" - -#: ../src/libnmc-base/nm-client-utils.c:478 -#, fuzzy -msgid "Disconnected by user" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:480 -msgid "The base network connection was interrupted" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:482 -msgid "The VPN service stopped unexpectedly" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:484 -msgid "The VPN service returned invalid configuration" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:486 -#, fuzzy -msgid "The connection attempt timed out" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:488 -msgid "The VPN service did not start in time" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:490 -msgid "The VPN service failed to start" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:491 -msgid "No valid secrets" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:492 -msgid "Invalid secrets" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:494 -#, fuzzy -msgid "The connection was removed" -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../src/libnmc-base/nm-client-utils.c:496 -#, fuzzy -msgid "Master connection failed" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:498 -msgid "Could not create a software link" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:500 -msgid "The device disappeared" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:823 -msgid "missing colon for \".:\" format" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:840 -msgid "missing dot for \".:\" format" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:846 -msgid "missing setting for \".:\" format" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:857 -msgid "missing property for \".:\" format" -msgstr "" - -#: ../src/libnmc-base/nm-client-utils.c:867 -#, fuzzy -msgid "invalid setting name" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-client-utils.c:881 -#, fuzzy -msgid "property name is not UTF-8" -msgstr "إتّصالات VPN" - -#: ../src/libnmc-base/nm-client-utils.c:898 -#: ../src/libnmc-base/nm-client-utils.c:904 -msgid "secret is not UTF-8" -msgstr "" - -#: ../src/libnmc-base/nm-polkit-listener.c:327 -#, c-format -msgid "Could not find any session id for uid %d" -msgstr "" - -#: ../src/libnmc-base/nm-polkit-listener.c:329 -#, fuzzy, c-format -msgid "Could not retrieve session id: %s" -msgstr "حذف اتصال VPN \"%s\"؟" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:222 -#, c-format -msgid "Preshared-key for %s" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:270 -#: ../src/libnmc-base/nm-secret-agent-simple.c:357 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:4954 -#: ../src/nmtui/nmt-page-dsl.c:49 ../src/nmtui/nmt-page-wifi.c:334 -msgid "Username" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:275 -#: ../src/libnmc-base/nm-secret-agent-simple.c:312 -#: ../src/libnmc-base/nm-secret-agent-simple.c:335 -#: ../src/libnmc-base/nm-secret-agent-simple.c:367 -#: ../src/libnmc-base/nm-secret-agent-simple.c:918 -#: ../src/libnmc-base/nm-secret-agent-simple.c:953 -#: ../src/libnmc-base/nm-secret-agent-simple.c:980 -#: ../src/libnmc-base/nm-vpn-helpers.c:143 -#: ../src/libnmc-base/nm-vpn-helpers.c:147 -#: ../src/libnmc-base/nm-vpn-helpers.c:153 -#: ../src/libnmc-base/nm-vpn-helpers.c:158 ../src/nmcli/devices.c:4641 -#: ../src/nmtui/nmt-page-dsl.c:62 ../src/nmtui/nmt-page-wifi.c:274 -#: ../src/nmtui/nmt-page-wifi.c:308 ../src/nmtui/nmt-page-wifi.c:347 -msgid "Password" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:284 -msgid "Identity" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:289 -msgid "Private key password" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:325 -#: ../src/nmtui/nmt-page-wifi.c:287 -msgid "Key" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:362 -#: ../src/nmtui/nmt-page-dsl.c:65 -msgid "Service" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:473 -msgid "WireGuard private-key" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:512 -#, fuzzy, c-format -msgid "Secrets are required to connect WireGuard VPN '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:620 -#: ../src/libnmc-base/nm-secret-agent-simple.c:914 -#: ../src/libnmc-base/nm-secret-agent-simple.c:949 -#: ../src/libnmc-base/nm-secret-agent-simple.c:976 -#: ../src/libnmc-base/nm-secret-agent-simple.c:995 -#, c-format -msgid "A password is required to connect to '%s'." -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:879 -msgid "Authentication required by wireless network" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:881 -#, c-format -msgid "" -"Passwords or encryption keys are required to access the wireless network " -"'%s'." -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:887 -msgid "Wired 802.1X authentication" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:888 -#, c-format -msgid "Secrets are required to access the wired network '%s'" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:894 -msgid "DSL authentication" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:895 -#, fuzzy, c-format -msgid "Secrets are required for the DSL connection '%s'" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:904 -msgid "PIN code required" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:905 -msgid "PIN code is needed for the mobile broadband device" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:908 -msgid "PIN" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:913 -#: ../src/libnmc-base/nm-secret-agent-simple.c:948 -#: ../src/libnmc-base/nm-secret-agent-simple.c:975 -msgid "Mobile broadband network password" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:926 -#, c-format -msgid "Secrets are required to access the MACsec network '%s'" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:930 -msgid "MACsec PSK authentication" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:932 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:6382 -msgid "MKA CAK" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:937 -msgid "MACsec EAP authentication" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:942 -msgid "WireGuard VPN secret" -msgstr "" - -#: ../src/libnmc-base/nm-secret-agent-simple.c:985 -msgid "VPN password required" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:41 -#, c-format -msgid "unknown VPN plugin \"%s\"" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:57 -#, c-format -msgid "cannot load legacy-only VPN plugin \"%s\" for \"%s\"" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:65 -#, c-format -msgid "" -"cannot load VPN plugin \"%s\" due to missing \"%s\". Missing client plugin?" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:72 -#, c-format -msgid "failed to load VPN plugin \"%s\": %s" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:148 -msgid "Certificate password" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:149 -msgid "HTTP proxy password" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:154 -#: ../src/libnmc-base/nm-vpn-helpers.c:159 -msgid "Group password" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:163 ../src/nmtui/nmt-page-ip4.c:131 -#: ../src/nmtui/nmt-page-ip6.c:132 -msgid "Gateway" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:164 -msgid "Cookie" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:165 -msgid "Gateway certificate hash" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:267 -#, fuzzy, c-format -msgid "Invalid peer starting at %s:%zu: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-vpn-helpers.c:388 -msgid "" -"The name of the WireGuard config must be a valid interface name followed by " -"\".conf\"" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:671 -#, c-format -msgid "unrecognized line at %s:%zu" -msgstr "" - -#: ../src/libnmc-base/nm-vpn-helpers.c:678 -#, fuzzy, c-format -msgid "invalid value for '%s' at %s:%zu" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-vpn-helpers.c:686 -#, fuzzy, c-format -msgid "invalid secret '%s' at %s:%zu" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-base/nm-vpn-helpers.c:815 -#, fuzzy, c-format -msgid "Failed to create WireGuard connection: %s" -msgstr "خطأ أثناء فتح اتصال VPN '%s'" - -#: ../src/libnmc-setting/nm-meta-setting-access.c:501 -#, c-format -msgid "field '%s' has to be alone" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-access.c:523 -#, c-format -msgid "invalid field '%s%s%s%s%s'; %s%s%s" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:263 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:329 -#, c-format -msgid "invalid prefix '%s'; <1-%d> allowed" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:275 -#, c-format -msgid "invalid IP address: %s" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:300 -msgid "" -"The valid syntax is: 'ip[/prefix] [next-hop] [metric] [attribute=val]... [," -"ip[/prefix] ...]'" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:341 -#, c-format -msgid "the next hop ('%s') must be first" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:351 -#, c-format -msgid "the metric ('%s') must be before attributes" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:402 -#, c-format -msgid "invalid route: %s. %s" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:470 -#, c-format -msgid "cannot read pac-script from file '%s'" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:479 -#, c-format -msgid "file '%s' contains non-valid utf-8" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:493 -#, c-format -msgid "'%s' does not contain a valid PAC Script" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:499 -#, c-format -msgid "Not a valid PAC Script" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:552 -#, c-format -msgid "cannot read team config from file '%s'" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:561 -#, c-format -msgid "team config file '%s' contains non-valid utf-8" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1052 -msgid "auto" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1214 -#, c-format -msgid "%s (%s)" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1403 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1411 -#: ../src/libnmc-setting/nm-meta-setting-desc.c:4301 -msgid "'%s' is out of range [%" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1420 -#, c-format -msgid "'%s' is not a valid number" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1476 -#, c-format -msgid "'%s' is out of range [0, %u]" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1520 -#, c-format -msgid "'%s' is not a valid Ethernet MAC" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1644 -#, c-format -msgid "invalid option '%s', use a combination of [%s]" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1785 -#, c-format -msgid "%d (key)" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1787 -#, c-format -msgid "%d (passphrase)" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1790 -#, c-format -msgid "%d (unknown)" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1803 -msgid "0 (NONE)" -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1809 -msgid "REORDER_HEADERS, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1811 -msgid "GVRP, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1813 -msgid "LOOSE_BINDING, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1815 -msgid "MVRP, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1836 -#, fuzzy -msgid "0 (none)" -msgstr "بلا" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1842 -msgid "agent-owned, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1844 -msgid "not saved, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:1846 -msgid "not required, " -msgstr "" - -#: ../src/libnmc-setting/nm-meta-setting-desc.c:2048 -#, c-format -msgid "'%s' is not valid; use "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -90,7 +91,7 @@ fixed priority. Example: priority 5 from 192.167.4.0/24 table 45 - + A list of IPv6 destination addresses, prefix length, optional IPv6 next hop addresses, optional route metric, optional attribute. The valid syntax is: @@ -140,7 +141,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -171,7 +173,7 @@ Example: priority 5 from 1:2:3::5/128 table 45 - + diff --git a/src/libnm-client-impl/nm-settings-docs-gir.xml b/src/libnm-client-impl/nm-settings-docs-gir.xml index d8022132..77a95b51 100644 --- a/src/libnm-client-impl/nm-settings-docs-gir.xml +++ b/src/libnm-client-impl/nm-settings-docs-gir.xml @@ -5,7 +5,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -353,7 +353,7 @@ - + diff --git a/src/libnm-client-impl/nm-vpn-service-plugin.c b/src/libnm-client-impl/nm-vpn-service-plugin.c index 2a217502..3493d1db 100644 --- a/src/libnm-client-impl/nm-vpn-service-plugin.c +++ b/src/libnm-client-impl/nm-vpn-service-plugin.c @@ -729,54 +729,6 @@ nm_vpn_service_plugin_secrets_required(NMVpnServicePlugin *plugin, /*****************************************************************************/ -typedef struct { - char *buf; - gsize n_buf; - int fd; - bool eof : 1; - char buf_full[1024]; -} ReadFdBuf; - -static inline gboolean -_read_fd_buf_c(ReadFdBuf *read_buf, char *ch) -{ - gssize n_read; - - if (read_buf->n_buf > 0) - goto out_data; - if (read_buf->eof) - return FALSE; - -again: - n_read = read(read_buf->fd, read_buf->buf_full, sizeof(read_buf->buf_full)); - if (n_read <= 0) { - if (n_read < 0 && errno == EAGAIN) { - struct pollfd pfd; - int r; - - memset(&pfd, 0, sizeof(pfd)); - pfd.fd = read_buf->fd; - pfd.events = POLLIN; - - r = poll(&pfd, 1, -1); - if (r > 0) - goto again; - /* error or timeout. Fall through and set EOF. */ - } - read_buf->eof = TRUE; - return FALSE; - } - - read_buf->buf = read_buf->buf_full; - read_buf->n_buf = n_read; - -out_data: - read_buf->n_buf--; - *ch = read_buf->buf[0]; - read_buf->buf++; - return TRUE; -} - #define DATA_KEY_TAG "DATA_KEY=" #define DATA_VAL_TAG "DATA_VAL=" #define SECRET_KEY_TAG "SECRET_KEY=" @@ -808,7 +760,7 @@ nm_vpn_service_plugin_read_vpn_details(int fd, GHashTable **out_data, GHashTable nm_auto_free_gstring GString *val = NULL; nm_auto_free_gstring GString *line = NULL; GString *str = NULL; - ReadFdBuf read_buf; + char c; if (out_data) g_return_val_if_fail(*out_data == NULL, FALSE); @@ -819,27 +771,37 @@ nm_vpn_service_plugin_read_vpn_details(int fd, GHashTable **out_data, GHashTable secrets = g_hash_table_new_full(nm_str_hash, g_str_equal, g_free, (GDestroyNotify) nm_free_secret); - read_buf.buf = NULL; - read_buf.n_buf = 0; - read_buf.fd = fd; - read_buf.eof = FALSE; - line = g_string_new(NULL); /* Read stdin for data and secret items until we get a DONE */ while (1) { - gboolean eof; - char c = '\0'; + ssize_t nr; + + nr = read(fd, &c, 1); + if (nr < 0) { + if (errno == EAGAIN) { + struct pollfd pfd; + int r; - eof = !_read_fd_buf_c(&read_buf, &c); + memset(&pfd, 0, sizeof(pfd)); + pfd.fd = fd; + pfd.events = POLLIN; + + r = poll(&pfd, 1, -1); + if (r > 0) + continue; + + /* error or timeout. Fall through and break. */ + } + break; + } - if (!eof && c == '\0') { - /* On the first '\0' char, we also assume the data is finished. Abort. */ - read_buf.eof = TRUE; - eof = TRUE; + if (nr > 0 && c == '\0') { + /* '\0' are not supported. Replace with newline. */ + c = '\n'; } - if (!eof && c != '\n') { + if (nr > 0 && c != '\n') { g_string_append_c(line, c); if (line->len > 512 * 1024) { /* we are about to read a huge line. That is not right, abort. */ @@ -893,7 +855,7 @@ nm_vpn_service_plugin_read_vpn_details(int fd, GHashTable **out_data, GHashTable next: g_string_truncate(line, 0); - if (eof) + if (nr == 0) break; } diff --git a/src/libnm-client-impl/tests/test-libnm.c b/src/libnm-client-impl/tests/test-libnm.c index 0f600a4a..1810e139 100644 --- a/src/libnm-client-impl/tests/test-libnm.c +++ b/src/libnm-client-impl/tests/test-libnm.c @@ -2272,6 +2272,12 @@ _memfd_create(const char *name) return -1; } +typedef enum { + READ_VPN_DETAIL_TYPE_GOOD, + READ_VPN_DETAIL_TYPE_NO_DONE, + READ_VPN_DETAIL_TYPE_BROKEN, +} ReadVpnDetailType; + typedef struct { const char *key; const char *val; @@ -2285,6 +2291,7 @@ _do_read_vpn_details_impl1(const char *file, int memfd, char *mem, gsize len, + ReadVpnDetailType detail_type, const ReadVpnDetailData *expected_data, guint expected_data_len, const ReadVpnDetailData *expected_secrets, @@ -2294,10 +2301,27 @@ _do_read_vpn_details_impl1(const char *file, off_t lseeked; gs_unref_hashtable GHashTable *data = NULL; gs_unref_hashtable GHashTable *secrets = NULL; + char ch; + gboolean append_quit; + char read_buf[1024]; + gssize n_read; + gssize i; written = write(memfd, mem, len); g_assert_cmpint(written, ==, (gssize) len); + append_quit = nmtst_get_rand_bool(); + + if (append_quit) { + if (len > 0 && mem[len - 1] != '\n') { + ch = '\n'; + written = write(memfd, &ch, 1); + g_assert_cmpint(written, ==, 1); + } + written = write(memfd, "QUIT", 4); + g_assert_cmpint(written, ==, 4); + } + lseeked = lseek(memfd, 0, SEEK_SET); g_assert_cmpint(lseeked, ==, 0); @@ -2327,13 +2351,14 @@ _do_read_vpn_details_impl1(const char *file, if (nm_streq(_expected[_i].key, _k)) \ break; \ } \ - if (_i >= _expected_len) \ + if (_i >= _expected_len) { \ g_error("%s:%d: hash '%s' contains unexpected data key '%s' with value '%s'", \ file, \ line, \ G_STRINGIFY(hash), \ _k, \ _v); \ + } \ } \ \ for (_i = 0; _i < _expected_len; _i++) { \ @@ -2342,7 +2367,7 @@ _do_read_vpn_details_impl1(const char *file, g_assert(_d->key); \ g_assert(_d->val); \ _v = g_hash_table_lookup(_hash, _d->key); \ - if (!nm_streq0(_v, _d->val)) \ + if (!nm_streq0(_v, _d->val)) { \ g_error("%s:%d: hash '%s' contains data key '%s' with value %s%s%s but we " \ "expected '%s'", \ file, \ @@ -2351,20 +2376,71 @@ _do_read_vpn_details_impl1(const char *file, _d->key, \ NM_PRINT_FMT_QUOTE_STRING(_v), \ _d->val); \ + } \ } \ \ g_assert_cmpint(g_hash_table_size(_hash), ==, _expected_len); \ } \ G_STMT_END + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER _assert_hash(data, expected_data, expected_data_len); _assert_hash(secrets, expected_secrets, expected_secrets_len); + NM_PRAGMA_WARNING_REENABLE #undef _assert_hash + + n_read = read(memfd, read_buf, sizeof(read_buf)); + + if (0) { + gs_free char *ss = NULL; + + g_print(">>>> n_read=%zd; \"%s\"", + n_read, + n_read > 0 ? ( + ss = nm_utils_buf_utf8safe_escape_cp(read_buf, + n_read, + NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)) + : ""); + } + + g_assert_cmpint(n_read, >=, 0); + g_assert_cmpint(n_read, <, sizeof(read_buf)); + + i = read(memfd, &ch, 1); + g_assert_cmpint(i, ==, 0); + + switch (detail_type) { + case READ_VPN_DETAIL_TYPE_GOOD: + g_assert_cmpint(n_read, >=, 0); + i = 0; + while (i < n_read && NM_IN_SET(read_buf[i], '\n')) + i++; + if (append_quit) + g_assert_cmpmem("QUIT", 4, &read_buf[i], n_read - i); + else + g_assert_cmpint(n_read - i, ==, 0); + break; + case READ_VPN_DETAIL_TYPE_NO_DONE: + g_assert_cmpint(n_read, ==, 0); + break; + case READ_VPN_DETAIL_TYPE_BROKEN: + g_assert_cmpint(n_read, >, 0); + if (append_quit) { + g_assert_cmpint(n_read, >, 4); + g_assert(memmem(&read_buf[i], n_read + i, "QUIT", 4)); + } + break; + default: + g_assert_not_reached(); + break; + } + return TRUE; } #define _do_read_vpn_details_impl0(str, \ + detail_type, \ expected_data, \ expected_data_len, \ expected_secrets, \ @@ -2385,6 +2461,7 @@ _do_read_vpn_details_impl1(const char *file, _memfd, \ "" str "", \ NM_STRLEN(str), \ + (detail_type), \ expected_data, \ expected_data_len, \ expected_secrets, \ @@ -2393,14 +2470,16 @@ _do_read_vpn_details_impl1(const char *file, } \ G_STMT_END -#define _do_read_vpn_details_empty(str) _do_read_vpn_details_impl0(str, NULL, 0, NULL, 0, {}) +#define _do_read_vpn_details_empty(str) \ + _do_read_vpn_details_impl0(str, READ_VPN_DETAIL_TYPE_GOOD, NULL, 0, NULL, 0, {}) -#define _do_read_vpn_details(str, expected_data, expected_secrets, pre_setup_cmd) \ - _do_read_vpn_details_impl0(str, \ - expected_data, \ - G_N_ELEMENTS(expected_data), \ - expected_secrets, \ - G_N_ELEMENTS(expected_secrets), \ +#define _do_read_vpn_details(str, detail_type, expected_data, expected_secrets, pre_setup_cmd) \ + _do_read_vpn_details_impl0(str, \ + detail_type, \ + expected_data, \ + G_N_ELEMENTS(expected_data), \ + expected_secrets, \ + G_N_ELEMENTS(expected_secrets), \ pre_setup_cmd) static void @@ -2426,6 +2505,7 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "DONE\n" "\n" "", + READ_VPN_DETAIL_TYPE_GOOD, READ_VPN_DETAIL_DATA({"some-key", "string"}, {"some-other-key", "val2"}, ), READ_VPN_DETAIL_DATA({"some-secret", "val3"}, ), ); @@ -2433,6 +2513,7 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "DATA_KEY=some-key\n" "DATA_VAL=string\n" "DONE\n", + READ_VPN_DETAIL_TYPE_GOOD, READ_VPN_DETAIL_DATA({"some-key", "string"}, ), READ_VPN_DETAIL_DATA(), ); @@ -2461,6 +2542,7 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "\n" "DONE\n" "", + READ_VPN_DETAIL_TYPE_BROKEN, READ_VPN_DETAIL_DATA({"some-key", "string\ncontinued after a line break"}, ), READ_VPN_DETAIL_DATA({"key names\ncan have\ncontinuations too", "value"}, ), ); @@ -2474,6 +2556,7 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "=continuations too\n" "SECRET_VAL=value\n" "", + READ_VPN_DETAIL_TYPE_NO_DONE, READ_VPN_DETAIL_DATA({"some-key", "string\ncontinued after a line break"}, ), READ_VPN_DETAIL_DATA({"key names\ncan have\ncontinuations too", "value"}, ), ); @@ -2507,6 +2590,7 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "DONE\n" "\n" "", + READ_VPN_DETAIL_TYPE_GOOD, READ_VPN_DETAIL_DATA({"some\nkey-2", "val2"}, {"some-key", "string"}, {"key3\nkey-2", "val3"}, ), @@ -2546,8 +2630,15 @@ test_nm_vpn_service_plugin_read_vpn_details(void) "DONE\n" "\n" "", - READ_VPN_DETAIL_DATA({"some\nkey-2", "val2"}, {"some-key", "string"}, ), - READ_VPN_DETAIL_DATA(), ); + READ_VPN_DETAIL_TYPE_GOOD, + READ_VPN_DETAIL_DATA({"some\nkey-2", "val2"}, + {"some-key", "string"}, + {"key3\nkey-2", "val3"}, ), + READ_VPN_DETAIL_DATA({"some-secret", "val3"}, + {"key-inval", "in\xc1val"}, + {"ke\xc0yx", "inval"}, + {"keyx", ""}, + {"", "val3"}), ); } /*****************************************************************************/ @@ -3049,10 +3140,12 @@ check_dbus_properties: break; p_expected_type++; if (p_expected_type >= &expected_types[G_N_ELEMENTS(expected_types)]) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("D-Bus type \"%s\" is not implemented (in property %s.%s)", (const char *) mpr->dbus_type, mif->dbus_iface_name, mpr->dbus_property_name); + NM_PRAGMA_WARNING_REENABLE } } @@ -3151,6 +3244,7 @@ check_dbus_properties: break; } if (p_expected_type_2 >= &expected_types[G_N_ELEMENTS(expected_types)]) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("D-Bus property \"%s.%s\" (type \"%s\") maps to property \"%s\", " "but that has an unexpected property type %s (expected %s)", mif->dbus_iface_name, @@ -3159,6 +3253,7 @@ check_dbus_properties: pspec->name, g_type_name(pspec->value_type), g_type_name(p_expected_type->default_gtype)); + NM_PRAGMA_WARNING_REENABLE } } diff --git a/src/libnm-client-public/NetworkManager.h b/src/libnm-client-public/NetworkManager.h index 3134562e..66f676a1 100644 --- a/src/libnm-client-public/NetworkManager.h +++ b/src/libnm-client-public/NetworkManager.h @@ -120,8 +120,8 @@ #if !defined(NETWORKMANAGER_COMPILATION) \ && (!defined(NM_NO_INCLUDE_EXTRA_HEADERS) || !NM_NO_INCLUDE_EXTRA_HEADERS) /* historically, NetworkManager.h drags in the following system headers. - * These are not strictly necessary and the user may wish to opt out from - * including them. */ + * These are not strictly necessary and the user may wish to opt out from + * including them. */ #include #include #include diff --git a/src/libnm-client-public/nm-client.h b/src/libnm-client-public/nm-client.h index ac615b57..2e3e77c4 100644 --- a/src/libnm-client-public/nm-client.h +++ b/src/libnm-client-public/nm-client.h @@ -27,9 +27,9 @@ G_BEGIN_DECLS * * Since: 1.24 */ -typedef enum { /*< flags >*/ - NM_CLIENT_INSTANCE_FLAGS_NONE = 0, - NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS = 1, +typedef enum /*< flags >*/ { + NM_CLIENT_INSTANCE_FLAGS_NONE = 0, + NM_CLIENT_INSTANCE_FLAGS_NO_AUTO_FETCH_PERMISSIONS = 1, } NMClientInstanceFlags; #define NM_TYPE_CLIENT (nm_client_get_type()) @@ -61,6 +61,8 @@ _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled" #define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled" +#define NM_CLIENT_RADIO_FLAGS "radio-flags" + #define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections" #define NM_CLIENT_CONNECTIVITY "connectivity" #define NM_CLIENT_CONNECTIVITY_CHECK_URI "connectivity-check-uri" @@ -213,6 +215,9 @@ void nm_client_wimax_set_enabled(NMClient *client, gboolean enabled); NM_DEPRECATED_IN_1_22 gboolean nm_client_wimax_hardware_get_enabled(NMClient *client); +NM_AVAILABLE_IN_1_38 +NMRadioFlags nm_client_get_radio_flags(NMClient *client); + NM_AVAILABLE_IN_1_10 gboolean nm_client_connectivity_check_get_available(NMClient *client); @@ -491,6 +496,10 @@ gboolean nm_client_dbus_set_property_finish(NMClient *client, GAsyncResult *resu NM_AVAILABLE_IN_1_30 void nm_utils_print(int output_mode, const char *msg); +gboolean nm_utils_file_is_certificate(const char *filename); +gboolean nm_utils_file_is_private_key(const char *filename, gboolean *out_encrypted); +gboolean nm_utils_file_is_pkcs12(const char *filename); + G_END_DECLS #endif /* __NM_CLIENT_H__ */ diff --git a/src/libnm-client-test/meson.build b/src/libnm-client-test/meson.build index 8e2fba11..bcac4377 100644 --- a/src/libnm-client-test/meson.build +++ b/src/libnm-client-test/meson.build @@ -13,6 +13,7 @@ libnm_client_test = static_library( ], dependencies: [ libnm_core_public_dep, + libnm_client_public_dep, glib_dep, ], ) diff --git a/src/libnm-client-test/nm-test-utils-impl.c b/src/libnm-client-test/nm-test-utils-impl.c index ef98d9c2..ad642d25 100644 --- a/src/libnm-client-test/nm-test-utils-impl.c +++ b/src/libnm-client-test/nm-test-utils-impl.c @@ -159,7 +159,9 @@ nmtstc_service_init(void) * via pygobject. */ return NULL; } + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("test service %s exited with error code %d", NMTSTC_NM_SERVICE, data.exit_code); + NM_PRAGMA_WARNING_REENABLE } } diff --git a/src/libnm-core-impl/meson.build b/src/libnm-core-impl/meson.build index 2e1f1751..83c29085 100644 --- a/src/libnm-core-impl/meson.build +++ b/src/libnm-core-impl/meson.build @@ -2,35 +2,6 @@ libnm_core_impl_inc = include_directories('.') -if crypto_nss_dep.found() - libnm_crypto_nss = static_library( - 'nm-crypto-nss', - sources: 'nm-crypto-nss.c', - dependencies: [ - libnm_core_public_dep, - crypto_nss_dep, - ], - ) -endif - -if crypto_gnutls_dep.found() - libnm_crypto_gnutls = static_library( - 'nm-crypto-gnutls', - sources: 'nm-crypto-gnutls.c', - dependencies: [ - libnm_core_public_dep, - crypto_gnutls_dep, - ], - ) -endif - -if crypto == 'nss' - libnm_crypto = libnm_crypto_nss -else - assert(crypto == 'gnutls', 'Unexpected setting "crypto=' + crypto + '"') - libnm_crypto = libnm_crypto_gnutls -endif - libnm_core_settings_sources = files( 'nm-setting-6lowpan.c', 'nm-setting-8021x.c', @@ -89,7 +60,6 @@ libnm_core_settings_sources = files( libnm_core_impl_sources = files( 'nm-connection.c', - 'nm-crypto.c', 'nm-dbus-utils.c', 'nm-errors.c', 'nm-keyfile-utils.c', diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c index a9b130a7..27cea2cb 100644 --- a/src/libnm-core-impl/nm-connection.c +++ b/src/libnm-core-impl/nm-connection.c @@ -1641,6 +1641,66 @@ _normalize_gsm_auto_config(NMConnection *self) return TRUE; } +static gboolean +_normalize_802_1x_empty_strings(NMConnection *self) +{ + NMSetting8021x *s_8021x; + gboolean changed = FALSE; + + s_8021x = _connection_get_setting_by_meta_type(NM_CONNECTION_GET_PRIVATE(self), + NM_META_SETTING_TYPE_802_1X); + if (!s_8021x) + return FALSE; + +#define _norm_8021x(s_8021x, getter, prop_name, p_changed) \ + G_STMT_START \ + { \ + NMSetting8021x *_s_8021x = (s_8021x); \ + gboolean *_p_changed = (p_changed); \ + const char *_v; \ + \ + _v = getter(_s_8021x); \ + if (_v && _v[0] == '\0') { \ + g_object_set(_s_8021x, "" prop_name "", NULL, NULL); \ + *(_p_changed) = TRUE; \ + } \ + } \ + G_STMT_END + + _norm_8021x(s_8021x, nm_setting_802_1x_get_identity, NM_SETTING_802_1X_IDENTITY, &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_anonymous_identity, + NM_SETTING_802_1X_ANONYMOUS_IDENTITY, + &changed); + _norm_8021x(s_8021x, nm_setting_802_1x_get_pac_file, NM_SETTING_802_1X_PAC_FILE, &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_subject_match, + NM_SETTING_802_1X_SUBJECT_MATCH, + &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_phase2_subject_match, + NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, + &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_domain_suffix_match, + NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, + &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_phase2_domain_suffix_match, + NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH, + &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_domain_match, + NM_SETTING_802_1X_DOMAIN_MATCH, + &changed); + _norm_8021x(s_8021x, + nm_setting_802_1x_get_phase2_domain_match, + NM_SETTING_802_1X_PHASE2_DOMAIN_MATCH, + &changed); + + return changed; +} + static gboolean _normalize_required_settings(NMConnection *self) { @@ -1952,6 +2012,7 @@ _connection_normalize(NMConnection *connection, was_modified |= _normalize_bridge_vlan_order(connection); was_modified |= _normalize_bridge_port_vlan_order(connection); was_modified |= _normalize_gsm_auto_config(connection); + was_modified |= _normalize_802_1x_empty_strings(connection); was_modified = !!was_modified; diff --git a/src/libnm-core-impl/nm-crypto-gnutls.c b/src/libnm-core-impl/nm-crypto-gnutls.c deleted file mode 100644 index d9e59136..00000000 --- a/src/libnm-core-impl/nm-crypto-gnutls.c +++ /dev/null @@ -1,415 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Dan Williams - * Copyright (C) 2007 - 2015 Red Hat, Inc. - */ - -#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" - -#include "nm-crypto-impl.h" - -#include -#include -#include -#include - -#include "libnm-glib-aux/nm-secret-utils.h" -#include "nm-errors.h" - -/*****************************************************************************/ - -static gboolean -_get_cipher_info(NMCryptoCipherType cipher, int *out_cipher_mech, guint8 *out_real_iv_len) -{ - static const int cipher_mechs[] = { - [NM_CRYPTO_CIPHER_DES_EDE3_CBC] = GNUTLS_CIPHER_3DES_CBC, - [NM_CRYPTO_CIPHER_DES_CBC] = GNUTLS_CIPHER_DES_CBC, - [NM_CRYPTO_CIPHER_AES_128_CBC] = GNUTLS_CIPHER_AES_128_CBC, - [NM_CRYPTO_CIPHER_AES_192_CBC] = GNUTLS_CIPHER_AES_192_CBC, - [NM_CRYPTO_CIPHER_AES_256_CBC] = GNUTLS_CIPHER_AES_256_CBC, - }; - - g_return_val_if_fail(_NM_INT_NOT_NEGATIVE(cipher) - && (gsize) cipher < G_N_ELEMENTS(cipher_mechs), - FALSE); - - if (cipher_mechs[cipher] == 0) - return FALSE; - - NM_SET_OUT(out_cipher_mech, cipher_mechs[cipher]); - NM_SET_OUT(out_real_iv_len, nm_crypto_cipher_get_info(cipher)->real_iv_len); - return TRUE; -} - -/*****************************************************************************/ - -gboolean -_nm_crypto_init(GError **error) -{ - static gboolean initialized = FALSE; - - if (initialized) - return TRUE; - - if (gnutls_global_init() != 0) { - gnutls_global_deinit(); - g_set_error_literal(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Failed to initialize the crypto engine.")); - return FALSE; - } - - initialized = TRUE; - return TRUE; -} - -/*****************************************************************************/ - -guint8 * -_nmtst_crypto_decrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error) -{ - gnutls_cipher_hd_t ctx; - gnutls_datum_t key_dt, iv_dt; - int err; - int cipher_mech; - nm_auto_clear_secret_ptr NMSecretPtr output = {0}; - guint8 pad_i, pad_len; - guint8 real_iv_len; - - if (!_get_cipher_info(cipher, &cipher_mech, &real_iv_len)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_UNKNOWN_CIPHER, - _("Unsupported key cipher for decryption")); - return NULL; - } - - if (!_nm_crypto_init(error)) - return NULL; - - if (iv_len < real_iv_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Invalid IV length (must be at least %u)."), - (guint) real_iv_len); - return NULL; - } - - output.len = data_len; - output.bin = g_malloc(data_len); - - key_dt.data = (unsigned char *) key; - key_dt.size = key_len; - iv_dt.data = (unsigned char *) iv; - iv_dt.size = iv_len; - - err = gnutls_cipher_init(&ctx, cipher_mech, &key_dt, &iv_dt); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to initialize the decryption cipher context: %s (%s)"), - gnutls_strerror_name(err), - gnutls_strerror(err)); - return NULL; - } - - err = gnutls_cipher_decrypt2(ctx, data, data_len, output.bin, output.len); - - gnutls_cipher_deinit(ctx); - - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key: %s (%s)"), - gnutls_strerror_name(err), - gnutls_strerror(err)); - return NULL; - } - - pad_len = output.len > 0 ? output.bin[output.len - 1] : 0; - - /* Check if the padding at the end of the decrypted data is valid */ - if (pad_len == 0 || pad_len > real_iv_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key: unexpected padding length.")); - return NULL; - } - - /* Validate tail padding; last byte is the padding size, and all pad bytes - * should contain the padding size. - */ - for (pad_i = 1; pad_i <= pad_len; ++pad_i) { - if (output.bin[data_len - pad_i] != pad_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key.")); - return NULL; - } - } - - *out_len = output.len - pad_len; - return g_steal_pointer(&output.bin); -} - -guint8 * -_nmtst_crypto_encrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error) -{ - gnutls_cipher_hd_t ctx; - gnutls_datum_t key_dt, iv_dt; - int err; - int cipher_mech; - nm_auto_clear_secret_ptr NMSecretPtr output = {0}; - nm_auto_clear_secret_ptr NMSecretPtr padded_buf = {0}; - gsize i, pad_len; - - nm_assert(iv_len); - - if (cipher == NM_CRYPTO_CIPHER_DES_CBC || !_get_cipher_info(cipher, &cipher_mech, NULL)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_UNKNOWN_CIPHER, - _("Unsupported key cipher for encryption")); - return NULL; - } - - if (!_nm_crypto_init(error)) - return NULL; - - key_dt.data = (unsigned char *) key; - key_dt.size = key_len; - iv_dt.data = (unsigned char *) iv; - iv_dt.size = iv_len; - - err = gnutls_cipher_init(&ctx, cipher_mech, &key_dt, &iv_dt); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to initialize the encryption cipher context: %s (%s)"), - gnutls_strerror_name(err), - gnutls_strerror(err)); - return NULL; - } - - /* If data_len % ivlen == 0, then we add another complete block - * onto the end so that the decrypter knows there's padding. - */ - pad_len = iv_len - (data_len % iv_len); - - padded_buf.len = data_len + pad_len; - padded_buf.bin = g_malloc(padded_buf.len); - memcpy(padded_buf.bin, data, data_len); - for (i = 0; i < pad_len; i++) - padded_buf.bin[data_len + i] = (guint8) (pad_len & 0xFF); - - output.len = padded_buf.len; - output.bin = g_malloc(output.len); - - err = gnutls_cipher_encrypt2(ctx, padded_buf.bin, padded_buf.len, output.bin, output.len); - - gnutls_cipher_deinit(ctx); - - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to encrypt the data: %s (%s)"), - gnutls_strerror_name(err), - gnutls_strerror(err)); - return NULL; - } - - *out_len = output.len; - return g_steal_pointer(&output.bin); -} - -gboolean -_nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error) -{ - gnutls_x509_crt_t der; - gnutls_datum_t dt; - int err; - - if (!_nm_crypto_init(error)) - return FALSE; - - err = gnutls_x509_crt_init(&der); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Error initializing certificate data: %s"), - gnutls_strerror(err)); - return FALSE; - } - - /* Try DER first */ - dt.data = (unsigned char *) data; - dt.size = len; - err = gnutls_x509_crt_import(der, &dt, GNUTLS_X509_FMT_DER); - if (err == GNUTLS_E_SUCCESS) { - gnutls_x509_crt_deinit(der); - return TRUE; - } - - /* And PEM next */ - err = gnutls_x509_crt_import(der, &dt, GNUTLS_X509_FMT_PEM); - gnutls_x509_crt_deinit(der); - if (err == GNUTLS_E_SUCCESS) - return TRUE; - - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Couldn't decode certificate: %s"), - gnutls_strerror(err)); - return FALSE; -} - -gboolean -_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error) -{ - gnutls_pkcs12_t p12; - gnutls_datum_t dt; - int err; - - g_return_val_if_fail(data != NULL, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - dt.data = (unsigned char *) data; - dt.size = data_len; - - err = gnutls_pkcs12_init(&p12); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Couldn't initialize PKCS#12 decoder: %s"), - gnutls_strerror(err)); - return FALSE; - } - - /* DER first */ - err = gnutls_pkcs12_import(p12, &dt, GNUTLS_X509_FMT_DER, 0); - if (err < 0) { - /* PEM next */ - err = gnutls_pkcs12_import(p12, &dt, GNUTLS_X509_FMT_PEM, 0); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Couldn't decode PKCS#12 file: %s"), - gnutls_strerror(err)); - gnutls_pkcs12_deinit(p12); - return FALSE; - } - } - - err = gnutls_pkcs12_verify_mac(p12, password); - - gnutls_pkcs12_deinit(p12); - - if (err != GNUTLS_E_SUCCESS) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Couldn't verify PKCS#12 file: %s"), - gnutls_strerror(err)); - return FALSE; - } - - return TRUE; -} - -gboolean -_nm_crypto_verify_pkcs8(const guint8 *data, - gsize data_len, - gboolean is_encrypted, - const char *password, - GError **error) -{ - gnutls_x509_privkey_t p8; - gnutls_datum_t dt; - int err; - - g_return_val_if_fail(data != NULL, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - err = gnutls_x509_privkey_init(&p8); - if (err < 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Couldn't initialize PKCS#8 decoder: %s"), - gnutls_strerror(err)); - return FALSE; - } - - dt.data = (unsigned char *) data; - dt.size = data_len; - - err = gnutls_x509_privkey_import_pkcs8(p8, - &dt, - GNUTLS_X509_FMT_DER, - is_encrypted ? password : NULL, - is_encrypted ? 0 : GNUTLS_PKCS_PLAIN); - - gnutls_x509_privkey_deinit(p8); - - if (err < 0) { - if (err == GNUTLS_E_UNKNOWN_CIPHER_TYPE) { - /* HACK: gnutls < 3.5.4 doesn't support all the cipher types that openssl - * can use with PKCS#8, so if we encounter one, we have to assume - * the given password works. gnutls needs to unsuckify, apparently. - * Specifically, by default openssl uses pbeWithMD5AndDES-CBC - * which gnutls does not support. - */ - } else { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Couldn't decode PKCS#8 file: %s"), - gnutls_strerror(err)); - return FALSE; - } - } - - return TRUE; -} - -gboolean -_nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) -{ - if (!_nm_crypto_init(error)) - return FALSE; - - gnutls_rnd(GNUTLS_RND_RANDOM, buffer, buffer_len); - return TRUE; -} diff --git a/src/libnm-core-impl/nm-crypto-impl.h b/src/libnm-core-impl/nm-crypto-impl.h deleted file mode 100644 index 61c3f7f8..00000000 --- a/src/libnm-core-impl/nm-crypto-impl.h +++ /dev/null @@ -1,49 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Dan Williams - * Copyright (C) 2007 - 2018 Red Hat, Inc. - */ - -#ifndef __NM_CRYPTO_IMPL_H__ -#define __NM_CRYPTO_IMPL_H__ - -#include "nm-crypto.h" - -gboolean _nm_crypto_init(GError **error); - -gboolean _nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error); - -gboolean _nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error); - -gboolean -_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error); - -gboolean _nm_crypto_verify_pkcs8(const guint8 *data, - gsize data_len, - gboolean is_encrypted, - const char *password, - GError **error); - -/*****************************************************************************/ - -guint8 *_nmtst_crypto_encrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error); - -guint8 *_nmtst_crypto_decrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error); - -#endif /* __NM_CRYPTO_IMPL_H__ */ diff --git a/src/libnm-core-impl/nm-crypto-nss.c b/src/libnm-core-impl/nm-crypto-nss.c deleted file mode 100644 index c27bf09e..00000000 --- a/src/libnm-core-impl/nm-crypto-nss.c +++ /dev/null @@ -1,548 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Dan Williams - * Copyright (C) 2007 - 2009 Red Hat, Inc. - */ - -#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" - -#include "nm-crypto-impl.h" - -NM_PRAGMA_WARNING_DISABLE("-Wstrict-prototypes") -#include -#include -#include -#include -#include -#include -#include -#include -#include -NM_PRAGMA_WARNING_REENABLE - -#include "libnm-glib-aux/nm-secret-utils.h" -#include "nm-errors.h" - -/*****************************************************************************/ - -static gboolean -_get_cipher_info(NMCryptoCipherType cipher, - CK_MECHANISM_TYPE *out_cipher_mech, - guint8 *out_real_iv_len) -{ - static const CK_MECHANISM_TYPE cipher_mechs[] = { - [NM_CRYPTO_CIPHER_DES_EDE3_CBC] = CKM_DES3_CBC_PAD, - [NM_CRYPTO_CIPHER_DES_CBC] = CKM_DES_CBC_PAD, - [NM_CRYPTO_CIPHER_AES_128_CBC] = CKM_AES_CBC_PAD, - [NM_CRYPTO_CIPHER_AES_192_CBC] = CKM_AES_CBC_PAD, - [NM_CRYPTO_CIPHER_AES_256_CBC] = CKM_AES_CBC_PAD, - }; - - g_return_val_if_fail(_NM_INT_NOT_NEGATIVE(cipher) - && (gsize) cipher < G_N_ELEMENTS(cipher_mechs), - FALSE); - - if (!cipher_mechs[cipher]) - return FALSE; - - NM_SET_OUT(out_cipher_mech, cipher_mechs[cipher]); - NM_SET_OUT(out_real_iv_len, nm_crypto_cipher_get_info(cipher)->real_iv_len); - return TRUE; -} - -/*****************************************************************************/ - -gboolean -_nm_crypto_init(GError **error) -{ - static gboolean initialized = FALSE; - SECStatus ret; - - if (initialized) - return TRUE; - - PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 1); - ret = NSS_NoDB_Init(NULL); - if (ret != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Failed to initialize the crypto engine: %d."), - PR_GetError()); - PR_Cleanup(); - return FALSE; - } - - SEC_PKCS12EnableCipher(PKCS12_RC4_40, 1); - SEC_PKCS12EnableCipher(PKCS12_RC4_128, 1); - SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_40, 1); - SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_128, 1); - SEC_PKCS12EnableCipher(PKCS12_DES_56, 1); - SEC_PKCS12EnableCipher(PKCS12_DES_EDE3_168, 1); - SEC_PKCS12SetPreferredCipher(PKCS12_DES_EDE3_168, 1); - - initialized = TRUE; - return TRUE; -} - -guint8 * -_nmtst_crypto_decrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error) -{ - CK_MECHANISM_TYPE cipher_mech; - PK11SlotInfo *slot = NULL; - SECItem key_item; - PK11SymKey *sym_key = NULL; - SECItem *sec_param = NULL; - PK11Context *ctx = NULL; - nm_auto_clear_secret_ptr NMSecretPtr output = {0}; - SECStatus s; - gboolean success = FALSE; - int decrypted_len = 0; - unsigned extra = 0; - unsigned pad_len = 0; - guint32 i; - guint8 real_iv_len; - - if (!_get_cipher_info(cipher, &cipher_mech, &real_iv_len)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_UNKNOWN_CIPHER, - _("Unsupported key cipher for decryption")); - return NULL; - } - - if (iv_len < real_iv_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Invalid IV length (must be at least %u)."), - (guint) real_iv_len); - return NULL; - } - - if (!_nm_crypto_init(error)) - return NULL; - - slot = PK11_GetBestSlot(cipher_mech, NULL); - if (!slot) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Failed to initialize the decryption cipher slot.")); - goto out; - } - - key_item.data = (unsigned char *) key; - key_item.len = key_len; - sym_key = PK11_ImportSymKey(slot, cipher_mech, PK11_OriginUnwrap, CKA_DECRYPT, &key_item, NULL); - if (!sym_key) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to set symmetric key for decryption.")); - goto out; - } - - key_item.data = (unsigned char *) iv; - key_item.len = real_iv_len; - sec_param = PK11_ParamFromIV(cipher_mech, &key_item); - if (!sec_param) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to set IV for decryption.")); - goto out; - } - - ctx = PK11_CreateContextBySymKey(cipher_mech, CKA_DECRYPT, sym_key, sec_param); - if (!ctx) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to initialize the decryption context.")); - goto out; - } - - output.len = data_len; - output.bin = g_malloc(data_len); - - s = PK11_CipherOp(ctx, - (unsigned char *) output.bin, - &decrypted_len, - output.len, - data, - data_len); - if (s != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key: %d."), - PORT_GetError()); - goto out; - } - - if (decrypted_len > data_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key: decrypted data too large.")); - goto out; - } - - s = PK11_DigestFinal(ctx, - (unsigned char *) &output.bin[decrypted_len], - &extra, - data_len - decrypted_len); - if (s != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to finalize decryption of the private key: %d."), - PORT_GetError()); - goto out; - } - - decrypted_len += extra; - pad_len = data_len - decrypted_len; - - /* Check if the padding at the end of the decrypted data is valid */ - if (pad_len == 0 || pad_len > real_iv_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key: unexpected padding length.")); - goto out; - } - - /* Validate tail padding; last byte is the padding size, and all pad bytes - * should contain the padding size. - */ - for (i = pad_len; i > 0; i--) { - if (output.bin[data_len - i] != pad_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Failed to decrypt the private key.")); - goto out; - } - } - - success = TRUE; - -out: - if (ctx) - PK11_DestroyContext(ctx, PR_TRUE); - if (sym_key) - PK11_FreeSymKey(sym_key); - if (sec_param) - SECITEM_FreeItem(sec_param, PR_TRUE); - if (slot) - PK11_FreeSlot(slot); - - if (!success) - return NULL; - - if (decrypted_len < output.len) - nm_explicit_bzero(&output.bin[decrypted_len], output.len - decrypted_len); - *out_len = decrypted_len; - return g_steal_pointer(&output.bin); -} - -guint8 * -_nmtst_crypto_encrypt(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const guint8 *iv, - gsize iv_len, - const guint8 *key, - gsize key_len, - gsize *out_len, - GError **error) -{ - SECStatus ret; - CK_MECHANISM_TYPE cipher_mech = CKM_DES3_CBC_PAD; - PK11SlotInfo *slot = NULL; - SECItem key_item = {.data = (unsigned char *) key, .len = key_len}; - SECItem iv_item = {.data = (unsigned char *) iv, .len = iv_len}; - PK11SymKey *sym_key = NULL; - SECItem *sec_param = NULL; - PK11Context *ctx = NULL; - nm_auto_clear_secret_ptr NMSecretPtr padded_buf = {0}; - nm_auto_clear_secret_ptr NMSecretPtr output = {0}; - int encrypted_len = 0, i; - gboolean success = FALSE; - gsize pad_len; - - if (cipher == NM_CRYPTO_CIPHER_DES_CBC || !_get_cipher_info(cipher, &cipher_mech, NULL)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_UNKNOWN_CIPHER, - _("Unsupported key cipher for encryption")); - return NULL; - } - - if (!_nm_crypto_init(error)) - return NULL; - - slot = PK11_GetBestSlot(cipher_mech, NULL); - if (!slot) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Failed to initialize the encryption cipher slot.")); - return NULL; - } - - sym_key = PK11_ImportSymKey(slot, cipher_mech, PK11_OriginUnwrap, CKA_ENCRYPT, &key_item, NULL); - if (!sym_key) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to set symmetric key for encryption.")); - goto out; - } - - sec_param = PK11_ParamFromIV(cipher_mech, &iv_item); - if (!sec_param) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to set IV for encryption.")); - goto out; - } - - ctx = PK11_CreateContextBySymKey(cipher_mech, CKA_ENCRYPT, sym_key, sec_param); - if (!ctx) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to initialize the encryption context.")); - goto out; - } - - /* If data->len % ivlen == 0, then we add another complete block - * onto the end so that the decrypter knows there's padding. - */ - pad_len = iv_len - (data_len % iv_len); - - padded_buf.len = data_len + pad_len; - padded_buf.bin = g_malloc(padded_buf.len); - - memcpy(padded_buf.bin, data, data_len); - for (i = 0; i < pad_len; i++) - padded_buf.bin[data_len + i] = (guint8) (pad_len & 0xFF); - - output.len = padded_buf.len; - output.bin = g_malloc(output.len); - - ret = - PK11_CipherOp(ctx, output.bin, &encrypted_len, output.len, padded_buf.bin, padded_buf.len); - if (ret != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Failed to encrypt: %d."), - PORT_GetError()); - goto out; - } - - if (encrypted_len != output.len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_ENCRYPTION_FAILED, - _("Unexpected amount of data after encrypting.")); - goto out; - } - - success = TRUE; - -out: - if (ctx) - PK11_DestroyContext(ctx, PR_TRUE); - if (sec_param) - SECITEM_FreeItem(sec_param, PR_TRUE); - if (sym_key) - PK11_FreeSymKey(sym_key); - if (slot) - PK11_FreeSlot(slot); - - if (!success) - return NULL; - - *out_len = output.len; - return g_steal_pointer(&output.bin); -} - -gboolean -_nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error) -{ - CERTCertificate *cert; - - if (!_nm_crypto_init(error)) - return FALSE; - - /* Try DER/PEM first */ - cert = CERT_DecodeCertFromPackage((char *) data, len); - if (!cert) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Couldn't decode certificate: %d"), - PORT_GetError()); - return FALSE; - } - - CERT_DestroyCertificate(cert); - return TRUE; -} - -gboolean -_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error) -{ - SEC_PKCS12DecoderContext *p12ctx = NULL; - SECItem pw = {0}; - PK11SlotInfo *slot = NULL; - SECStatus s; - gboolean success = FALSE; - - g_return_val_if_fail(!error || !*error, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - /* PKCS#12 passwords are apparently UCS2 BIG ENDIAN, and NSS doesn't do - * any conversions for us. - */ - if (password && *password) { - nm_auto_clear_secret_ptr NMSecretPtr ucs2_password = {0}; - - if (g_utf8_validate(password, -1, NULL)) { - long ucs2_chars; - - ucs2_password.bin = - (guint8 *) g_utf8_to_utf16(password, strlen(password), NULL, &ucs2_chars, NULL); - - /* cannot fail, because password is valid UTF-8*/ - nm_assert(ucs2_password.bin && ucs2_chars > 0); - - ucs2_password.len = ucs2_chars * 2; - } - - if (!ucs2_password.bin || ucs2_password.len == 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_PASSWORD, - _("Password must be UTF-8")); - return FALSE; - } - - pw.data = PORT_ZAlloc(ucs2_password.len + 2); - memcpy(pw.data, ucs2_password.bin, ucs2_password.len); - pw.len = ucs2_password.len + 2; - -#if __BYTE_ORDER == __LITTLE_ENDIAN - { - guint16 *p, *p_end; - - p_end = (guint16 *) &(((guint8 *) pw.data)[ucs2_password.len]); - for (p = (guint16 *) pw.data; p < p_end; p++) - *p = GUINT16_SWAP_LE_BE(*p); - } -#endif - } - - slot = PK11_GetInternalKeySlot(); - if (!slot) { - g_set_error(error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_FAILED, _("Couldn't initialize slot")); - goto out; - } - - p12ctx = SEC_PKCS12DecoderStart(&pw, slot, NULL, NULL, NULL, NULL, NULL, NULL); - if (!p12ctx) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Couldn't initialize PKCS#12 decoder: %d"), - PORT_GetError()); - goto out; - } - - s = SEC_PKCS12DecoderUpdate(p12ctx, (guint8 *) data, data_len); - if (s != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Couldn't decode PKCS#12 file: %d"), - PORT_GetError()); - goto out; - } - - s = SEC_PKCS12DecoderVerify(p12ctx); - if (s != SECSuccess) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_DECRYPTION_FAILED, - _("Couldn't verify PKCS#12 file: %d"), - PORT_GetError()); - goto out; - } - - success = TRUE; - -out: - if (p12ctx) - SEC_PKCS12DecoderFinish(p12ctx); - if (slot) - PK11_FreeSlot(slot); - - if (pw.data) - SECITEM_ZfreeItem(&pw, PR_FALSE); - - return success; -} - -gboolean -_nm_crypto_verify_pkcs8(const guint8 *data, - gsize data_len, - gboolean is_encrypted, - const char *password, - GError **error) -{ - g_return_val_if_fail(data != NULL, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - /* NSS apparently doesn't do PKCS#8 natively, but you have to put the - * PKCS#8 key into a PKCS#12 file and import that?? So until we figure - * all that out, we can only assume the password is valid. - */ - return TRUE; -} - -gboolean -_nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) -{ - SECStatus s; - - if (!_nm_crypto_init(error)) - return FALSE; - - s = PK11_GenerateRandom(buffer, buffer_len); - if (s != SECSuccess) { - g_set_error_literal(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_FAILED, - _("Could not generate random data.")); - return FALSE; - } - return TRUE; -} diff --git a/src/libnm-core-impl/nm-crypto.c b/src/libnm-core-impl/nm-crypto.c deleted file mode 100644 index 78f793bd..00000000 --- a/src/libnm-core-impl/nm-crypto.c +++ /dev/null @@ -1,1044 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Dan Williams - * Copyright (C) 2007 - 2018 Red Hat, Inc. - */ - -#include "libnm-core-impl/nm-default-libnm-core.h" - -#include "nm-crypto.h" - -#include -#include -#include - -#include "libnm-glib-aux/nm-secret-utils.h" -#include "libnm-glib-aux/nm-io-utils.h" - -#include "nm-crypto-impl.h" -#include "nm-utils.h" -#include "nm-errors.h" - -#define PEM_RSA_KEY_BEGIN "-----BEGIN RSA PRIVATE KEY-----" -#define PEM_RSA_KEY_END "-----END RSA PRIVATE KEY-----" - -#define PEM_DSA_KEY_BEGIN "-----BEGIN DSA PRIVATE KEY-----" -#define PEM_DSA_KEY_END "-----END DSA PRIVATE KEY-----" - -#define PEM_CERT_BEGIN "-----BEGIN CERTIFICATE-----" -#define PEM_CERT_END "-----END CERTIFICATE-----" - -#define PEM_PKCS8_ENC_KEY_BEGIN "-----BEGIN ENCRYPTED PRIVATE KEY-----" -#define PEM_PKCS8_ENC_KEY_END "-----END ENCRYPTED PRIVATE KEY-----" - -#define PEM_PKCS8_DEC_KEY_BEGIN "-----BEGIN PRIVATE KEY-----" -#define PEM_PKCS8_DEC_KEY_END "-----END PRIVATE KEY-----" - -#define PEM_TPM2_WRAPPED_KEY_BEGIN "-----BEGIN TSS2 PRIVATE KEY-----" -#define PEM_TPM2_WRAPPED_KEY_END "-----END TSS2 PRIVATE KEY-----" - -#define PEM_TPM2_OLD_WRAPPED_KEY_BEGIN "-----BEGIN TSS2 KEY BLOB-----" -#define PEM_TPM2_OLD_WRAPPED_KEY_END "-----END TSS2 KEY BLOB-----" - -/*****************************************************************************/ - -static const NMCryptoCipherInfo cipher_infos[] = { -#define _CI(_cipher, _name, _digest_len, _real_iv_len) \ - [(_cipher) -1] = {.cipher = _cipher, \ - .name = ""_name \ - "", \ - .digest_len = _digest_len, \ - .real_iv_len = _real_iv_len} - _CI(NM_CRYPTO_CIPHER_DES_EDE3_CBC, "DES-EDE3-CBC", 24, 8), - _CI(NM_CRYPTO_CIPHER_DES_CBC, "DES-CBC", 8, 8), - _CI(NM_CRYPTO_CIPHER_AES_128_CBC, "AES-128-CBC", 16, 16), - _CI(NM_CRYPTO_CIPHER_AES_192_CBC, "AES-192-CBC", 24, 16), - _CI(NM_CRYPTO_CIPHER_AES_256_CBC, "AES-256-CBC", 32, 16), -}; - -const NMCryptoCipherInfo * -nm_crypto_cipher_get_info(NMCryptoCipherType cipher) -{ - g_return_val_if_fail(cipher > NM_CRYPTO_CIPHER_UNKNOWN - && (gsize) cipher < G_N_ELEMENTS(cipher_infos) + 1, - NULL); - -#if NM_MORE_ASSERTS > 10 - { - int i, j; - - for (i = 0; i < (int) G_N_ELEMENTS(cipher_infos); i++) { - const NMCryptoCipherInfo *info = &cipher_infos[i]; - - nm_assert(info->cipher == (NMCryptoCipherType) (i + 1)); - nm_assert(info->name && info->name[0]); - for (j = 0; j < i; j++) - nm_assert(g_ascii_strcasecmp(info->name, cipher_infos[j].name) != 0); - } - } -#endif - - return &cipher_infos[cipher - 1]; -} - -const NMCryptoCipherInfo * -nm_crypto_cipher_get_info_by_name(const char *cipher_name, gssize p_len) -{ - int i; - - nm_assert(nm_crypto_cipher_get_info(NM_CRYPTO_CIPHER_DES_CBC)->cipher - == NM_CRYPTO_CIPHER_DES_CBC); - - if (p_len < 0) { - if (!cipher_name) - return FALSE; - p_len = strlen(cipher_name); - } - - for (i = 0; i < (int) G_N_ELEMENTS(cipher_infos); i++) { - const NMCryptoCipherInfo *info = &cipher_infos[i]; - - if ((gsize) p_len == strlen(info->name) - && g_ascii_strncasecmp(info->name, cipher_name, p_len) == 0) - return info; - } - return NULL; -} - -/*****************************************************************************/ - -static gboolean -find_tag(const char *tag, const guint8 *data, gsize data_len, gsize start_at, gsize *out_pos) -{ - const guint8 *p; - gsize taglen; - - nm_assert(out_pos); - nm_assert(start_at <= data_len); - - taglen = strlen(tag); - - p = memmem(&data[start_at], data_len - start_at, tag, taglen); - if (!p) - return FALSE; - - *out_pos = p - data; - - nm_assert(memcmp(&data[*out_pos], tag, taglen) == 0); - - return TRUE; -} - -#define DEK_INFO_TAG "DEK-Info: " -#define PROC_TYPE_TAG "Proc-Type: " - -static char * -_extract_line(const guint8 **p, const guint8 *p_end) -{ - const guint8 *x, *x0; - - nm_assert(p); - nm_assert(p_end); - nm_assert(*p); - nm_assert(*p < p_end); - - x = x0 = *p; - while (TRUE) { - if (x == p_end) { - *p = p_end; - break; - } - if (*x == '\0') { - /* the data contains embedded NUL. This is the end. */ - *p = p_end; - break; - } - if (*x == '\n') { - *p = x + 1; - break; - } - x++; - } - - if (x == x0) - return NULL; - return g_strndup((char *) x0, x - x0); -} - -static gboolean -parse_old_openssl_key_file(const guint8 *data, - gsize data_len, - NMSecretPtr *out_parsed, - NMCryptoKeyType *out_key_type, - NMCryptoCipherType *out_cipher, - char **out_iv, - GError **error) -{ - gsize start = 0, end = 0; - nm_auto_free_secret char *str = NULL; - char *str_p; - gsize str_len; - int enc_tags = 0; - NMCryptoKeyType key_type; - nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; - nm_auto_free_secret char *iv = NULL; - NMCryptoCipherType cipher = NM_CRYPTO_CIPHER_UNKNOWN; - const char *start_tag; - const char *end_tag; - const guint8 *data_start, *data_end; - - nm_assert(!out_parsed || (out_parsed->len == 0 && !out_parsed->bin)); - nm_assert(!out_iv || !*out_iv); - - NM_SET_OUT(out_key_type, NM_CRYPTO_KEY_TYPE_UNKNOWN); - NM_SET_OUT(out_cipher, NM_CRYPTO_CIPHER_UNKNOWN); - - if (find_tag(PEM_RSA_KEY_BEGIN, data, data_len, 0, &start)) { - key_type = NM_CRYPTO_KEY_TYPE_RSA; - start_tag = PEM_RSA_KEY_BEGIN; - end_tag = PEM_RSA_KEY_END; - } else if (find_tag(PEM_DSA_KEY_BEGIN, data, data_len, 0, &start)) { - key_type = NM_CRYPTO_KEY_TYPE_DSA; - start_tag = PEM_DSA_KEY_BEGIN; - end_tag = PEM_DSA_KEY_END; - } else { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("PEM key file had no start tag")); - return FALSE; - } - - start += strlen(start_tag); - if (!find_tag(end_tag, data, data_len, start, &end)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("PEM key file had no end tag '%s'."), - end_tag); - return FALSE; - } - - str_len = end - start + 1; - str = g_new(char, str_len); - str[0] = '\0'; - str_p = str; - - data_start = &data[start]; - data_end = &data[end]; - - while (data_start < data_end) { - nm_auto_free_secret char *line = NULL; - char *p; - - line = _extract_line(&data_start, data_end); - if (!line) - continue; - - p = nm_secret_strchomp(nm_str_skip_leading_spaces(line)); - - if (!strncmp(p, PROC_TYPE_TAG, strlen(PROC_TYPE_TAG))) { - if (enc_tags++ != 0 || str_p != str) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: Proc-Type was not first tag.")); - return FALSE; - } - - p += strlen(PROC_TYPE_TAG); - if (strcmp(p, "4,ENCRYPTED")) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: unknown Proc-Type tag '%s'."), - p); - return FALSE; - } - } else if (!strncmp(p, DEK_INFO_TAG, strlen(DEK_INFO_TAG))) { - const NMCryptoCipherInfo *cipher_info; - char *comma; - gsize p_len; - - if (enc_tags++ != 1 || str_p != str) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: DEK-Info was not the second tag.")); - return FALSE; - } - - p += strlen(DEK_INFO_TAG); - - /* Grab the IV first */ - comma = strchr(p, ','); - if (!comma || (*(comma + 1) == '\0')) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: no IV found in DEK-Info tag.")); - return FALSE; - } - p_len = comma - p; - comma++; - if (!g_ascii_isxdigit(*comma)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: invalid format of IV in DEK-Info tag.")); - return FALSE; - } - nm_free_secret(iv); - iv = g_strdup(comma); - - /* Get the private key cipher */ - cipher_info = nm_crypto_cipher_get_info_by_name(p, p_len); - if (!cipher_info) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Malformed PEM file: unknown private key cipher '%s'."), - p); - return FALSE; - } - cipher = cipher_info->cipher; - } else { - if (enc_tags == 1) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - "Malformed PEM file: both Proc-Type and DEK-Info tags are required."); - return FALSE; - } - nm_strbuf_append_str(&str_p, &str_len, p); - nm_assert(str_len > 0); - } - } - - parsed.bin = (guint8 *) g_base64_decode(str, &parsed.len); - if (!parsed.bin || parsed.len == 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Could not decode private key.")); - nm_secret_ptr_clear(&parsed); - return FALSE; - } - - NM_SET_OUT(out_key_type, key_type); - NM_SET_OUT(out_iv, g_steal_pointer(&iv)); - NM_SET_OUT(out_cipher, cipher); - nm_secret_ptr_move(out_parsed, &parsed); - return TRUE; -} - -static gboolean -parse_pkcs8_key_file(const guint8 *data, - gsize data_len, - NMSecretPtr *parsed, - gboolean *out_encrypted, - GError **error) -{ - gsize start = 0, end = 0; - const char *start_tag = NULL, *end_tag = NULL; - gboolean encrypted = FALSE; - nm_auto_free_secret char *der_base64 = NULL; - - nm_assert(parsed); - nm_assert(!parsed->bin); - nm_assert(parsed->len == 0); - nm_assert(out_encrypted); - - /* Try encrypted first, decrypted next */ - if (find_tag(PEM_PKCS8_ENC_KEY_BEGIN, data, data_len, 0, &start)) { - start_tag = PEM_PKCS8_ENC_KEY_BEGIN; - end_tag = PEM_PKCS8_ENC_KEY_END; - encrypted = TRUE; - } else if (find_tag(PEM_PKCS8_DEC_KEY_BEGIN, data, data_len, 0, &start)) { - start_tag = PEM_PKCS8_DEC_KEY_BEGIN; - end_tag = PEM_PKCS8_DEC_KEY_END; - encrypted = FALSE; - } else { - g_set_error_literal(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to find expected PKCS#8 start tag.")); - return FALSE; - } - - start += strlen(start_tag); - if (!find_tag(end_tag, data, data_len, start, &end)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to find expected PKCS#8 end tag '%s'."), - end_tag); - return FALSE; - } - - /* g_base64_decode() wants a NULL-terminated string */ - der_base64 = g_strndup((char *) &data[start], end - start); - - parsed->bin = (guint8 *) g_base64_decode(der_base64, &parsed->len); - if (!parsed->bin || parsed->len == 0) { - g_set_error_literal(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to decode PKCS#8 private key.")); - nm_secret_ptr_clear(parsed); - return FALSE; - } - - *out_encrypted = encrypted; - return TRUE; -} - -static gboolean -parse_tpm2_wrapped_key_file(const guint8 *data, - gsize data_len, - gboolean *out_encrypted, - GError **error) -{ - gsize start = 0, end = 0; - const char *start_tag = NULL, *end_tag = NULL; - - nm_assert(out_encrypted); - - if (find_tag(PEM_TPM2_WRAPPED_KEY_BEGIN, data, data_len, 0, &start)) { - start_tag = PEM_TPM2_WRAPPED_KEY_BEGIN; - end_tag = PEM_TPM2_WRAPPED_KEY_END; - } else if (find_tag(PEM_TPM2_OLD_WRAPPED_KEY_BEGIN, data, data_len, 0, &start)) { - start_tag = PEM_TPM2_OLD_WRAPPED_KEY_BEGIN; - end_tag = PEM_TPM2_OLD_WRAPPED_KEY_END; - } else { - g_set_error_literal(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to find expected TSS start tag.")); - return FALSE; - } - - start += strlen(start_tag); - if (!find_tag(end_tag, data, data_len, start, &end)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to find expected TSS end tag '%s'."), - end_tag); - return FALSE; - } - - *out_encrypted = FALSE; - return TRUE; -} - -static gboolean -file_read_contents(const char *filename, NMSecretPtr *out_contents, GError **error) -{ - nm_assert(out_contents); - nm_assert(out_contents->len == 0); - nm_assert(!out_contents->str); - - return nm_utils_file_get_contents(-1, - filename, - 100 * 1024 * 1024, - NM_UTILS_FILE_GET_CONTENTS_FLAG_SECRET, - &out_contents->str, - &out_contents->len, - NULL, - error); -} - -GBytes * -nm_crypto_read_file(const char *filename, GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; - - g_return_val_if_fail(filename, NULL); - - if (!file_read_contents(filename, &contents, error)) - return NULL; - return nm_secret_copy_to_gbytes(contents.bin, contents.len); -} - -/* - * Convert a hex string into bytes. - */ -static guint8 * -_nmtst_convert_iv(const char *src, gsize *out_len, GError **error) -{ - gsize i, num; - gs_free guint8 *c = NULL; - int c0, c1; - - nm_assert(src); - - num = strlen(src); - if (num == 0 || (num % 2) != 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("IV must be an even number of bytes in length.")); - return NULL; - } - - num /= 2; - c = g_malloc(num + 1); - - /* defensively add trailing NUL. This function returns binary data, - * do not assume it's NUL terminated. */ - c[num] = '\0'; - - for (i = 0; i < num; i++) { - if (((c0 = nm_utils_hexchar_to_int(*(src++))) < 0) - || ((c1 = nm_utils_hexchar_to_int(*(src++))) < 0)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("IV contains non-hexadecimal digits.")); - nm_explicit_bzero(c, i); - return FALSE; - } - - c[i] = (c0 << 4) + c1; - } - *out_len = num; - return g_steal_pointer(&c); -} - -guint8 * -nmtst_crypto_make_des_aes_key(NMCryptoCipherType cipher, - const guint8 *salt, - gsize salt_len, - const char *password, - gsize *out_len, - GError **error) -{ - guint8 *key; - const NMCryptoCipherInfo *cipher_info; - - g_return_val_if_fail(salt != NULL, NULL); - g_return_val_if_fail(salt_len >= 8, NULL); - g_return_val_if_fail(password != NULL, NULL); - g_return_val_if_fail(out_len != NULL, NULL); - - *out_len = 0; - - cipher_info = nm_crypto_cipher_get_info(cipher); - - g_return_val_if_fail(cipher_info, NULL); - - if (password[0] == '\0') - return NULL; - - key = g_malloc(cipher_info->digest_len); - - nm_crypto_md5_hash(salt, - 8, - (guint8 *) password, - strlen(password), - key, - cipher_info->digest_len); - - *out_len = cipher_info->digest_len; - return key; -} - -static gboolean -_nmtst_decrypt_key(NMCryptoCipherType cipher, - const guint8 *data, - gsize data_len, - const char *iv, - const char *password, - NMSecretPtr *parsed, - GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr bin_iv = {0}; - nm_auto_clear_secret_ptr NMSecretPtr key = {0}; - - nm_assert(password); - nm_assert(cipher != NM_CRYPTO_CIPHER_UNKNOWN); - nm_assert(iv); - nm_assert(parsed); - nm_assert(!parsed->bin); - nm_assert(parsed->len == 0); - - bin_iv.bin = _nmtst_convert_iv(iv, &bin_iv.len, error); - if (!bin_iv.bin) - return FALSE; - - if (bin_iv.len < 8) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("IV must contain at least 8 characters")); - return FALSE; - } - - /* Convert the password and IV into a DES or AES key */ - key.bin = - nmtst_crypto_make_des_aes_key(cipher, bin_iv.bin, bin_iv.len, password, &key.len, error); - if (!key.bin || !key.len) - return FALSE; - - parsed->bin = _nmtst_crypto_decrypt(cipher, - data, - data_len, - bin_iv.bin, - bin_iv.len, - key.bin, - key.len, - &parsed->len, - error); - if (!parsed->bin || parsed->len == 0) { - nm_secret_ptr_clear(parsed); - return FALSE; - } - - return TRUE; -} - -GBytes * -nmtst_crypto_decrypt_openssl_private_key_data(const guint8 *data, - gsize data_len, - const char *password, - NMCryptoKeyType *out_key_type, - GError **error) -{ - NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN; - nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; - nm_auto_free_secret char *iv = NULL; - NMCryptoCipherType cipher = NM_CRYPTO_CIPHER_UNKNOWN; - - g_return_val_if_fail(data != NULL, NULL); - - NM_SET_OUT(out_key_type, NM_CRYPTO_KEY_TYPE_UNKNOWN); - - if (!_nm_crypto_init(error)) - return NULL; - - if (!parse_old_openssl_key_file(data, data_len, &parsed, &key_type, &cipher, &iv, NULL)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Unable to determine private key type.")); - return NULL; - } - - NM_SET_OUT(out_key_type, key_type); - - if (password) { - nm_auto_clear_secret_ptr NMSecretPtr parsed2 = {0}; - - if (cipher == NM_CRYPTO_CIPHER_UNKNOWN || !iv) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_PASSWORD, - _("Password provided, but key was not encrypted.")); - return NULL; - } - - if (!_nmtst_decrypt_key(cipher, parsed.bin, parsed.len, iv, password, &parsed2, error)) - return NULL; - - return nm_secret_copy_to_gbytes(parsed2.bin, parsed2.len); - } - - if (cipher != NM_CRYPTO_CIPHER_UNKNOWN || iv) - return NULL; - - return nm_secret_copy_to_gbytes(parsed.bin, parsed.len); -} - -GBytes * -nmtst_crypto_decrypt_openssl_private_key(const char *file, - const char *password, - NMCryptoKeyType *out_key_type, - GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; - - if (!_nm_crypto_init(error)) - return NULL; - - if (!file_read_contents(file, &contents, error)) - return NULL; - - return nmtst_crypto_decrypt_openssl_private_key_data(contents.bin, - contents.len, - password, - out_key_type, - error); -} - -static gboolean -extract_pem_cert_data(const guint8 *contents, - gsize contents_len, - NMSecretPtr *out_cert, - GError **error) -{ - gsize start = 0; - gsize end = 0; - nm_auto_free_secret char *der_base64 = NULL; - - nm_assert(contents); - nm_assert(out_cert); - nm_assert(out_cert->len == 0); - nm_assert(!out_cert->ptr); - - if (!find_tag(PEM_CERT_BEGIN, contents, contents_len, 0, &start)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("PEM certificate had no start tag '%s'."), - PEM_CERT_BEGIN); - return FALSE; - } - - start += strlen(PEM_CERT_BEGIN); - if (!find_tag(PEM_CERT_END, contents, contents_len, start, &end)) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("PEM certificate had no end tag '%s'."), - PEM_CERT_END); - return FALSE; - } - - /* g_base64_decode() wants a NULL-terminated string */ - der_base64 = g_strndup((const char *) &contents[start], end - start); - - out_cert->bin = (guint8 *) g_base64_decode(der_base64, &out_cert->len); - if (!out_cert->bin || !out_cert->len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to decode certificate.")); - nm_secret_ptr_clear(out_cert); - return FALSE; - } - - return TRUE; -} - -gboolean -nm_crypto_load_and_verify_certificate(const char *file, - NMCryptoFileFormat *out_file_format, - GBytes **out_certificate, - GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; - - g_return_val_if_fail(file, FALSE); - nm_assert(!error || !*error); - - if (!_nm_crypto_init(error)) - goto out; - - if (!file_read_contents(file, &contents, error)) - goto out; - - if (contents.len == 0) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Certificate file is empty")); - goto out; - } - - /* Check for PKCS#12 */ - if (nm_crypto_is_pkcs12_data(contents.bin, contents.len, NULL)) { - NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_PKCS12); - NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); - return TRUE; - } - - /* Check for plain DER format */ - if (contents.len > 2 && contents.bin[0] == 0x30 && contents.bin[1] == 0x82) { - if (_nm_crypto_verify_x509(contents.bin, contents.len, NULL)) { - NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_X509); - NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); - return TRUE; - } - } else { - nm_auto_clear_secret_ptr NMSecretPtr pem_cert = {0}; - - if (extract_pem_cert_data(contents.bin, contents.len, &pem_cert, NULL)) { - if (_nm_crypto_verify_x509(pem_cert.bin, pem_cert.len, NULL)) { - NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_X509); - NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); - return TRUE; - } - } - } - - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Failed to recognize certificate")); - -out: - NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_UNKNOWN); - NM_SET_OUT(out_certificate, NULL); - return FALSE; -} - -gboolean -nm_crypto_is_pkcs12_data(const guint8 *data, gsize data_len, GError **error) -{ - GError *local = NULL; - gboolean success; - - if (!data_len) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("Certificate file is empty")); - return FALSE; - } - - g_return_val_if_fail(data != NULL, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - success = _nm_crypto_verify_pkcs12(data, data_len, NULL, &local); - if (success == FALSE) { - /* If the error was just a decryption error, then it's pkcs#12 */ - if (local) { - if (g_error_matches(local, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_DECRYPTION_FAILED)) { - success = TRUE; - g_error_free(local); - } else - g_propagate_error(error, local); - } - } - return success; -} - -gboolean -nm_crypto_is_pkcs12_file(const char *file, GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; - - g_return_val_if_fail(file != NULL, FALSE); - - if (!_nm_crypto_init(error)) - return FALSE; - - if (!file_read_contents(file, &contents, error)) - return FALSE; - - return nm_crypto_is_pkcs12_data(contents.bin, contents.len, error); -} - -/* Verifies that a private key can be read, and if a password is given, that - * the private key can be decrypted with that password. - */ -NMCryptoFileFormat -nm_crypto_verify_private_key_data(const guint8 *data, - gsize data_len, - const char *password, - gboolean *out_is_encrypted, - GError **error) -{ - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - gboolean is_encrypted = FALSE; - - g_return_val_if_fail(data != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN); - g_return_val_if_fail(out_is_encrypted == NULL || *out_is_encrypted == FALSE, - NM_CRYPTO_FILE_FORMAT_UNKNOWN); - - if (!_nm_crypto_init(error)) - return NM_CRYPTO_FILE_FORMAT_UNKNOWN; - - /* Check for PKCS#12 first */ - if (nm_crypto_is_pkcs12_data(data, data_len, NULL)) { - is_encrypted = TRUE; - if (!password || _nm_crypto_verify_pkcs12(data, data_len, password, error)) - format = NM_CRYPTO_FILE_FORMAT_PKCS12; - } else { - nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; - - /* Maybe it's PKCS#8 */ - if (parse_pkcs8_key_file(data, data_len, &parsed, &is_encrypted, NULL)) { - if (!password - || _nm_crypto_verify_pkcs8(parsed.bin, parsed.len, is_encrypted, password, error)) - format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; - } else if (parse_tpm2_wrapped_key_file(data, data_len, &is_encrypted, NULL)) { - format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; - } else { - NMCryptoCipherType cipher; - nm_auto_free_secret char *iv = NULL; - - /* Or it's old-style OpenSSL */ - if (parse_old_openssl_key_file(data, data_len, NULL, NULL, &cipher, &iv, NULL)) { - format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; - is_encrypted = (cipher != NM_CRYPTO_CIPHER_UNKNOWN && iv); - } - } - } - - if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN && error && !*error) { - g_set_error(error, - NM_CRYPTO_ERROR, - NM_CRYPTO_ERROR_INVALID_DATA, - _("not a valid private key")); - } - - if (out_is_encrypted) - *out_is_encrypted = is_encrypted; - return format; -} - -NMCryptoFileFormat -nm_crypto_verify_private_key(const char *filename, - const char *password, - gboolean *out_is_encrypted, - GError **error) -{ - nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; - - g_return_val_if_fail(filename != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN); - - if (!_nm_crypto_init(error)) - return NM_CRYPTO_FILE_FORMAT_UNKNOWN; - - if (!file_read_contents(filename, &contents, error)) - return NM_CRYPTO_FILE_FORMAT_UNKNOWN; - - return nm_crypto_verify_private_key_data(contents.bin, - contents.len, - password, - out_is_encrypted, - error); -} - -gboolean -nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) -{ - return _nm_crypto_randomize(buffer, buffer_len, error); -} - -/** - * nmtst_crypto_rsa_key_encrypt: - * @data: (array length=len): RSA private key data to be encrypted - * @len: length of @data - * @in_password: (allow-none): existing password to use, if any - * @out_password: (out) (allow-none): if @in_password was %NULL, a random - * password will be generated and returned in this argument - * @error: detailed error information on return, if an error occurred - * - * Encrypts the given RSA private key data with the given password (or generates - * a password if no password was given) and converts the data to PEM format - * suitable for writing to a file. It uses Triple DES cipher for the encryption. - * - * Returns: (transfer full): on success, PEM-formatted data suitable for writing - * to a PEM-formatted certificate/private key file. - **/ -GBytes * -nmtst_crypto_rsa_key_encrypt(const guint8 *data, - gsize len, - const char *in_password, - char **out_password, - GError **error) -{ - guint8 salt[8]; - nm_auto_clear_secret_ptr NMSecretPtr key = {0}; - nm_auto_clear_secret_ptr NMSecretPtr enc = {0}; - gs_unref_ptrarray GPtrArray *pem = NULL; - nm_auto_free_secret char *tmp_password = NULL; - nm_auto_free_secret char *enc_base64 = NULL; - gsize enc_base64_len; - const char *p; - gsize ret_len, ret_idx; - guint i; - NMSecretBuf *ret; - - g_return_val_if_fail(data, NULL); - g_return_val_if_fail(len > 0, NULL); - g_return_val_if_fail(!out_password || !*out_password, NULL); - - /* Make the password if needed */ - if (!in_password) { - nm_auto_clear_static_secret_ptr NMSecretPtr pw_buf = NM_SECRET_PTR_STATIC(32); - - if (!nm_crypto_randomize(pw_buf.bin, pw_buf.len, error)) - return NULL; - tmp_password = nm_utils_bin2hexstr(pw_buf.bin, pw_buf.len, -1); - in_password = tmp_password; - } - - if (!nm_crypto_randomize(salt, sizeof(salt), error)) - return NULL; - - key.bin = nmtst_crypto_make_des_aes_key(NM_CRYPTO_CIPHER_DES_EDE3_CBC, - salt, - sizeof(salt), - in_password, - &key.len, - NULL); - if (!key.bin) - g_return_val_if_reached(NULL); - - enc.bin = _nmtst_crypto_encrypt(NM_CRYPTO_CIPHER_DES_EDE3_CBC, - data, - len, - salt, - sizeof(salt), - key.bin, - key.len, - &enc.len, - error); - if (!enc.bin) - return NULL; - - /* What follows is not the most efficient way to construct the pem - * file line-by-line. At least, it makes sure, that the data will be cleared - * again and not left around in memory. - * - * If this would not be test code, we should improve the implementation - * to avoid some of the copying. */ - pem = g_ptr_array_new_with_free_func((GDestroyNotify) nm_free_secret); - - g_ptr_array_add(pem, g_strdup("-----BEGIN RSA PRIVATE KEY-----\n")); - g_ptr_array_add(pem, g_strdup("Proc-Type: 4,ENCRYPTED\n")); - - /* Convert the salt to a hex string */ - g_ptr_array_add( - pem, - g_strdup_printf("DEK-Info: %s,", - nm_crypto_cipher_get_info(NM_CRYPTO_CIPHER_DES_EDE3_CBC)->name)); - g_ptr_array_add(pem, nm_utils_bin2hexstr(salt, sizeof(salt), sizeof(salt) * 2)); - g_ptr_array_add(pem, g_strdup("\n\n")); - - /* Convert the encrypted key to a base64 string */ - enc_base64 = g_base64_encode((const guchar *) enc.bin, enc.len); - enc_base64_len = strlen(enc_base64); - for (p = enc_base64; (p - enc_base64) < (ptrdiff_t) enc_base64_len; p += 64) { - g_ptr_array_add(pem, g_strndup(p, 64)); - g_ptr_array_add(pem, g_strdup("\n")); - } - - g_ptr_array_add(pem, g_strdup("-----END RSA PRIVATE KEY-----\n")); - - ret_len = 0; - for (i = 0; i < pem->len; i++) - ret_len += strlen(pem->pdata[i]); - - ret = nm_secret_buf_new(ret_len + 1); - ret_idx = 0; - for (i = 0; i < pem->len; i++) { - const char *line = pem->pdata[i]; - gsize line_l = strlen(line); - - memcpy(&ret->bin[ret_idx], line, line_l); - ret_idx += line_l; - nm_assert(ret_idx <= ret_len); - } - nm_assert(ret_idx == ret_len); - ret->bin[ret_len] = '\0'; - - NM_SET_OUT(out_password, g_strdup(tmp_password)); - return nm_secret_buf_to_gbytes_take(ret, ret_len); -} diff --git a/src/libnm-core-impl/nm-crypto.h b/src/libnm-core-impl/nm-crypto.h deleted file mode 100644 index a740c43c..00000000 --- a/src/libnm-core-impl/nm-crypto.h +++ /dev/null @@ -1,96 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Dan Williams - * Copyright (C) 2007 - 2014 Red Hat, Inc. - */ - -#ifndef __NM_CRYPTO_H__ -#define __NM_CRYPTO_H__ - -typedef enum { - NM_CRYPTO_CIPHER_UNKNOWN, - NM_CRYPTO_CIPHER_DES_EDE3_CBC, - NM_CRYPTO_CIPHER_DES_CBC, - NM_CRYPTO_CIPHER_AES_128_CBC, - NM_CRYPTO_CIPHER_AES_192_CBC, - NM_CRYPTO_CIPHER_AES_256_CBC, -} NMCryptoCipherType; - -typedef struct { - const char *name; - NMCryptoCipherType cipher; - guint8 digest_len; - guint8 real_iv_len; -} NMCryptoCipherInfo; - -const NMCryptoCipherInfo *nm_crypto_cipher_get_info(NMCryptoCipherType cipher); -const NMCryptoCipherInfo *nm_crypto_cipher_get_info_by_name(const char *cipher_name, gssize p_len); - -typedef enum { - NM_CRYPTO_KEY_TYPE_UNKNOWN = 0, - NM_CRYPTO_KEY_TYPE_RSA, - NM_CRYPTO_KEY_TYPE_DSA -} NMCryptoKeyType; - -typedef enum { - NM_CRYPTO_FILE_FORMAT_UNKNOWN = 0, - NM_CRYPTO_FILE_FORMAT_X509, - NM_CRYPTO_FILE_FORMAT_RAW_KEY, - NM_CRYPTO_FILE_FORMAT_PKCS12 -} NMCryptoFileFormat; - -/*****************************************************************************/ - -GBytes *nm_crypto_read_file(const char *filename, GError **error); - -gboolean nm_crypto_load_and_verify_certificate(const char *file, - NMCryptoFileFormat *out_file_format, - GBytes **out_certificat, - GError **error); - -gboolean nm_crypto_is_pkcs12_file(const char *file, GError **error); - -gboolean nm_crypto_is_pkcs12_data(const guint8 *data, gsize len, GError **error); - -NMCryptoFileFormat nm_crypto_verify_private_key_data(const guint8 *data, - gsize data_len, - const char *password, - gboolean *out_is_encrypted, - GError **error); - -NMCryptoFileFormat nm_crypto_verify_private_key(const char *file, - const char *password, - gboolean *out_is_encrypted, - GError **error); - -gboolean nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error); - -/*****************************************************************************/ - -GBytes *nmtst_crypto_decrypt_openssl_private_key_data(const guint8 *data, - gsize data_len, - const char *password, - NMCryptoKeyType *out_key_type, - GError **error); - -GBytes *nmtst_crypto_decrypt_openssl_private_key(const char *file, - const char *password, - NMCryptoKeyType *out_key_type, - GError **error); - -GBytes *nmtst_crypto_rsa_key_encrypt(const guint8 *data, - gsize len, - const char *in_password, - char **out_password, - GError **error); - -guint8 *nmtst_crypto_make_des_aes_key(NMCryptoCipherType cipher, - const guint8 *salt, - gsize salt_len, - const char *password, - gsize *out_len, - GError **error); - -/*****************************************************************************/ - -#endif /* __NM_CRYPTO_H__ */ diff --git a/src/libnm-core-impl/nm-errors.c b/src/libnm-core-impl/nm-errors.c index ea4ca5e9..fad854bc 100644 --- a/src/libnm-core-impl/nm-errors.c +++ b/src/libnm-core-impl/nm-errors.c @@ -12,12 +12,24 @@ NM_CACHED_QUARK_FCN("nm-agent-manager-error-quark", nm_agent_manager_error_quark); NM_CACHED_QUARK_FCN("nm-connection-error-quark", nm_connection_error_quark); -NM_CACHED_QUARK_FCN("nm-crypto-error-quark", nm_crypto_error_quark); NM_CACHED_QUARK_FCN("nm-device-error-quark", nm_device_error_quark); NM_CACHED_QUARK_FCN("nm-secret-agent-error-quark", nm_secret_agent_error_quark); NM_CACHED_QUARK_FCN("nm-settings-error-quark", nm_settings_error_quark); NM_CACHED_QUARK_FCN("nm-vpn-plugin-error-quark", nm_vpn_plugin_error_quark); +GQuark +nm_crypto_error_quark(void) +{ + G_STATIC_ASSERT(NM_CRYPTO_ERROR_FAILED == _NM_CRYPTO_ERROR_FAILED); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_INVALID_DATA == _NM_CRYPTO_ERROR_INVALID_DATA); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_INVALID_PASSWORD == _NM_CRYPTO_ERROR_INVALID_PASSWORD); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_UNKNOWN_CIPHER == _NM_CRYPTO_ERROR_UNKNOWN_CIPHER); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_DECRYPTION_FAILED == _NM_CRYPTO_ERROR_DECRYPTION_FAILED); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_ENCRYPTION_FAILED == _NM_CRYPTO_ERROR_ENCRYPTION_FAILED); + + return _nm_crypto_error_quark(); +} + static void register_error_domain(GQuark domain, const char *interface, GType enum_type) { diff --git a/src/libnm-core-impl/nm-keyfile.c b/src/libnm-core-impl/nm-keyfile.c index dce53ae2..00fb8a33 100644 --- a/src/libnm-core-impl/nm-keyfile.c +++ b/src/libnm-core-impl/nm-keyfile.c @@ -115,12 +115,14 @@ _key_file_handler_data_init_write(NMKeyfileHandlerData *handler_data, &info->error); } -_nm_printf(5, 6) static void _handle_warn(KeyfileReaderInfo *info, - const char *kf_key, - const char *cur_property, - NMKeyfileWarnSeverity severity, - const char *fmt, - ...) +/*****************************************************************************/ + +_nm_printf(5, 6) static void _read_handle_warn(KeyfileReaderInfo *info, + const char *kf_key, + const char *cur_property, + NMKeyfileWarnSeverity severity, + const char *fmt, + ...) { NMKeyfileHandlerData handler_data; @@ -148,16 +150,75 @@ _nm_printf(5, 6) static void _handle_warn(KeyfileReaderInfo *info, g_free(handler_data.warn.message); } -#define handle_warn(arg_info, arg_kf_key, arg_property_name, arg_severity, ...) \ - ({ \ - KeyfileReaderInfo *_info = (arg_info); \ - \ - nm_assert(!_info->error); \ - \ - if (_info->read_handler) { \ - _handle_warn(_info, (arg_kf_key), (arg_property_name), (arg_severity), __VA_ARGS__); \ - } \ - _info->error == NULL; \ +#define read_handle_warn(arg_info, arg_kf_key, arg_property_name, arg_severity, ...) \ + ({ \ + KeyfileReaderInfo *_info = (arg_info); \ + \ + nm_assert(!_info->error); \ + \ + if (_info->read_handler) { \ + _read_handle_warn(_info, \ + (arg_kf_key), \ + (arg_property_name), \ + (arg_severity), \ + __VA_ARGS__); \ + } \ + _info->error == NULL; \ + }) + +/*****************************************************************************/ + +_nm_printf(6, 7) static void _write_handle_warn(KeyfileWriterInfo *info, + NMSetting *setting, + const char *kf_key, + const char *cur_property, + NMKeyfileWarnSeverity severity, + const char *fmt, + ...) +{ + NMKeyfileHandlerData handler_data; + + _key_file_handler_data_init_write(&handler_data, + NM_KEYFILE_HANDLER_TYPE_WARN, + info, + nm_setting_get_name(setting), + cur_property, + setting, + kf_key); + handler_data.warn = (NMKeyfileHandlerDataWarn){ + .severity = severity, + .message = NULL, + .fmt = fmt, + }; + + va_start(handler_data.warn.ap, fmt); + + info->write_handler(info->connection, + info->keyfile, + NM_KEYFILE_HANDLER_TYPE_WARN, + &handler_data, + info->user_data); + + va_end(handler_data.warn.ap); + + g_free(handler_data.warn.message); +} + +#define write_handle_warn(arg_info, arg_setting, arg_kf_key, arg_property_name, arg_severity, ...) \ + ({ \ + KeyfileWriterInfo *_info = (arg_info); \ + \ + nm_assert(!_info->error); \ + \ + if (_info->write_handler) { \ + _write_handle_warn(_info, \ + (arg_setting), \ + (arg_kf_key), \ + (arg_property_name), \ + (arg_severity), \ + __VA_ARGS__); \ + } \ + _info->error == NULL; \ }) /*****************************************************************************/ @@ -264,11 +325,11 @@ get_one_int(KeyfileReaderInfo *info, if (!str || !str[0]) { if (info) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring missing number")); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring missing number")); } return FALSE; } @@ -276,12 +337,12 @@ get_one_int(KeyfileReaderInfo *info, tmp = _nm_utils_ascii_str_to_int64(str, 10, 0, max_val, -1); if (tmp == -1) { if (info) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid number '%s'"), - str); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid number '%s'"), + str); } return FALSE; } @@ -305,13 +366,13 @@ build_address(KeyfileReaderInfo *info, addr = nm_ip_address_new(family, address_str, plen, &error); if (!addr) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid %s address: %s"), - family == AF_INET ? "IPv4" : "IPv6", - error->message); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid %s address: %s"), + family == AF_INET ? "IPv4" : "IPv6", + error->message); g_error_free(error); } @@ -351,13 +412,13 @@ build_route(KeyfileReaderInfo *info, metric = u32; gateway_str = NULL; } else { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid gateway '%s' for %s route"), - gateway_str, - family == AF_INET ? "IPv4" : "IPv6"); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid gateway '%s' for %s route"), + gateway_str, + family == AF_INET ? "IPv4" : "IPv6"); return NULL; } } @@ -373,13 +434,13 @@ build_route(KeyfileReaderInfo *info, route = nm_ip_route_new(family, dest_str, plen, gateway_str, metric, &error); if (!route) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid %s route: %s"), - family == AF_INET ? "IPv4" : "IPv6", - error->message); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid %s route: %s"), + family == AF_INET ? "IPv4" : "IPv6", + error->message); g_error_free(error); } @@ -551,15 +612,15 @@ read_one_ip_address_or_route(KeyfileReaderInfo *info, /* get address field */ address_str = read_field(¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); if (err_str) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("unexpected character '%c' for address %s: '%s' (position %td)"), - *err_str, - kf_key, - VALUE_ORIG(), - err_str - current); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' for address %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); return NULL; } /* get prefix length field (skippable) */ @@ -567,30 +628,31 @@ read_one_ip_address_or_route(KeyfileReaderInfo *info, /* get gateway field */ gateway_str = read_field(¤t, &err_str, IP_ADDRESS_CHARS, DELIMITERS); if (err_str) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("unexpected character '%c' for %s: '%s' (position %td)"), - *err_str, - kf_key, - VALUE_ORIG(), - err_str - current); + read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' for %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); return NULL; } /* for routes, get metric */ if (route) { metric_str = read_field(¤t, &err_str, DIGITS, DELIMITERS); if (err_str) { - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("unexpected character '%c' in prefix length for %s: '%s' (position %td)"), - *err_str, - kf_key, - VALUE_ORIG(), - err_str - current); + read_handle_warn( + info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unexpected character '%c' in prefix length for %s: '%s' (position %td)"), + *err_str, + kf_key, + VALUE_ORIG(), + err_str - current); return NULL; } } else @@ -599,23 +661,23 @@ read_one_ip_address_or_route(KeyfileReaderInfo *info, /* there is still some data */ if (*current) { /* another field follows */ - handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("garbage at the end of value %s: '%s'"), - kf_key, - VALUE_ORIG()); - return NULL; - } else { - /* semicolon at the end of input */ - if (!handle_warn(info, + read_handle_warn(info, kf_key, property_name, - NM_KEYFILE_WARN_SEVERITY_INFO, - _("deprecated semicolon at the end of value %s: '%s'"), + NM_KEYFILE_WARN_SEVERITY_WARN, + _("garbage at the end of value %s: '%s'"), kf_key, - VALUE_ORIG())) + VALUE_ORIG()); + return NULL; + } else { + /* semicolon at the end of input */ + if (!read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_INFO, + _("deprecated semicolon at the end of value %s: '%s'"), + kf_key, + VALUE_ORIG())) return NULL; } } @@ -628,26 +690,26 @@ read_one_ip_address_or_route(KeyfileReaderInfo *info, if (!get_one_int(info, kf_key, property_name, plen_str, ipv6 ? 128 : 32, &plen)) { plen = DEFAULT_PREFIX(route, ipv6); if (info->error - || !handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid prefix length for %s '%s', defaulting to %d"), - kf_key, - VALUE_ORIG(), - plen)) + || !read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid prefix length for %s '%s', defaulting to %d"), + kf_key, + VALUE_ORIG(), + plen)) return NULL; } } else { plen = DEFAULT_PREFIX(route, ipv6); - if (!handle_warn(info, - kf_key, - property_name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("missing prefix length for %s '%s', defaulting to %d"), - kf_key, - VALUE_ORIG(), - plen)) + if (!read_handle_warn(info, + kf_key, + property_name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("missing prefix length for %s '%s', defaulting to %d"), + kf_key, + VALUE_ORIG(), + plen)) return NULL; } @@ -983,13 +1045,13 @@ ip_routing_rule_parser_full(KeyfileReaderInfo *info, NULL, &local); if (!rule) { - if (!handle_warn(info, - build_list[i_build_list].s_key, - property_info->name, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid value for \"%s\": %s"), - build_list[i_build_list].s_key, - local->message)) + if (!read_handle_warn(info, + build_list[i_build_list].s_key, + property_info->name, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid value for \"%s\": %s"), + build_list[i_build_list].s_key, + local->message)) return; continue; } @@ -1061,13 +1123,13 @@ ip_dns_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) NMIPAddr addr; if (inet_pton(addr_family, list[i], &addr) <= 0) { - if (!handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid DNS server IPv%c address '%s'"), - nm_utils_addr_family_to_char(addr_family), - list[i])) { + if (!read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid DNS server IPv%c address '%s'"), + nm_utils_addr_family_to_char(addr_family), + list[i])) { do { nm_clear_g_free(&list[i]); } while (++i < length); @@ -1098,13 +1160,13 @@ ip6_addr_gen_mode_parser(KeyfileReaderInfo *info, NMSetting *setting, const char s, (int *) &addr_gen_mode, NULL)) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid option '%s', use one of [%s]"), - s, - "eui64,stable-privacy"); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid option '%s', use one of [%s]"), + s, + "eui64,stable-privacy"); return; } } else @@ -1160,7 +1222,11 @@ mac_address_parser(KeyfileReaderInfo *info, goto good_addr_bin; } - handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid MAC address")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid MAC address")); return; good_addr_bin: @@ -1232,14 +1298,14 @@ read_hash_of_string(KeyfileReaderInfo *info, 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)) + if (!read_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); @@ -1426,7 +1492,7 @@ ssid_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) bytes = get_bytes(info, setting_name, key, FALSE, TRUE); if (!bytes) { - handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid SSID")); + read_handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("ignoring invalid SSID")); return; } g_object_set(setting, key, bytes, NULL); @@ -1440,11 +1506,11 @@ password_raw_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key bytes = get_bytes(info, setting_name, key, FALSE, TRUE); if (!bytes) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid raw password")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid raw password")); return; } g_object_set(setting, key, bytes, NULL); @@ -1585,7 +1651,11 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) bin = g_bytes_get_data(bytes, &bin_len); if (bin_len == 0) { if (!info->error) { - handle_warn(info, key, key, NM_KEYFILE_WARN_SEVERITY_WARN, _("invalid key/cert value")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value")); } return; } @@ -1596,12 +1666,12 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (nm_setting_802_1x_check_cert_scheme(bin, bin_len, NULL) != NM_SETTING_802_1X_CK_SCHEME_PATH) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid key/cert value path \"%s\""), - bin); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value path \"%s\""), + bin); return; } @@ -1621,12 +1691,12 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) * then by invoking a callback (and possibly keyfile settings plugin would * collect the file names to be checked and check them later). */ if (!g_file_test(path2, G_FILE_TEST_EXISTS)) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, - _("certificate or key file '%s' does not exist"), - path2); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, + _("certificate or key file '%s' does not exist"), + path2); } return; } @@ -1634,12 +1704,12 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) if (HAS_SCHEME_PREFIX(bin, bin_len, NM_KEYFILE_CERT_SCHEME_PREFIX_PKCS11)) { if (nm_setting_802_1x_check_cert_scheme(bin, bin_len, NULL) != NM_SETTING_802_1X_CK_SCHEME_PKCS11) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid PKCS#11 URI \"%s\""), - bin); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid PKCS#11 URI \"%s\""), + bin); return; } @@ -1680,11 +1750,11 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) bin_decoded = g_base64_decode(cdata, &bin_decoded_len); if (bin_decoded_len == 0) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid key/cert value data:;base64, is not base64")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value data:;base64, is not base64")); return; } @@ -1693,11 +1763,11 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) /* The blob probably starts with "file://". Setting the cert data will confuse NMSetting8021x. * In fact this is a limitation of NMSetting8021x which does not support setting blobs that start * with file://. Just warn and return TRUE to signal that we ~handled~ the setting. */ - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid key/cert value data:;base64,file://")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value data:;base64,file://")); return; } @@ -1718,12 +1788,12 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) /* Warn if the certificate didn't exist */ if (!path_exists) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, - _("certificate or key file '%s' does not exist"), - path); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE, + _("certificate or key file '%s' does not exist"), + path); } return; } @@ -1734,11 +1804,11 @@ cert_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) * Setting the cert data will confuse NMSetting8021x. * In fact, NMSetting8021x does not support setting such binary data, so just warn and * continue. */ - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid key/cert value is not a valid blob")); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key/cert value is not a valid blob")); return; } @@ -1836,12 +1906,12 @@ parity_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) goto parity_good; } - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid parity value '%s'"), - tmp_str ?: ""); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid parity value '%s'"), + tmp_str ?: ""); return; parity_good: @@ -1858,12 +1928,12 @@ out_err: /* ignore such errors. The key is not present. */ return; } - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid setting: %s"), - err->message); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting: %s"), + err->message); } static void @@ -1878,12 +1948,12 @@ team_config_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) g_object_set(G_OBJECT(setting), key, conf, NULL); if (conf && !nm_setting_verify(setting, NULL, &error)) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("ignoring invalid team configuration: %s"), - error->message); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("ignoring invalid team configuration: %s"), + error->message); g_object_set(G_OBJECT(setting), key, NULL, NULL); } } @@ -1909,12 +1979,12 @@ bridge_vlan_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) for (iter = strv; *iter; iter++) { vlan = nm_bridge_vlan_from_str(*iter, &local); if (!vlan) { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - "invalid bridge VLAN: %s", - local->message); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + "invalid bridge VLAN: %s", + local->message); g_clear_error(&local); continue; } @@ -1961,12 +2031,12 @@ qdisc_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) qdisc = nm_utils_tc_qdisc_from_str(qdisc_str, &err); if (!qdisc) { - handle_warn(info, - keys[i], - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid qdisc: %s"), - err->message); + read_handle_warn(info, + keys[i], + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid qdisc: %s"), + err->message); } else { g_ptr_array_add(qdiscs, qdisc); } @@ -2011,12 +2081,12 @@ tfilter_parser(KeyfileReaderInfo *info, NMSetting *setting, const char *key) tfilter = nm_utils_tc_tfilter_from_str(tfilter_str, &err); if (!tfilter) { - handle_warn(info, - keys[i], - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid tfilter: %s"), - err->message); + read_handle_warn(info, + keys[i], + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid tfilter: %s"), + err->message); } else { g_ptr_array_add(tfilters, tfilter); } @@ -2689,16 +2759,10 @@ cert_writer_default(NMConnection *connection, static void cert_writer(KeyfileWriterInfo *info, NMSetting *setting, const char *key, const GValue *value) { - const NMSetting8021xSchemeVtable *vtable = NULL; + const NMSetting8021xSchemeVtable *vtable; const char *setting_name; - guint i; - for (i = 0; nm_setting_8021x_scheme_vtable[i].setting_key; i++) { - if (nm_streq0(nm_setting_8021x_scheme_vtable[i].setting_key, key)) { - vtable = &nm_setting_8021x_scheme_vtable[i]; - break; - } - } + vtable = nm_setting_8021x_scheme_vtable_by_setting_key(key); if (!vtable) g_return_if_reached(); @@ -3181,12 +3245,12 @@ read_one_setting_value(KeyfileReaderInfo *info, && !nm_keyfile_plugin_kf_has_key(keyfile, setting_info->setting_name, key, &err)) { /* Key doesn't exist or an error occurred, thus nothing to do. */ if (err) { - if (!handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("error loading setting value: %s"), - err->message)) + if (!read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("error loading setting value: %s"), + err->message)) return; } return; @@ -3296,7 +3360,7 @@ read_one_setting_value(KeyfileReaderInfo *info, if (val > 255u) { if (!already_warned - && !handle_warn( + && !read_handle_warn( info, key, key, @@ -3356,12 +3420,12 @@ read_one_setting_value(KeyfileReaderInfo *info, if (nm_keyfile_error_is_not_found(err)) { /* ignore such errors. The key is not present. */ } else { - handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid setting: %s"), - err->message); + read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting: %s"), + err->message); } } } @@ -3381,12 +3445,12 @@ _read_setting(KeyfileReaderInfo *info) type = nm_setting_lookup_type(alias); if (!type) { - handle_warn(info, - NULL, - NULL, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid setting name '%s'"), - info->group); + read_handle_warn(info, + NULL, + NULL, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid setting name '%s'"), + info->group); return; } @@ -3428,13 +3492,13 @@ _read_setting(KeyfileReaderInfo *info) variant_type = sett_info->detail.gendata_info->get_variant_type(sett_info, key, &local); if (!variant_type) { - if (!handle_warn(info, - key, - NULL, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid key '%s.%s'"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NULL, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid key '%s.%s'"), + info->group, + key)) break; continue; } @@ -3444,13 +3508,13 @@ _read_setting(KeyfileReaderInfo *info) v = g_key_file_get_boolean(info->keyfile, info->group, key, &local); if (local) { - if (!handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not boolean"), - info->group, - key)) + if (!read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not boolean"), + info->group, + key)) break; continue; } @@ -3461,13 +3525,13 @@ _read_setting(KeyfileReaderInfo *info) v = g_key_file_get_uint64(info->keyfile, info->group, key, &local); if (local) { - if (!handle_warn(info, - key, - key, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not a uint32"), - info->group, - key)) + if (!read_handle_warn(info, + key, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a uint32"), + info->group, + key)) break; continue; } @@ -3518,12 +3582,12 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) || !nm_streq0(str, cstr)) { /* the group name must be identical to the normalized(!) key, so that it * is uniquely identified. */ - handle_warn(info, - NULL, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("invalid peer public key in section '%s'"), - info->group); + read_handle_warn(info, + NULL, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("invalid peer public key in section '%s'"), + info->group); return; } nm_wireguard_peer_set_public_key(peer, cstr, TRUE); @@ -3533,13 +3597,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) str = nm_keyfile_plugin_kf_get_string(info->keyfile, info->group, key, NULL); if (str) { if (!nm_wireguard_peer_set_preshared_key(peer, str, FALSE)) { - if (!handle_warn(info, - key, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not a valid 256 bit key in base64 encoding"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid 256 bit key in base64 encoding"), + info->group, + key)) return; } nm_clear_g_free(&str); @@ -3556,13 +3620,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) NULL); if (errno != ENODATA) { if (i64 == -1 || !_nm_setting_secret_flags_valid(i64)) { - if (!handle_warn(info, - key, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not a valid secret flag"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid secret flag"), + info->group, + key)) return; } else nm_wireguard_peer_set_preshared_key_flags(peer, i64); @@ -3579,13 +3643,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) NULL); if (errno != ENODATA) { if (i64 == -1) { - if (!handle_warn(info, - key, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not a integer in range 0 to 2^32"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a integer in range 0 to 2^32"), + info->group, + key)) return; } else nm_wireguard_peer_set_persistent_keepalive(peer, i64); @@ -3595,13 +3659,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) str = nm_keyfile_plugin_kf_get_string(info->keyfile, info->group, key, NULL); if (str && str[0]) { if (!nm_wireguard_peer_set_endpoint(peer, str, FALSE)) { - if (!handle_warn(info, - key, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' is not a valid endpoint"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' is not a valid endpoint"), + info->group, + key)) return; } } @@ -3621,13 +3685,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) nm_wireguard_peer_append_allowed_ip(peer, sa[i], TRUE); } if (has_error) { - if (!handle_warn(info, - key, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("key '%s.%s' has invalid allowed-ips"), - info->group, - key)) + if (!read_handle_warn(info, + key, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("key '%s.%s' has invalid allowed-ips"), + info->group, + key)) return; } } @@ -3636,13 +3700,13 @@ _read_setting_wireguard_peer(KeyfileReaderInfo *info) return; if (!nm_wireguard_peer_is_valid(peer, TRUE, TRUE, &error)) { - handle_warn(info, - NULL, - NM_SETTING_WIREGUARD_PEERS, - NM_KEYFILE_WARN_SEVERITY_WARN, - _("peer '%s' is invalid: %s"), - info->group, - error->message); + read_handle_warn(info, + NULL, + NM_SETTING_WIREGUARD_PEERS, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("peer '%s' is invalid: %s"), + info->group, + error->message); return; } @@ -3855,29 +3919,24 @@ write_setting_value(KeyfileWriterInfo *info, _parse_info_find(setting, key, &setting_info, NULL, &pip); + if (pip && pip->has_writer_full) { + pip->writer_full(info, setting_info, property_info, pip, setting); + return; + } + + if (pip && pip->writer_skip) + return; + if (!pip) { if (!setting_info) { - /* the setting type is unknown. That is highly unexpected - * (and as this is currently only called from NetworkManager - * daemon, not possible). - * - * Still, handle it gracefully, because later keyfile writer will become - * public API of libnm, where @setting is (untrusted) user input. - * - * Gracefully here just means: ignore the setting. */ + /* the setting type is unknown. Handle this gracefully by + * ignoring the setting. */ return; } if (!property_info->param_spec) return; if (nm_streq(key, NM_SETTING_NAME)) return; - } else { - if (pip->has_writer_full) { - pip->writer_full(info, setting_info, property_info, pip, setting); - return; - } - if (pip->writer_skip) - return; } nm_assert(property_info->param_spec); @@ -4089,8 +4148,10 @@ _write_setting_wireguard(NMSetting *setting, KeyfileWriterInfo *info) * @user_data: argument for @handler. * @error: the #GError in case writing fails. * - * @connection must verify as a valid profile according to - * nm_connection_verify(). + * @connection should verify as a valid profile according to + * nm_connection_verify(). If it does not verify, the keyfile may + * be incomplete and the parser may not be able to fully recreate + * the original profile. * * Returns: (transfer full): a new #GKeyFile or %NULL on error. * @@ -4104,7 +4165,6 @@ nm_keyfile_write(NMConnection *connection, GError **error) { nm_auto_unref_keyfile GKeyFile *keyfile = NULL; - GError *local = NULL; KeyfileWriterInfo info; NMSetting **settings; int i; @@ -4114,28 +4174,6 @@ nm_keyfile_write(NMConnection *connection, g_return_val_if_fail(!error || !*error, NULL); g_return_val_if_fail(handler_flags == NM_KEYFILE_HANDLER_FLAGS_NONE, NULL); - /* 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(); info = (KeyfileWriterInfo){ @@ -4189,11 +4227,16 @@ nm_keyfile_write(NMConnection *connection, key, (guint64) g_variant_get_uint32(v)); } else { - /* BUG: The variant type is not implemented. Since the connection - * verifies, this can only mean we either wrongly didn't reject - * the connection as invalid, or we didn't properly implement the - * variant type. */ - nm_assert_not_reached(); + if (!write_handle_warn(&info, + setting, + NULL, + key, + NM_KEYFILE_WARN_SEVERITY_WARN, + _("unsupported option \"%s.%s\" of variant type %s"), + setting_name, + key, + g_variant_get_type_string(v))) + goto out_with_info_error; continue; } } diff --git a/src/libnm-core-impl/nm-meta-setting-base-impl.c b/src/libnm-core-impl/nm-meta-setting-base-impl.c index cd55779f..69daa76c 100644 --- a/src/libnm-core-impl/nm-meta-setting-base-impl.c +++ b/src/libnm-core-impl/nm-meta-setting-base-impl.c @@ -153,6 +153,68 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { #undef _D }; +const NMSetting8021xSchemeVtable * +nm_setting_8021x_scheme_vtable_by_setting_key(const char *key) +{ + static const NMSetting8021xSchemeType sorted_index[] = { + NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + }; + int imin, imax; + + nm_assert(key); + + if (NM_MORE_ASSERT_ONCE(5)) { + const NMSetting8021xSchemeVtable *vtable_prev = NULL; + int i, j; + + for (i = 0; i < (int) G_N_ELEMENTS(sorted_index); i++) { + const NMSetting8021xSchemeType t = sorted_index[i]; + const NMSetting8021xSchemeVtable *vtable; + + nm_assert(_NM_INT_NOT_NEGATIVE(t)); + nm_assert(t < G_N_ELEMENTS(nm_setting_8021x_scheme_vtable) - 1); + + for (j = 0; j < i; j++) + nm_assert(t != sorted_index[j]); + + vtable = &nm_setting_8021x_scheme_vtable[t]; + + nm_assert(vtable->scheme_type == t); + nm_assert(vtable->setting_key); + + if (vtable_prev) + nm_assert(strcmp(vtable_prev->setting_key, vtable->setting_key) < 0); + vtable_prev = vtable; + } + } + + imin = 0; + imax = G_N_ELEMENTS(sorted_index) - 1; + while (imin <= imax) { + const NMSetting8021xSchemeVtable *vtable; + const int imid = imin + (imax - imin) / 2; + int cmp; + + vtable = &nm_setting_8021x_scheme_vtable[sorted_index[imid]]; + + cmp = strcmp(vtable->setting_key, key); + if (cmp == 0) + return vtable; + + if (cmp < 0) + imin = imid + 1; + else + imax = imid - 1; + } + + return NULL; +} + /*****************************************************************************/ const NMMetaSettingInfo nm_meta_setting_infos[] = { diff --git a/src/libnm-core-impl/nm-setting-8021x.c b/src/libnm-core-impl/nm-setting-8021x.c index 884f8830..41feae57 100644 --- a/src/libnm-core-impl/nm-setting-8021x.c +++ b/src/libnm-core-impl/nm-setting-8021x.c @@ -9,8 +9,8 @@ #include "nm-setting-8021x.h" #include "libnm-glib-aux/nm-secret-utils.h" +#include "libnm-crypto/nm-crypto.h" #include "nm-utils.h" -#include "nm-crypto.h" #include "nm-utils-private.h" #include "nm-setting-private.h" #include "nm-core-enum-types.h" @@ -516,7 +516,7 @@ _cert_impl_set(NMSetting8021x *setting, gs_unref_bytes GBytes *file = NULL; if (NM_IN_SET(property, PROP_PRIVATE_KEY, PROP_PHASE2_PRIVATE_KEY)) { - file = nm_crypto_read_file(value, error); + file = nm_utils_read_crypto_file_to_bytes(value, error); if (!file) goto err; format = nm_crypto_verify_private_key_data(g_bytes_get_data(file, NULL), @@ -2520,230 +2520,172 @@ need_secrets_sim(NMSetting8021x *self, GPtrArray *secrets, gboolean phase2) g_ptr_array_add(secrets, NM_SETTING_802_1X_PIN); } -static gboolean -need_private_key_password(GBytes *blob, - NMSetting8021xCKScheme scheme, - const char *path, - const char *password, - NMSettingSecretFlags flags) -{ - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - - if (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) - return FALSE; - - /* Private key password is required */ - if (password) { - if (path) - format = nm_crypto_verify_private_key(path, password, NULL, NULL); - else if (blob) - format = nm_crypto_verify_private_key_data(g_bytes_get_data(blob, NULL), - g_bytes_get_size(blob), - password, - NULL, - NULL); - else - return FALSE; - } - - return (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN); -} - static void need_secrets_tls(NMSetting8021x *self, GPtrArray *secrets, gboolean phase2) { NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE(self); NMSetting8021xCKScheme scheme; - GBytes *blob = NULL; - const char *path = NULL; - - if (phase2) { - scheme = nm_setting_802_1x_get_phase2_private_key_scheme(self); - if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) - path = nm_setting_802_1x_get_phase2_private_key_path(self); - else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) - blob = nm_setting_802_1x_get_phase2_private_key_blob(self); - else if (scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11) - g_warning("%s: unknown phase2 private key scheme %d", __func__, scheme); - - if (need_private_key_password(blob, - scheme, - path, - priv->phase2_private_key_password, - priv->phase2_private_key_password_flags)) - g_ptr_array_add(secrets, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD); - - scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme(self); - if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11 - && !(priv->phase2_ca_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) - && !priv->phase2_ca_cert_password) - g_ptr_array_add(secrets, NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD); - scheme = nm_setting_802_1x_get_phase2_client_cert_scheme(self); - if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11 - && !(priv->phase2_client_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) - && !priv->phase2_client_cert_password) - g_ptr_array_add(secrets, NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD); - } else { - scheme = nm_setting_802_1x_get_private_key_scheme(self); - if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) - path = nm_setting_802_1x_get_private_key_path(self); - else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) - blob = nm_setting_802_1x_get_private_key_blob(self); - else if (scheme != NM_SETTING_802_1X_CK_SCHEME_PKCS11) - g_warning("%s: unknown private key scheme %d", __func__, scheme); - - if (need_private_key_password(blob, - scheme, - path, - priv->private_key_password, - priv->private_key_password_flags)) - g_ptr_array_add(secrets, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD); - - scheme = nm_setting_802_1x_get_ca_cert_scheme(self); + if (!NM_FLAGS_HAS(phase2 ? priv->phase2_private_key_password_flags + : priv->private_key_password_flags, + NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) { + NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; + gboolean has_password = FALSE; + const char *password; + + password = phase2 ? priv->phase2_private_key_password : priv->private_key_password; + + /* Check whether the password works. */ + if (password) { + scheme = phase2 ? nm_setting_802_1x_get_phase2_private_key_scheme(self) + : nm_setting_802_1x_get_private_key_scheme(self); + + if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { + const char *path = phase2 ? nm_setting_802_1x_get_phase2_private_key_path(self) + : nm_setting_802_1x_get_private_key_path(self); + + if (path) + format = nm_crypto_verify_private_key(path, password, NULL, NULL); + } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { + GBytes *blob = phase2 ? nm_setting_802_1x_get_phase2_private_key_blob(self) + : nm_setting_802_1x_get_private_key_blob(self); + + if (blob) + format = nm_crypto_verify_private_key_data(g_bytes_get_data(blob, NULL), + g_bytes_get_size(blob), + password, + NULL, + NULL); + } else { + /* For PKCS#11 URLS, we assume the password is correct. */ + has_password = TRUE; + } + } + if (!has_password && format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) { + g_ptr_array_add(secrets, + phase2 ? NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD + : NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD); + } + } + + if (!NM_FLAGS_HAS(phase2 ? priv->phase2_ca_cert_password_flags : priv->ca_cert_password_flags, + NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) { + scheme = phase2 ? nm_setting_802_1x_get_phase2_ca_cert_scheme(self) + : nm_setting_802_1x_get_ca_cert_scheme(self); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11 - && !(priv->ca_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) - && !priv->ca_cert_password) - g_ptr_array_add(secrets, NM_SETTING_802_1X_CA_CERT_PASSWORD); + && !(phase2 ? priv->phase2_ca_cert_password : priv->ca_cert_password)) { + g_ptr_array_add(secrets, + phase2 ? NM_SETTING_802_1X_PHASE2_CA_CERT_PASSWORD + : NM_SETTING_802_1X_CA_CERT_PASSWORD); + } + } - scheme = nm_setting_802_1x_get_client_cert_scheme(self); + if (!NM_FLAGS_HAS(phase2 ? priv->phase2_client_cert_password_flags + : priv->client_cert_password_flags, + NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) { + scheme = phase2 ? nm_setting_802_1x_get_phase2_client_cert_scheme(self) + : nm_setting_802_1x_get_client_cert_scheme(self); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PKCS11 - && !(priv->client_cert_password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) - && !priv->client_cert_password) - g_ptr_array_add(secrets, NM_SETTING_802_1X_CLIENT_CERT_PASSWORD); + && !(phase2 ? priv->phase2_client_cert_password : priv->client_cert_password)) { + g_ptr_array_add(secrets, + phase2 ? NM_SETTING_802_1X_PHASE2_CLIENT_CERT_PASSWORD + : NM_SETTING_802_1X_CLIENT_CERT_PASSWORD); + } } } static gboolean -verify_tls(NMSetting8021x *self, gboolean phase2, GError **error) +verify_identity(NMSetting8021x *self, gboolean phase2, GError **error) { NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE(self); - if (phase2) { - if (!priv->phase2_client_cert) { + if (nm_str_is_empty(priv->identity)) { + if (!priv->identity) { g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY, _("property is missing")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PHASE2_CLIENT_CERT); - return FALSE; - } else if (!g_bytes_get_size(priv->phase2_client_cert)) { + } else { g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, _("property is empty")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PHASE2_CLIENT_CERT); - return FALSE; } + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_802_1X_SETTING_NAME, + NM_SETTING_802_1X_IDENTITY); + return FALSE; + } - /* Private key is required for TLS */ - if (!priv->phase2_private_key) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PHASE2_PRIVATE_KEY); - return FALSE; - } else if (!g_bytes_get_size(priv->phase2_private_key)) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("property is empty")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PHASE2_PRIVATE_KEY); - return FALSE; - } + return TRUE; +} - /* If the private key is PKCS#12, check that it matches the client cert */ - if (nm_crypto_is_pkcs12_data(g_bytes_get_data(priv->phase2_private_key, NULL), - g_bytes_get_size(priv->phase2_private_key), - NULL)) { - if (!g_bytes_equal(priv->phase2_private_key, priv->phase2_client_cert)) { - g_set_error(error, +static gboolean +verify_tls(NMSetting8021x *self, gboolean phase2, GError **error) +{ + NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE(self); + GBytes *client_cert; + GBytes *private_key; + const char *prop_client_cert; + const char *prop_private_key; + + client_cert = phase2 ? priv->phase2_client_cert : priv->client_cert; + private_key = phase2 ? priv->phase2_private_key : priv->private_key; + prop_client_cert = + phase2 ? NM_SETTING_802_1X_PHASE2_CLIENT_CERT : NM_SETTING_802_1X_CLIENT_CERT; + prop_private_key = + phase2 ? NM_SETTING_802_1X_PHASE2_PRIVATE_KEY : NM_SETTING_802_1X_PRIVATE_KEY; + + if (!client_cert) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is missing")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_client_cert); + return FALSE; + } + if (g_bytes_get_size(client_cert) == 0) { + g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("has to match '%s' property for PKCS#12"), - NM_SETTING_802_1X_PHASE2_PRIVATE_KEY); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PHASE2_CLIENT_CERT); - return FALSE; - } - } - } else { - if (!priv->client_cert) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_CLIENT_CERT); - return FALSE; - } else if (!g_bytes_get_size(priv->client_cert)) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("property is empty")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_CLIENT_CERT); - return FALSE; - } + _("property is empty")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_client_cert); + return FALSE; + } - /* Private key is required for TLS */ - if (!priv->private_key) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PRIVATE_KEY); - return FALSE; - } else if (!g_bytes_get_size(priv->private_key)) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("property is empty")); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_PRIVATE_KEY); - return FALSE; - } + /* Private key is required for TLS */ + if (!private_key) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_PROPERTY, + _("property is missing")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_private_key); + return FALSE; + } - /* If the private key is PKCS#12, check that it matches the client cert */ - if (nm_crypto_is_pkcs12_data(g_bytes_get_data(priv->private_key, NULL), - g_bytes_get_size(priv->private_key), - NULL)) { - if (!g_bytes_equal(priv->private_key, priv->client_cert)) { - g_set_error(error, + if (g_bytes_get_size(private_key) == 0) { + g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("has to match '%s' property for PKCS#12"), - NM_SETTING_802_1X_PRIVATE_KEY); - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_CLIENT_CERT); - return FALSE; - } + _("property is empty")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_private_key); + return FALSE; + } + + if (_nm_setting_802_1x_cert_get_scheme(private_key, NULL) == NM_SETTING_802_1X_CK_SCHEME_BLOB + && nm_crypto_is_pkcs12_data(g_bytes_get_data(private_key, NULL), + g_bytes_get_size(private_key), + NULL)) { + /* If the private key is PKCS#12, check that it matches the client cert */ + if (!g_bytes_equal(private_key, client_cert)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("has to match '%s' property for PKCS#12"), + prop_private_key); + g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_client_cert); + return FALSE; } } @@ -2755,24 +2697,8 @@ verify_ttls(NMSetting8021x *self, gboolean phase2, GError **error) { NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE(self); - if (nm_str_is_empty(priv->identity)) { - if (!priv->identity) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - } else { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("property is empty")); - } - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_IDENTITY); + if (!verify_identity(self, phase2, error)) return FALSE; - } if ((!priv->phase2_auth && !priv->phase2_autheap) || (priv->phase2_auth && priv->phase2_autheap)) { @@ -2792,33 +2718,6 @@ verify_ttls(NMSetting8021x *self, gboolean phase2, GError **error) return TRUE; } -static gboolean -verify_identity(NMSetting8021x *self, gboolean phase2, GError **error) -{ - NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE(self); - - if (nm_str_is_empty(priv->identity)) { - if (!priv->identity) { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_PROPERTY, - _("property is missing")); - } else { - g_set_error_literal(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("property is empty")); - } - g_prefix_error(error, - "%s.%s: ", - NM_SETTING_802_1X_SETTING_NAME, - NM_SETTING_802_1X_IDENTITY); - return FALSE; - } - - return TRUE; -} - static void need_secrets_phase2(NMSetting8021x *self, GPtrArray *secrets, gboolean phase2) { @@ -2833,17 +2732,14 @@ need_secrets_phase2(NMSetting8021x *self, GPtrArray *secrets, gboolean phase2) if (!method) method = priv->phase2_autheap; - if (!method) { - g_warning("Couldn't find EAP method."); - g_assert_not_reached(); - return; - } + if (!method) + g_return_if_reached(); /* Ask the configured phase2 method if it needs secrets */ for (i = 0; eap_methods_table[i].method; i++) { - if (eap_methods_table[i].ns_func == NULL) + if (!eap_methods_table[i].ns_func) continue; - if (!strcmp(eap_methods_table[i].method, method)) { + if (nm_streq(eap_methods_table[i].method, method)) { (*eap_methods_table[i].ns_func)(self, secrets, TRUE); break; } @@ -2929,11 +2825,18 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } if (!NM_IN_STRSET(priv->phase1_peapver, NULL, "0", "1")) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid value for the property"), - priv->phase1_peapver); + if (priv->phase1_peapver) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid value for the property"), + priv->phase1_peapver); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("property is empty")); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, @@ -2942,11 +2845,18 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } if (!NM_IN_STRSET(priv->phase1_peaplabel, NULL, "0", "1")) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid value for the property"), - priv->phase1_peaplabel); + if (priv->phase1_peaplabel) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid value for the property"), + priv->phase1_peaplabel); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("property is empty")); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, @@ -2955,11 +2865,18 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } if (!NM_IN_STRSET(priv->phase1_fast_provisioning, NULL, "0", "1", "2", "3")) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid value for the property"), - priv->phase1_fast_provisioning); + if (priv->phase1_fast_provisioning) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid value for the property"), + priv->phase1_fast_provisioning); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("property is empty")); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, @@ -2989,11 +2906,18 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) "otp", "md5", "tls")) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid value for the property"), - priv->phase2_auth); + if (priv->phase2_auth) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid value for the property"), + priv->phase2_auth); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("property is empty")); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, @@ -3002,11 +2926,18 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } if (!NM_IN_STRSET(priv->phase2_autheap, NULL, "md5", "mschapv2", "otp", "gtc", "tls")) { - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("'%s' is not a valid value for the property"), - priv->phase2_autheap); + if (priv->phase2_autheap) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("'%s' is not a valid value for the property"), + priv->phase2_autheap); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("property is empty")); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, @@ -3049,6 +2980,50 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) error)) return FALSE; + /* normalizable warnings from here on. */ + +#define _check_strempty_and_return(priv, prop_name, field, error) \ + G_STMT_START \ + { \ + NMSetting8021xPrivate *_priv = (priv); \ + GError **_error = (error); \ + \ + if (_priv->field && _priv->field[0] == '\0') { \ + g_set_error(_error, \ + NM_CONNECTION_ERROR, \ + NM_CONNECTION_ERROR_INVALID_PROPERTY, \ + _("property is empty")); \ + g_prefix_error(_error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, "" prop_name ""); \ + return NM_SETTING_VERIFY_NORMALIZABLE; \ + } \ + } \ + G_STMT_END + + _check_strempty_and_return(priv, NM_SETTING_802_1X_IDENTITY, identity, error); + _check_strempty_and_return(priv, + NM_SETTING_802_1X_ANONYMOUS_IDENTITY, + anonymous_identity, + error); + _check_strempty_and_return(priv, NM_SETTING_802_1X_PAC_FILE, pac_file, error); + _check_strempty_and_return(priv, NM_SETTING_802_1X_SUBJECT_MATCH, subject_match, error); + _check_strempty_and_return(priv, + NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, + phase2_subject_match, + error); + _check_strempty_and_return(priv, + NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH, + domain_suffix_match, + error); + _check_strempty_and_return(priv, + NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH, + phase2_domain_suffix_match, + error); + _check_strempty_and_return(priv, NM_SETTING_802_1X_DOMAIN_MATCH, domain_match, error); + _check_strempty_and_return(priv, + NM_SETTING_802_1X_PHASE2_DOMAIN_MATCH, + phase2_domain_match, + error); + return TRUE; } diff --git a/src/libnm-core-impl/nm-setting-connection.c b/src/libnm-core-impl/nm-setting-connection.c index 73611004..0d7d7cd5 100644 --- a/src/libnm-core-impl/nm-setting-connection.c +++ b/src/libnm-core-impl/nm-setting-connection.c @@ -71,32 +71,32 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingConnection, PROP_MUD_URL, ); typedef struct { - GArray *permissions; - GArray *secondaries; - char *id; - char *uuid; - char *stable_id; - char *interface_name; - char *type; - char *master; - char *slave_type; - char *zone; - char *mud_url; - guint64 timestamp; - int autoconnect_slaves; - int metered; - gint32 autoconnect_priority; - gint32 autoconnect_retries; - gint32 multi_connect; - gint32 auth_retries; - gint32 mdns; - gint32 llmnr; - gint32 dns_over_tls; - gint32 wait_device_timeout; - gint32 lldp; - guint32 gateway_ping_timeout; - bool autoconnect; - bool read_only; + GArray *permissions; + NMValueStrv secondaries; + char *id; + char *uuid; + char *stable_id; + char *interface_name; + char *type; + char *master; + char *slave_type; + char *zone; + char *mud_url; + guint64 timestamp; + int autoconnect_slaves; + int metered; + gint32 autoconnect_priority; + gint32 autoconnect_retries; + gint32 multi_connect; + gint32 auth_retries; + gint32 mdns; + gint32 llmnr; + gint32 dns_over_tls; + gint32 wait_device_timeout; + gint32 lldp; + guint32 gateway_ping_timeout; + bool autoconnect; + bool read_only; } NMSettingConnectionPrivate; /** @@ -757,7 +757,7 @@ nm_setting_connection_get_autoconnect_slaves(NMSettingConnection *setting) GArray * _nm_setting_connection_get_secondaries(NMSettingConnection *setting) { - return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->secondaries; + return NM_SETTING_CONNECTION_GET_PRIVATE(setting)->secondaries.arr; } /** @@ -771,7 +771,7 @@ nm_setting_connection_get_num_secondaries(NMSettingConnection *setting) { g_return_val_if_fail(NM_IS_SETTING_CONNECTION(setting), 0); - return nm_g_array_len(NM_SETTING_CONNECTION_GET_PRIVATE(setting)->secondaries); + return nm_g_array_len(NM_SETTING_CONNECTION_GET_PRIVATE(setting)->secondaries.arr); } /** @@ -794,14 +794,14 @@ nm_setting_connection_get_secondary(NMSettingConnection *setting, guint32 idx) priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - secondaries_len = nm_g_array_len(priv->secondaries); + secondaries_len = nm_g_array_len(priv->secondaries.arr); if (idx >= secondaries_len) { /* access one past the length is OK. */ g_return_val_if_fail(idx == secondaries_len, NULL); return NULL; } - return nm_strvarray_get_idx(priv->secondaries, idx); + return nm_strvarray_get_idx(priv->secondaries.arr, idx); } /** @@ -841,10 +841,10 @@ nm_setting_connection_add_secondary(NMSettingConnection *setting, const char *se priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - if (nm_strvarray_find_first(priv->secondaries, sec_uuid) >= 0) + if (nm_strvarray_find_first(priv->secondaries.arr, sec_uuid) >= 0) return FALSE; - nm_strvarray_add(nm_strvarray_ensure(&priv->secondaries), sec_uuid); + nm_strvarray_add(nm_strvarray_ensure(&priv->secondaries.arr), sec_uuid); _notify(setting, PROP_SECONDARIES); return TRUE; } @@ -865,9 +865,9 @@ nm_setting_connection_remove_secondary(NMSettingConnection *setting, guint32 idx priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - g_return_if_fail(idx < nm_g_array_len(priv->secondaries)); + g_return_if_fail(idx < nm_g_array_len(priv->secondaries.arr)); - g_array_remove_index(priv->secondaries, idx); + g_array_remove_index(priv->secondaries.arr, idx); _notify(setting, PROP_SECONDARIES); } @@ -890,7 +890,7 @@ nm_setting_connection_remove_secondary_by_value(NMSettingConnection *setting, co priv = NM_SETTING_CONNECTION_GET_PRIVATE(setting); - if (nm_strvarray_remove_first(priv->secondaries, sec_uuid)) { + if (nm_strvarray_remove_first(priv->secondaries.arr, sec_uuid)) { _notify(setting, PROP_SECONDARIES); return TRUE; } @@ -1524,7 +1524,7 @@ after_interface_name: return NM_SETTING_VERIFY_NORMALIZABLE; } - if (!_nm_setting_connection_verify_secondaries(priv->secondaries, error)) + if (!_nm_setting_connection_verify_secondaries(priv->secondaries.arr, error)) return NM_SETTING_VERIFY_NORMALIZABLE; return TRUE; @@ -1637,9 +1637,6 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) case PROP_TIMESTAMP: g_value_set_uint64(value, nm_setting_connection_get_timestamp(setting)); break; - case PROP_SECONDARIES: - g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(priv->secondaries, NULL)); - break; default: _nm_setting_property_get_property_direct(object, prop_id, value, pspec); break; @@ -1675,9 +1672,6 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps case PROP_TIMESTAMP: priv->timestamp = g_value_get_uint64(value); break; - case PROP_SECONDARIES: - nm_strvarray_set_strv(&priv->secondaries, g_value_get_boxed(value)); - break; default: _nm_setting_property_set_property_direct(object, prop_id, value, pspec); break; @@ -1709,7 +1703,7 @@ finalize(GObject *object) NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE(object); nm_clear_pointer(&priv->permissions, g_array_unref); - nm_clear_pointer(&priv->secondaries, g_array_unref); + nm_clear_pointer(&priv->secondaries.arr, g_array_unref); G_OBJECT_CLASS(nm_setting_connection_parent_class)->finalize(object); } @@ -1808,7 +1802,8 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * 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 per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. + * See NetworkManager(8) manual about the secret-key and the host identity. * * The '$' character is treated special to perform dynamic substitutions * at runtime. Currently, supported are "${CONNECTION}", "${DEVICE}", "${MAC}", @@ -1958,6 +1953,15 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * Note that autoconnect is not implemented for VPN profiles. See * #NMSettingConnection:secondaries as an alternative to automatically * connect VPN profiles. + * + * If multiple profiles are ready to autoconnect on the same device, + * the one with the better "connection.autoconnect-priority" is chosen. If + * the priorities are equal, then the most recently connected profile is activated. + * If the profiles were not connected earlier or their + * "connection.timestamp" is identical, the choice is undefined. + * + * Depending on "connection.multi-connect", a profile can (auto)connect only + * once at a time or multiple times. **/ /* ---ifcfg-rh--- * property: autoconnect @@ -2230,12 +2234,13 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass) * together with this connection. * ---end--- */ - obj_properties[PROP_SECONDARIES] = g_param_spec_boxed( - NM_SETTING_CONNECTION_SECONDARIES, - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_direct_strv(properties_override, + obj_properties, + NM_SETTING_CONNECTION_SECONDARIES, + PROP_SECONDARIES, + NM_SETTING_PARAM_FUZZY_IGNORE, + NMSettingConnectionPrivate, + secondaries); /** * NMSettingConnection:gateway-ping-timeout: diff --git a/src/libnm-core-impl/nm-setting-ip-config.c b/src/libnm-core-impl/nm-setting-ip-config.c index 52aa6515..cffd5b19 100644 --- a/src/libnm-core-impl/nm-setting-ip-config.c +++ b/src/libnm-core-impl/nm-setting-ip-config.c @@ -1390,7 +1390,8 @@ _ip_route_attribute_validate(const char *name, RTN_LOCAL, RTN_BLACKHOLE, RTN_UNREACHABLE, - RTN_PROHIBIT)) { + RTN_PROHIBIT, + RTN_THROW)) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -1494,6 +1495,7 @@ _nm_ip_route_attribute_validate_all(const NMIPRoute *route, GError **error) case RTN_BLACKHOLE: case RTN_UNREACHABLE: case RTN_PROHIBIT: + case RTN_THROW: if (route->next_hop) { g_set_error(error, NM_CONNECTION_ERROR, @@ -2684,7 +2686,7 @@ nm_ip_routing_rule_validate(const NMIPRoutingRule *self, GError **error) g_set_error_literal(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("invalid priority")); + _("missing priority")); return FALSE; } diff --git a/src/libnm-core-impl/nm-setting-ip4-config.c b/src/libnm-core-impl/nm-setting-ip4-config.c index 5b06739c..bf555168 100644 --- a/src/libnm-core-impl/nm-setting-ip4-config.c +++ b/src/libnm-core-impl/nm-setting-ip4-config.c @@ -1006,7 +1006,8 @@ nm_setting_ip4_config_class_init(NMSettingIP4ConfigClass *klass) * * * "type" - one of unicast, local, blackhole, - * unavailable, prohibit. The default is unicast. + * unavailable, prohibit, throw. + * The default is unicast. * * * "window" - an unsigned 32 bit integer. diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c index f4623b28..f75c14ce 100644 --- a/src/libnm-core-impl/nm-setting-ip6-config.c +++ b/src/libnm-core-impl/nm-setting-ip6-config.c @@ -946,8 +946,9 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) * format: a comma separated list of addresses * description: A list of IPv6 addresses and their prefix length. Multiple addresses * can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". - * The addresses are listed in increasing priority, meaning the last address will - * be the primary address. + * The addresses are listed in decreasing priority, meaning the first address will + * be the primary address. This can make a difference with IPv6 source address selection + * (RFC 6724, section 5). * ---end--- */ _nm_properties_override_gobj( @@ -1042,7 +1043,8 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) * * * "type" - one of unicast, local, blackhole, - * unavailable, prohibit. The default is unicast. + * unavailable, prohibit, throw. + * The default is unicast. * * * "window" - an unsigned 32 bit integer. diff --git a/src/libnm-core-impl/nm-setting-match.c b/src/libnm-core-impl/nm-setting-match.c index 0ddffee5..f0e9fdf8 100644 --- a/src/libnm-core-impl/nm-setting-match.c +++ b/src/libnm-core-impl/nm-setting-match.c @@ -32,11 +32,11 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingMatch, * Since: 1.14 */ struct _NMSettingMatch { - NMSetting parent; - GArray *interface_name; - GArray *kernel_command_line; - GArray *driver; - GArray *path; + NMSetting parent; + NMValueStrv interface_name; + NMValueStrv kernel_command_line; + NMValueStrv driver; + NMValueStrv path; }; struct _NMSettingMatchClass { @@ -60,7 +60,7 @@ nm_setting_match_get_num_interface_names(NMSettingMatch *setting) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), 0); - return nm_g_array_len(setting->interface_name); + return nm_g_array_len(setting->interface_name.arr); } /** @@ -77,10 +77,11 @@ nm_setting_match_get_interface_name(NMSettingMatch *setting, int idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->interface_name && idx >= 0 && idx < setting->interface_name->len, + g_return_val_if_fail(setting->interface_name.arr && idx >= 0 + && idx < setting->interface_name.arr->len, NULL); - return nm_strvarray_get_idx(setting->interface_name, idx); + return nm_strvarray_get_idx(setting->interface_name.arr, idx); } /** @@ -98,7 +99,7 @@ nm_setting_match_add_interface_name(NMSettingMatch *setting, const char *interfa g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(interface_name); - nm_strvarray_add(nm_strvarray_ensure(&setting->interface_name), interface_name); + nm_strvarray_add(nm_strvarray_ensure(&setting->interface_name.arr), interface_name); _notify(setting, PROP_INTERFACE_NAME); } @@ -116,9 +117,10 @@ nm_setting_match_remove_interface_name(NMSettingMatch *setting, int idx) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - g_return_if_fail(setting->interface_name && idx >= 0 && idx < setting->interface_name->len); + g_return_if_fail(setting->interface_name.arr && idx >= 0 + && idx < setting->interface_name.arr->len); - g_array_remove_index(setting->interface_name, idx); + g_array_remove_index(setting->interface_name.arr, idx); _notify(setting, PROP_INTERFACE_NAME); } @@ -139,7 +141,7 @@ nm_setting_match_remove_interface_name_by_value(NMSettingMatch *setting, const c g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(interface_name, FALSE); - if (nm_strvarray_remove_first(setting->interface_name, interface_name)) { + if (nm_strvarray_remove_first(setting->interface_name.arr, interface_name)) { _notify(setting, PROP_INTERFACE_NAME); return TRUE; } @@ -160,8 +162,8 @@ nm_setting_match_clear_interface_names(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->interface_name) != 0) { - nm_clear_pointer(&setting->interface_name, g_array_unref); + if (nm_g_array_len(setting->interface_name.arr) != 0) { + nm_clear_pointer(&setting->interface_name.arr, g_array_unref); _notify(setting, PROP_INTERFACE_NAME); } } @@ -185,7 +187,7 @@ nm_setting_match_get_interface_names(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->interface_name, length); + return nm_strvarray_get_strv(&setting->interface_name.arr, length); } /*****************************************************************************/ @@ -203,7 +205,7 @@ nm_setting_match_get_num_kernel_command_lines(NMSettingMatch *setting) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), 0); - return nm_g_array_len(setting->kernel_command_line); + return nm_g_array_len(setting->kernel_command_line.arr); } /** @@ -220,10 +222,11 @@ nm_setting_match_get_kernel_command_line(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->kernel_command_line && idx < setting->kernel_command_line->len, + g_return_val_if_fail(setting->kernel_command_line.arr + && idx < setting->kernel_command_line.arr->len, NULL); - return nm_strvarray_get_idx(setting->kernel_command_line, idx); + return nm_strvarray_get_idx(setting->kernel_command_line.arr, idx); } /** @@ -241,7 +244,7 @@ nm_setting_match_add_kernel_command_line(NMSettingMatch *setting, const char *ke g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(kernel_command_line); - nm_strvarray_add(nm_strvarray_ensure(&setting->kernel_command_line), kernel_command_line); + nm_strvarray_add(nm_strvarray_ensure(&setting->kernel_command_line.arr), kernel_command_line); _notify(setting, PROP_KERNEL_COMMAND_LINE); } @@ -259,9 +262,10 @@ nm_setting_match_remove_kernel_command_line(NMSettingMatch *setting, guint idx) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - g_return_if_fail(setting->kernel_command_line && idx < setting->kernel_command_line->len); + g_return_if_fail(setting->kernel_command_line.arr + && idx < setting->kernel_command_line.arr->len); - g_array_remove_index(setting->kernel_command_line, idx); + g_array_remove_index(setting->kernel_command_line.arr, idx); _notify(setting, PROP_KERNEL_COMMAND_LINE); } @@ -283,7 +287,7 @@ nm_setting_match_remove_kernel_command_line_by_value(NMSettingMatch *setting, g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(kernel_command_line, FALSE); - if (nm_strvarray_remove_first(setting->kernel_command_line, kernel_command_line)) { + if (nm_strvarray_remove_first(setting->kernel_command_line.arr, kernel_command_line)) { _notify(setting, PROP_KERNEL_COMMAND_LINE); return TRUE; } @@ -304,8 +308,8 @@ nm_setting_match_clear_kernel_command_lines(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->kernel_command_line) != 0) { - nm_clear_pointer(&setting->kernel_command_line, g_array_unref); + if (nm_g_array_len(setting->kernel_command_line.arr) != 0) { + nm_clear_pointer(&setting->kernel_command_line.arr, g_array_unref); _notify(setting, PROP_KERNEL_COMMAND_LINE); } } @@ -326,7 +330,7 @@ nm_setting_match_get_kernel_command_lines(NMSettingMatch *setting, guint *length { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->kernel_command_line, length); + return nm_strvarray_get_strv(&setting->kernel_command_line.arr, length); } /*****************************************************************************/ @@ -344,7 +348,7 @@ nm_setting_match_get_num_drivers(NMSettingMatch *setting) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), 0); - return nm_g_array_len(setting->driver); + return nm_g_array_len(setting->driver.arr); } /** @@ -361,9 +365,9 @@ nm_setting_match_get_driver(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->driver && idx < setting->driver->len, NULL); + g_return_val_if_fail(setting->driver.arr && idx < setting->driver.arr->len, NULL); - return nm_strvarray_get_idx(setting->driver, idx); + return nm_strvarray_get_idx(setting->driver.arr, idx); } /** @@ -381,7 +385,7 @@ nm_setting_match_add_driver(NMSettingMatch *setting, const char *driver) g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(driver); - nm_strvarray_add(nm_strvarray_ensure(&setting->driver), driver); + nm_strvarray_add(nm_strvarray_ensure(&setting->driver.arr), driver); _notify(setting, PROP_DRIVER); } @@ -399,9 +403,9 @@ nm_setting_match_remove_driver(NMSettingMatch *setting, guint idx) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - g_return_if_fail(setting->driver && idx < setting->driver->len); + g_return_if_fail(setting->driver.arr && idx < setting->driver.arr->len); - g_array_remove_index(setting->driver, idx); + g_array_remove_index(setting->driver.arr, idx); _notify(setting, PROP_DRIVER); } @@ -422,7 +426,7 @@ nm_setting_match_remove_driver_by_value(NMSettingMatch *setting, const char *dri g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(driver, FALSE); - if (nm_strvarray_remove_first(setting->driver, driver)) { + if (nm_strvarray_remove_first(setting->driver.arr, driver)) { _notify(setting, PROP_DRIVER); return TRUE; } @@ -443,8 +447,8 @@ nm_setting_match_clear_drivers(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->driver) != 0) { - nm_clear_pointer(&setting->driver, g_array_unref); + if (nm_g_array_len(setting->driver.arr) != 0) { + nm_clear_pointer(&setting->driver.arr, g_array_unref); _notify(setting, PROP_DRIVER); } } @@ -465,7 +469,7 @@ nm_setting_match_get_drivers(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->driver, length); + return nm_strvarray_get_strv(&setting->driver.arr, length); } /*****************************************************************************/ @@ -483,7 +487,7 @@ nm_setting_match_get_num_paths(NMSettingMatch *setting) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), 0); - return nm_g_array_len(setting->path); + return nm_g_array_len(setting->path.arr); } /** @@ -500,9 +504,9 @@ nm_setting_match_get_path(NMSettingMatch *setting, guint idx) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - g_return_val_if_fail(setting->path && idx < setting->path->len, NULL); + g_return_val_if_fail(setting->path.arr && idx < setting->path.arr->len, NULL); - return nm_strvarray_get_idx(setting->path, idx); + return nm_strvarray_get_idx(setting->path.arr, idx); } /** @@ -520,7 +524,7 @@ nm_setting_match_add_path(NMSettingMatch *setting, const char *path) g_return_if_fail(NM_IS_SETTING_MATCH(setting)); g_return_if_fail(path); - nm_strvarray_add(nm_strvarray_ensure(&setting->path), path); + nm_strvarray_add(nm_strvarray_ensure(&setting->path.arr), path); _notify(setting, PROP_PATH); } @@ -538,9 +542,9 @@ nm_setting_match_remove_path(NMSettingMatch *setting, guint idx) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - g_return_if_fail(setting->path && idx < setting->path->len); + g_return_if_fail(setting->path.arr && idx < setting->path.arr->len); - g_array_remove_index(setting->path, idx); + g_array_remove_index(setting->path.arr, idx); _notify(setting, PROP_PATH); } @@ -561,7 +565,7 @@ nm_setting_match_remove_path_by_value(NMSettingMatch *setting, const char *path) g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), FALSE); g_return_val_if_fail(path, FALSE); - if (nm_strvarray_remove_first(setting->path, path)) { + if (nm_strvarray_remove_first(setting->path.arr, path)) { _notify(setting, PROP_PATH); return TRUE; } @@ -582,8 +586,8 @@ nm_setting_match_clear_paths(NMSettingMatch *setting) { g_return_if_fail(NM_IS_SETTING_MATCH(setting)); - if (nm_g_array_len(setting->path) != 0) { - nm_clear_pointer(&setting->path, g_array_unref); + if (nm_g_array_len(setting->path.arr) != 0) { + nm_clear_pointer(&setting->path.arr, g_array_unref); _notify(setting, PROP_PATH); } } @@ -604,58 +608,7 @@ nm_setting_match_get_paths(NMSettingMatch *setting, guint *length) { g_return_val_if_fail(NM_IS_SETTING_MATCH(setting), NULL); - return nm_strvarray_get_strv(&setting->path, length); -} - -/*****************************************************************************/ - -static void -get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - NMSettingMatch *self = NM_SETTING_MATCH(object); - - switch (prop_id) { - case PROP_INTERFACE_NAME: - g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(self->interface_name, NULL)); - break; - case PROP_KERNEL_COMMAND_LINE: - g_value_take_boxed(value, - nm_strvarray_get_strv_non_empty_dup(self->kernel_command_line, NULL)); - break; - case PROP_DRIVER: - g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(self->driver, NULL)); - break; - case PROP_PATH: - g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(self->path, NULL)); - 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) -{ - NMSettingMatch *self = NM_SETTING_MATCH(object); - - switch (prop_id) { - case PROP_INTERFACE_NAME: - nm_strvarray_set_strv(&self->interface_name, g_value_get_boxed(value)); - break; - case PROP_KERNEL_COMMAND_LINE: - nm_strvarray_set_strv(&self->kernel_command_line, g_value_get_boxed(value)); - break; - case PROP_DRIVER: - nm_strvarray_set_strv(&self->driver, g_value_get_boxed(value)); - break; - case PROP_PATH: - nm_strvarray_set_strv(&self->path, g_value_get_boxed(value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } + return nm_strvarray_get_strv(&setting->path.arr, length); } /*****************************************************************************/ @@ -698,9 +651,9 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) NMSettingMatch *self = NM_SETTING_MATCH(setting); guint i; - if (self->interface_name) { - for (i = 0; i < self->interface_name->len; i++) { - if (nm_str_is_empty(nm_strvarray_get_idx(self->interface_name, i))) { + if (self->interface_name.arr) { + for (i = 0; i < self->interface_name.arr->len; i++) { + if (nm_str_is_empty(nm_strvarray_get_idx(self->interface_name.arr, i))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -714,9 +667,9 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } } - if (self->kernel_command_line) { - for (i = 0; i < self->kernel_command_line->len; i++) { - if (nm_str_is_empty(nm_strvarray_get_idx(self->kernel_command_line, i))) { + if (self->kernel_command_line.arr) { + for (i = 0; i < self->kernel_command_line.arr->len; i++) { + if (nm_str_is_empty(nm_strvarray_get_idx(self->kernel_command_line.arr, i))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -730,9 +683,9 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } } - if (self->driver) { - for (i = 0; i < self->driver->len; i++) { - if (nm_str_is_empty(nm_strvarray_get_idx(self->driver, i))) { + if (self->driver.arr) { + for (i = 0; i < self->driver.arr->len; i++) { + if (nm_str_is_empty(nm_strvarray_get_idx(self->driver.arr, i))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -746,9 +699,9 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) } } - if (self->path) { - for (i = 0; i < self->path->len; i++) { - if (nm_str_is_empty(nm_strvarray_get_idx(self->path, i))) { + if (self->path.arr) { + for (i = 0; i < self->path.arr->len; i++) { + if (nm_str_is_empty(nm_strvarray_get_idx(self->path.arr, i))) { g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, @@ -770,10 +723,10 @@ finalize(GObject *object) { NMSettingMatch *self = NM_SETTING_MATCH(object); - nm_clear_pointer(&self->interface_name, g_array_unref); - nm_clear_pointer(&self->kernel_command_line, g_array_unref); - nm_clear_pointer(&self->driver, g_array_unref); - nm_clear_pointer(&self->path, g_array_unref); + nm_clear_pointer(&self->interface_name.arr, g_array_unref); + nm_clear_pointer(&self->kernel_command_line.arr, g_array_unref); + nm_clear_pointer(&self->driver.arr, g_array_unref); + nm_clear_pointer(&self->path.arr, g_array_unref); G_OBJECT_CLASS(nm_setting_match_parent_class)->finalize(object); } @@ -781,11 +734,12 @@ finalize(GObject *object) static void nm_setting_match_class_init(NMSettingMatchClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS(klass); - NMSettingClass *setting_class = NM_SETTING_CLASS(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->get_property = _nm_setting_property_get_property_direct; + object_class->set_property = _nm_setting_property_set_property_direct; object_class->finalize = finalize; setting_class->verify = verify; @@ -810,12 +764,13 @@ nm_setting_match_class_init(NMSettingMatchClass *klass) * * Since: 1.14 **/ - obj_properties[PROP_INTERFACE_NAME] = g_param_spec_boxed( - NM_SETTING_MATCH_INTERFACE_NAME, - "", - "", - G_TYPE_STRV, - NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_direct_strv(properties_override, + obj_properties, + NM_SETTING_MATCH_INTERFACE_NAME, + PROP_INTERFACE_NAME, + NM_SETTING_PARAM_FUZZY_IGNORE, + NMSettingMatch, + interface_name); /** * NMSettingMatch:kernel-command-line @@ -834,12 +789,13 @@ nm_setting_match_class_init(NMSettingMatchClass *klass) * * Since: 1.26 **/ - obj_properties[PROP_KERNEL_COMMAND_LINE] = g_param_spec_boxed( - NM_SETTING_MATCH_KERNEL_COMMAND_LINE, - "", - "", - G_TYPE_STRV, - NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_direct_strv(properties_override, + obj_properties, + NM_SETTING_MATCH_KERNEL_COMMAND_LINE, + PROP_KERNEL_COMMAND_LINE, + NM_SETTING_PARAM_FUZZY_IGNORE, + NMSettingMatch, + kernel_command_line); /** * NMSettingMatch:driver @@ -852,12 +808,13 @@ nm_setting_match_class_init(NMSettingMatchClass *klass) * * Since: 1.26 **/ - obj_properties[PROP_DRIVER] = g_param_spec_boxed( - NM_SETTING_MATCH_DRIVER, - "", - "", - G_TYPE_STRV, - NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_direct_strv(properties_override, + obj_properties, + NM_SETTING_MATCH_DRIVER, + PROP_DRIVER, + NM_SETTING_PARAM_FUZZY_IGNORE, + NMSettingMatch, + driver); /** * NMSettingMatch:path @@ -892,14 +849,19 @@ nm_setting_match_class_init(NMSettingMatchClass *klass) * example: MATCH_PATH="pci-0000:01:00.0 pci-0000:0c:00.0" * ---end--- */ - obj_properties[PROP_PATH] = g_param_spec_boxed(NM_SETTING_MATCH_PATH, - "", - "", - G_TYPE_STRV, - NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE - | G_PARAM_STATIC_STRINGS); + _nm_setting_property_define_direct_strv(properties_override, + obj_properties, + NM_SETTING_MATCH_PATH, + PROP_PATH, + NM_SETTING_PARAM_FUZZY_IGNORE, + NMSettingMatch, + path); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); - _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_MATCH, NULL, NULL, 0); + _nm_setting_class_commit(setting_class, + NM_META_SETTING_TYPE_MATCH, + NULL, + properties_override, + 0); } diff --git a/src/libnm-core-impl/nm-setting-private.h b/src/libnm-core-impl/nm-setting-private.h index 7483eaed..38b233e9 100644 --- a/src/libnm-core-impl/nm-setting-private.h +++ b/src/libnm-core-impl/nm-setting-private.h @@ -232,6 +232,14 @@ gboolean _nm_setting_clear_secrets(NMSetting *setting, /*****************************************************************************/ +/* This holds a property of type NM_VALUE_TYPE_STRV. You probably want + * to use nm_strvarray_*() API with this. */ +typedef struct { + GArray *arr; +} NMValueStrv; + +/*****************************************************************************/ + #define NM_SETTING_PARAM_NONE 0 /* The property of the #NMSetting should be considered during comparisons that @@ -277,6 +285,7 @@ extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_int64; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_uint64; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_string; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_bytes; +extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_strv; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_enum; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_flags; extern const NMSettInfoPropertType nm_sett_info_propert_type_direct_mac_address; @@ -774,6 +783,42 @@ _nm_properties_override(GArray *properties_override, const NMSettInfoProperty *p /*****************************************************************************/ +#define _nm_setting_property_define_direct_strv(properties_override, \ + obj_properties, \ + prop_name, \ + prop_id, \ + param_flags, \ + private_struct_type, \ + private_struct_field, \ + ... /* extra NMSettInfoProperty fields */) \ + G_STMT_START \ + { \ + GParamSpec *_param_spec; \ + \ + G_STATIC_ASSERT(!NM_FLAGS_ANY((param_flags), ~(NM_SETTING_PARAM_FUZZY_IGNORE))); \ + \ + _param_spec = \ + g_param_spec_boxed("" prop_name "", \ + "", \ + "", \ + G_TYPE_STRV, \ + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (param_flags)); \ + \ + (obj_properties)[(prop_id)] = _param_spec; \ + \ + _nm_properties_override_gobj((properties_override), \ + _param_spec, \ + &nm_sett_info_propert_type_direct_strv, \ + .direct_offset = \ + NM_STRUCT_OFFSET_ENSURE_TYPE(NMValueStrv, \ + private_struct_type, \ + private_struct_field), \ + __VA_ARGS__); \ + } \ + G_STMT_END + +/*****************************************************************************/ + #define _nm_setting_property_define_direct_enum(properties_override, \ obj_properties, \ prop_name, \ diff --git a/src/libnm-core-impl/nm-setting-proxy.c b/src/libnm-core-impl/nm-setting-proxy.c index 4b9a2970..8b91210b 100644 --- a/src/libnm-core-impl/nm-setting-proxy.c +++ b/src/libnm-core-impl/nm-setting-proxy.c @@ -114,7 +114,7 @@ nm_setting_proxy_get_pac_url(NMSettingProxy *setting) * nm_setting_proxy_get_pac_script: * @setting: the #NMSettingProxy * - * Returns: the PAC script + * Returns: the PAC script. * * Since: 1.6 **/ @@ -315,15 +315,25 @@ nm_setting_proxy_class_init(NMSettingProxyClass *klass) /** * NMSettingProxy:pac-script: * - * PAC script for the connection. + * PAC script for the connection. This is an UTF-8 encoded javascript code + * that defines a FindProxyForURL() function. * * Since: 1.6 **/ + /* ---nmcli--- + * property: pac-script + * description: The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines + * a FindProxyForURL() function. + * When setting the property in nmcli, a filename is accepted too. In that case, + * nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are + * supported to explicitly differentiate between the two. + * ---end--- + */ /* ---ifcfg-rh--- * property: pac-script * variable: PAC_SCRIPT(+) - * description: Path of the PAC script. - * example: PAC_SCRIPT=/home/joe/proxy.pac + * description: The PAC script. This is an UTF-8 encoded javascript code that defines a FindProxyForURL() function. + * example: PAC_SCRIPT="function FindProxyForURL (url, host) { return 'PROXY proxy.example.com:8080; DIRECT'; }" * ---end--- */ _nm_setting_property_define_direct_string(properties_override, diff --git a/src/libnm-core-impl/nm-setting.c b/src/libnm-core-impl/nm-setting.c index be88effb..35070bae 100644 --- a/src/libnm-core-impl/nm-setting.c +++ b/src/libnm-core-impl/nm-setting.c @@ -774,6 +774,13 @@ _nm_setting_property_get_property_direct(GObject *object, g_value_set_boxed(value, *p_val); return; } + case NM_VALUE_TYPE_STRV: + { + const NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); + + g_value_take_boxed(value, nm_strvarray_get_strv_non_empty_dup(p_val->arr, NULL)); + return; + } default: goto out_fail; } @@ -909,6 +916,18 @@ _nm_setting_property_set_property_direct(GObject *object, *p_val = v ? g_bytes_ref(v) : NULL; goto out_notify; } + case NM_VALUE_TYPE_STRV: + { + NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); + const char *const *v; + + v = g_value_get_boxed(value); + if (nm_strvarray_equal_strv(p_val->arr, v, -1)) + return; + + nm_strvarray_set_strv(&p_val->arr, v); + goto out_notify; + } default: goto out_fail; } @@ -1026,6 +1045,11 @@ _init_direct(NMSetting *setting) nm_assert(!(*((const GBytes *const *) _nm_setting_get_private_field(setting, sett_info, property_info)))); break; + case NM_VALUE_TYPE_STRV: + nm_assert(!((const NMValueStrv *) + _nm_setting_get_private_field(setting, sett_info, property_info)) + ->arr); + break; default: nm_assert_not_reached(); break; @@ -1081,6 +1105,13 @@ _finalize_direct(NMSetting *setting) nm_clear_pointer(p_val, g_bytes_unref); break; } + case NM_VALUE_TYPE_STRV: + { + NMValueStrv *p_val = _nm_setting_get_private_field(setting, sett_info, property_info); + + nm_clear_pointer(&p_val->arr, g_array_unref); + break; + } default: nm_assert_not_reached(); break; @@ -1199,6 +1230,20 @@ _nm_setting_property_to_dbus_fcn_direct(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_ return NULL; return nm_g_bytes_to_variant_ay(val); } + case NM_VALUE_TYPE_STRV: + { + const NMValueStrv *val; + + /* Strv properties have always NULL as default. Setting "including_default" has no defined meaning + * (but it could have). */ + nm_assert(!property_info->to_dbus_including_default); + + val = + (const NMValueStrv *) _nm_setting_get_private_field(setting, sett_info, property_info); + if (!val->arr) + return NULL; + return g_variant_new_strv((const char *const *) val->arr->data, val->arr->len); + } default: return nm_assert_unreachable_val(NULL); } @@ -1545,6 +1590,8 @@ _nm_setting_property_from_dbus_fcn_direct(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS gs_unref_bytes GBytes *v = NULL; GBytes **p_val; + nm_assert(!property_info->property_type->from_dbus_direct_allow_transform); + if (!g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) goto out_error_wrong_dbus_type; @@ -1557,6 +1604,28 @@ _nm_setting_property_from_dbus_fcn_direct(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS NM_SWAP(p_val, &v); goto out_notify; } + case NM_VALUE_TYPE_STRV: + { + NMValueStrv *p_val; + gs_free const char **ss = NULL; + gsize ss_len; + + nm_assert(!property_info->property_type->from_dbus_direct_allow_transform); + + if (!g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) + goto out_error_wrong_dbus_type; + + ss = g_variant_get_strv(value, &ss_len); + nm_assert(ss_len <= G_MAXUINT); + + p_val = _nm_setting_get_private_field(setting, sett_info, property_info); + + if (nm_strvarray_equal_strv(p_val->arr, ss, ss_len)) + goto out_unchanged; + + nm_strvarray_set_strv(&p_val->arr, ss); + goto out_notify; + } default: break; } @@ -2465,6 +2534,9 @@ _nm_setting_property_compare_fcn_direct(_NM_SETT_INFO_PROP_COMPARE_FCN_ARGS _nm_ return nm_streq0(*((const char *const *) p_a), *((const char *const *) p_b)); case NM_VALUE_TYPE_BYTES: return nm_g_bytes_equal0(*((const GBytes *const *) p_a), *((const GBytes *const *) p_b)); + case NM_VALUE_TYPE_STRV: + return nm_strvarray_equal(((const NMValueStrv *) p_a)->arr, + ((const NMValueStrv *) p_b)->arr); default: return nm_assert_unreachable_val(TRUE); } @@ -3529,8 +3601,15 @@ const NMSettInfoPropertType nm_sett_info_propert_type_direct_bytes = .compare_fcn = _nm_setting_property_compare_fcn_direct, .to_dbus_fcn = _nm_setting_property_to_dbus_fcn_direct, .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_direct, - .from_dbus_is_full = TRUE, - .from_dbus_direct_allow_transform = TRUE); + .from_dbus_is_full = TRUE); + +const NMSettInfoPropertType nm_sett_info_propert_type_direct_strv = + NM_SETT_INFO_PROPERT_TYPE_DBUS_INIT(G_VARIANT_TYPE_STRING_ARRAY, + .direct_type = NM_VALUE_TYPE_STRV, + .compare_fcn = _nm_setting_property_compare_fcn_direct, + .to_dbus_fcn = _nm_setting_property_to_dbus_fcn_direct, + .from_dbus_fcn = _nm_setting_property_from_dbus_fcn_direct, + .from_dbus_is_full = TRUE); const NMSettInfoPropertType nm_sett_info_propert_type_direct_enum = NM_SETT_INFO_PROPERT_TYPE_DBUS_INIT(G_VARIANT_TYPE_INT32, @@ -3896,7 +3975,7 @@ nm_setting_option_set(NMSetting *setting, const char *opt_name, GVariant *varian g_hash_table_insert(hash, g_strdup(opt_name), g_variant_ref_sink(variant)); if (changed_value) - _nm_setting_option_notify(setting, !changed_name); + _nm_setting_option_notify(setting, changed_name); } /** @@ -3933,7 +4012,7 @@ nm_setting_option_set_boolean(NMSetting *setting, const char *opt_name, gboolean g_hash_table_insert(hash, g_strdup(opt_name), g_variant_ref_sink(g_variant_new_boolean(value))); if (changed_value) - _nm_setting_option_notify(setting, !changed_name); + _nm_setting_option_notify(setting, changed_name); } /** @@ -3968,7 +4047,7 @@ nm_setting_option_set_uint32(NMSetting *setting, const char *opt_name, guint32 v g_hash_table_insert(hash, g_strdup(opt_name), g_variant_ref_sink(g_variant_new_uint32(value))); if (changed_value) - _nm_setting_option_notify(setting, !changed_name); + _nm_setting_option_notify(setting, changed_name); } /*****************************************************************************/ diff --git a/src/libnm-core-impl/nm-utils.c b/src/libnm-core-impl/nm-utils.c index 55b01c15..d5d884f2 100644 --- a/src/libnm-core-impl/nm-utils.c +++ b/src/libnm-core-impl/nm-utils.c @@ -27,7 +27,6 @@ #include "libnm-core-aux-intern/nm-common-macros.h" #include "nm-utils-private.h" #include "nm-setting-private.h" -#include "nm-crypto.h" #include "nm-setting-bond.h" #include "nm-setting-bond-port.h" #include "nm-setting-bridge.h" @@ -3083,94 +3082,6 @@ nm_utils_uuid_generate(void) /*****************************************************************************/ -static gboolean -file_has_extension(const char *filename, const char *extensions[]) -{ - const char *ext; - gsize i; - - ext = strrchr(filename, '.'); - if (!ext) - return FALSE; - - for (i = 0; extensions[i]; i++) { - if (!g_ascii_strcasecmp(ext, extensions[i])) - return TRUE; - } - - return FALSE; -} - -/** - * nm_utils_file_is_certificate: - * @filename: name of the file to test - * - * Tests if @filename has a valid extension for an X.509 certificate file - * (".cer", ".crt", ".der", or ".pem"), and contains a certificate in a format - * recognized by NetworkManager. - * - * Returns: %TRUE if the file is a certificate, %FALSE if it is not - **/ -gboolean -nm_utils_file_is_certificate(const char *filename) -{ - const char *extensions[] = {".der", ".pem", ".crt", ".cer", NULL}; - NMCryptoFileFormat file_format; - - g_return_val_if_fail(filename != NULL, FALSE); - - if (!file_has_extension(filename, extensions)) - return FALSE; - - if (!nm_crypto_load_and_verify_certificate(filename, &file_format, NULL, NULL)) - return FALSE; - return file_format = NM_CRYPTO_FILE_FORMAT_X509; -} - -/** - * nm_utils_file_is_private_key: - * @filename: name of the file to test - * @out_encrypted: (out): on return, whether the file is encrypted - * - * Tests if @filename has a valid extension for an X.509 private key file - * (".der", ".key", ".pem", or ".p12"), and contains a private key in a format - * recognized by NetworkManager. - * - * Returns: %TRUE if the file is a private key, %FALSE if it is not - **/ -gboolean -nm_utils_file_is_private_key(const char *filename, gboolean *out_encrypted) -{ - const char *extensions[] = {".der", ".pem", ".p12", ".key", NULL}; - - g_return_val_if_fail(filename != NULL, FALSE); - - NM_SET_OUT(out_encrypted, FALSE); - if (!file_has_extension(filename, extensions)) - return FALSE; - - return nm_crypto_verify_private_key(filename, NULL, out_encrypted, NULL) - != NM_CRYPTO_FILE_FORMAT_UNKNOWN; -} - -/** - * nm_utils_file_is_pkcs12: - * @filename: name of the file to test - * - * Tests if @filename is a PKCS#12 file. - * - * Returns: %TRUE if the file is PKCS#12, %FALSE if it is not - **/ -gboolean -nm_utils_file_is_pkcs12(const char *filename) -{ - g_return_val_if_fail(filename != NULL, FALSE); - - return nm_crypto_is_pkcs12_file(filename, NULL); -} - -/*****************************************************************************/ - gboolean _nm_utils_check_file(const char *filename, gint64 check_owner, @@ -3795,22 +3706,13 @@ nm_utils_hwaddr_aton(const char *asc, gpointer buffer, gsize length) char * nm_utils_bin2hexstr(gconstpointer src, gsize len, int final_len) { - char *result; gsize buflen = (len * 2) + 1; g_return_val_if_fail(src != NULL, NULL); g_return_val_if_fail(len > 0 && (buflen - 1) / 2 == len, NULL); g_return_val_if_fail(final_len < 0 || (gsize) final_len < buflen, NULL); - result = g_malloc(buflen); - - nm_utils_bin2hexstr_full(src, len, '\0', FALSE, result); - - /* Cut converted key off at the correct length for this cipher type */ - if (final_len >= 0 && (gsize) final_len < buflen) - result[final_len] = '\0'; - - return result; + return _nm_utils_bin2hexstr(src, len, final_len); } /** diff --git a/src/libnm-core-impl/tests/test-crypto.c b/src/libnm-core-impl/tests/test-crypto.c index 6a6e7fbc..896c3c2e 100644 --- a/src/libnm-core-impl/tests/test-crypto.c +++ b/src/libnm-core-impl/tests/test-crypto.c @@ -10,7 +10,7 @@ #include #include -#include "nm-crypto-impl.h" +#include "libnm-crypto/nm-crypto-impl.h" #include "nm-utils.h" #include "nm-errors.h" #include "libnm-core-intern/nm-core-internal.h" @@ -92,7 +92,7 @@ test_cert(gconstpointer test_data) nmtst_assert_success(success, error); g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_X509); - g_assert(nm_utils_file_is_certificate(path)); + g_assert(nm_crypto_utils_file_is_certificate(path)); } static void @@ -106,7 +106,7 @@ test_load_private_key(const char *path, gs_unref_bytes GBytes *array = NULL; GError *error = NULL; - g_assert(nm_utils_file_is_private_key(path, &is_encrypted)); + g_assert(nm_crypto_utils_file_is_private_key(path, &is_encrypted)); g_assert(is_encrypted); array = nmtst_crypto_decrypt_openssl_private_key(path, password, &key_type, &error); @@ -146,7 +146,7 @@ test_load_pkcs12(const char *path, const char *password, int expected_error) gboolean is_encrypted = FALSE; GError *error = NULL; - g_assert(nm_utils_file_is_private_key(path, NULL)); + g_assert(nm_crypto_utils_file_is_private_key(path, NULL)); format = nm_crypto_verify_private_key(path, password, &is_encrypted, &error); if (expected_error != -1) { @@ -167,7 +167,7 @@ test_load_pkcs12_no_password(const char *path) gboolean is_encrypted = FALSE; GError *error = NULL; - g_assert(nm_utils_file_is_private_key(path, NULL)); + g_assert(nm_crypto_utils_file_is_private_key(path, NULL)); /* We should still get a valid returned crypto file format */ format = nm_crypto_verify_private_key(path, NULL, &is_encrypted, &error); @@ -201,7 +201,7 @@ test_load_pkcs8(const char *path, const char *password, int expected_error) gboolean is_encrypted = FALSE; GError *error = NULL; - g_assert(nm_utils_file_is_private_key(path, NULL)); + g_assert(nm_crypto_utils_file_is_private_key(path, NULL)); format = nm_crypto_verify_private_key(path, password, &is_encrypted, &error); if (expected_error != -1) { @@ -285,7 +285,7 @@ test_key_decrypted(gconstpointer test_data) path = g_build_filename(TEST_CERT_DIR, file, NULL); - g_assert(nm_utils_file_is_private_key(path, &is_encrypted)); + g_assert(nm_crypto_utils_file_is_private_key(path, &is_encrypted)); g_assert(!is_encrypted); g_free(path); @@ -399,6 +399,23 @@ test_md5(void) } } +/*****************************************************************************/ + +static void +test_crypto_error(void) +{ + G_STATIC_ASSERT(NM_CRYPTO_ERROR_FAILED == _NM_CRYPTO_ERROR_FAILED); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_INVALID_DATA == _NM_CRYPTO_ERROR_INVALID_DATA); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_INVALID_PASSWORD == _NM_CRYPTO_ERROR_INVALID_PASSWORD); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_UNKNOWN_CIPHER == _NM_CRYPTO_ERROR_UNKNOWN_CIPHER); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_DECRYPTION_FAILED == _NM_CRYPTO_ERROR_DECRYPTION_FAILED); + G_STATIC_ASSERT(NM_CRYPTO_ERROR_ENCRYPTION_FAILED == _NM_CRYPTO_ERROR_ENCRYPTION_FAILED); + + g_assert_cmpint(NM_CRYPTO_ERROR, ==, _NM_CRYPTO_ERROR); +} + +/*****************************************************************************/ + NMTST_DEFINE(); int @@ -448,6 +465,7 @@ main(int argc, char **argv) g_test_add_data_func("/libnm/crypto/PKCS#8", "pkcs8-enc-key.pem, 1234567890", test_pkcs8); g_test_add_func("/libnm/crypto/md5", test_md5); + g_test_add_func("/libnm/crypto/error", test_crypto_error); ret = g_test_run(); diff --git a/src/libnm-core-impl/tests/test-general-enums.h b/src/libnm-core-impl/tests/test-general-enums.h index b3163e23..2ac8cf2b 100644 --- a/src/libnm-core-impl/tests/test-general-enums.h +++ b/src/libnm-core-impl/tests/test-general-enums.h @@ -25,11 +25,11 @@ typedef enum { NM_TEST_GENERAL_META_FLAGS_0x4 = (1 << 4), } NMTestGeneralMetaFlags; -typedef enum { /*< flags >*/ - NM_TEST_GENERAL_COLOR_FLAGS_WHITE = 1, /*< skip >*/ - NM_TEST_GENERAL_COLOR_FLAGS_BLUE = 2, - NM_TEST_GENERAL_COLOR_FLAGS_RED = 4, - NM_TEST_GENERAL_COLOR_FLAGS_GREEN = 8, +typedef enum /*< flags >*/ { + NM_TEST_GENERAL_COLOR_FLAGS_WHITE = 1, /*< skip >*/ + NM_TEST_GENERAL_COLOR_FLAGS_BLUE = 2, + NM_TEST_GENERAL_COLOR_FLAGS_RED = 4, + NM_TEST_GENERAL_COLOR_FLAGS_GREEN = 8, } NMTestGeneralColorFlags; #endif /* _NM_TEST_GENERAL_ENUMS_H_ */ diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c index d0f85a9f..1856f6ad 100644 --- a/src/libnm-core-impl/tests/test-general.c +++ b/src/libnm-core-impl/tests/test-general.c @@ -5060,7 +5060,7 @@ test_setting_connection_changed_signal(void) ASSERT_CHANGED(nm_setting_connection_add_secondary(s_con, uuid)); ASSERT_CHANGED(nm_setting_connection_remove_secondary(s_con, 0)); - NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx < nm_g_array_len(priv->secondaries))); + NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx < nm_g_array_len(priv->secondaries.arr))); ASSERT_UNCHANGED(nm_setting_connection_remove_secondary(s_con, 1)); g_test_assert_expected_messages(); diff --git a/src/libnm-core-impl/tests/test-keyfile.c b/src/libnm-core-impl/tests/test-keyfile.c index 9bd13ffc..c163c429 100644 --- a/src/libnm-core-impl/tests/test-keyfile.c +++ b/src/libnm-core-impl/tests/test-keyfile.c @@ -5,16 +5,18 @@ #include "libnm-core-impl/nm-default-libnm-core.h" -#include "libnm-glib-aux/nm-json-aux.h" -#include "libnm-core-intern/nm-keyfile-utils.h" +#include "libnm-base/nm-ethtool-utils-base.h" #include "libnm-core-intern/nm-keyfile-internal.h" -#include "nm-simple-connection.h" -#include "nm-setting-connection.h" -#include "nm-setting-wired.h" +#include "libnm-core-intern/nm-keyfile-utils.h" +#include "libnm-glib-aux/nm-json-aux.h" #include "nm-setting-8021x.h" +#include "nm-setting-connection.h" +#include "nm-setting-ethtool.h" +#include "nm-setting-proxy.h" #include "nm-setting-team.h" #include "nm-setting-user.h" -#include "nm-setting-proxy.h" +#include "nm-setting-wired.h" +#include "nm-simple-connection.h" #include "libnm-glib-aux/nm-test-utils.h" @@ -887,6 +889,100 @@ test_bridge_port_vlans(void) /*****************************************************************************/ +typedef struct { + bool expect; + guint n_calls; +} InvalidOptionWriteData; + +static gboolean +_invalid_option_write_handler(NMConnection *connection, + GKeyFile *keyfile, + NMKeyfileHandlerType handler_type, + NMKeyfileHandlerData *handler_data, + void *user_data) +{ + InvalidOptionWriteData *data = user_data; + const char *message; + NMKeyfileWarnSeverity severity; + + g_assert(data); + g_assert(data->expect); + + g_assert(data->n_calls == 0); + data->n_calls++; + + switch (handler_type) { + case NM_KEYFILE_HANDLER_TYPE_WARN: + nm_keyfile_handler_data_warn_get(handler_data, &message, &severity); + g_assert(message && strstr(message, "ethtool.bogus")); + break; + default: + g_assert_not_reached(); + } + + return TRUE; +} + +static void +test_invalid_option(void) +{ + gs_unref_object NMConnection *con = NULL; + NMSetting *s_ethtool; + nm_auto_unref_keyfile GKeyFile *kf = NULL; + gs_free_error GError *error = NULL; + InvalidOptionWriteData data; + + con = nmtst_create_minimal_connection("test invalid option", + NULL, + NM_SETTING_WIRED_SETTING_NAME, + NULL); + + s_ethtool = nm_setting_ethtool_new(); + + nm_connection_add_setting(con, s_ethtool); + + nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_RX, TRUE); + + data = (InvalidOptionWriteData){}; + kf = nm_keyfile_write(con, + NM_KEYFILE_HANDLER_FLAGS_NONE, + _invalid_option_write_handler, + &data, + nmtst_get_rand_bool() ? &error : NULL); + nmtst_assert_success(kf, error); + nm_clear_pointer(&kf, g_key_file_unref); + + nmtst_connection_normalize(con); + + nmtst_assert_connection_verifies_without_normalization(con); + + data = (InvalidOptionWriteData){}; + kf = nm_keyfile_write(con, + NM_KEYFILE_HANDLER_FLAGS_NONE, + _invalid_option_write_handler, + &data, + nmtst_get_rand_bool() ? &error : NULL); + nmtst_assert_success(kf, error); + nm_clear_pointer(&kf, g_key_file_unref); + + nm_setting_option_set(s_ethtool, "bogus", g_variant_new_int64(0)); + + data = (InvalidOptionWriteData){ + .expect = TRUE, + }; + kf = nm_keyfile_write(con, + NM_KEYFILE_HANDLER_FLAGS_NONE, + _invalid_option_write_handler, + &data, + nmtst_get_rand_bool() ? &error : NULL); + nmtst_assert_success(kf, error); + nm_clear_pointer(&kf, g_key_file_unref); + + g_assert_cmpint(data.n_calls, ==, 1); +} + +/*****************************************************************************/ + NMTST_DEFINE(); int @@ -904,6 +1000,7 @@ main(int argc, char **argv) g_test_add_func("/core/keyfile/test_vpn/1", test_vpn_1); g_test_add_func("/core/keyfile/bridge/vlans", test_bridge_vlans); g_test_add_func("/core/keyfile/bridge-port/vlans", test_bridge_port_vlans); + g_test_add_func("/core/keyfile/invalid-option", test_invalid_option); return g_test_run(); } diff --git a/src/libnm-core-impl/tests/test-setting.c b/src/libnm-core-impl/tests/test-setting.c index b260ac37..788f218d 100644 --- a/src/libnm-core-impl/tests/test-setting.c +++ b/src/libnm-core-impl/tests/test-setting.c @@ -4565,6 +4565,12 @@ test_setting_metadata(void) == _nm_setting_property_to_dbus_fcn_direct); g_assert(sip->param_spec); g_assert(sip->param_spec->value_type == G_TYPE_BYTES); + } else if (sip->property_type->direct_type == NM_VALUE_TYPE_STRV) { + g_assert(g_variant_type_equal(sip->property_type->dbus_type, "as")); + g_assert(sip->property_type->to_dbus_fcn + == _nm_setting_property_to_dbus_fcn_direct); + g_assert(sip->param_spec); + g_assert(sip->param_spec->value_type == G_TYPE_STRV); } else g_assert_not_reached(); @@ -4653,7 +4659,12 @@ check_done:; } if (sip->property_type->from_dbus_fcn == _nm_setting_property_from_dbus_fcn_direct) { /* for the moment, all direct properties allow transformation. */ - g_assert(sip->property_type->from_dbus_direct_allow_transform); + if (NM_IN_SET(sip->property_type->direct_type, + NM_VALUE_TYPE_BYTES, + NM_VALUE_TYPE_STRV)) + g_assert(!sip->property_type->from_dbus_direct_allow_transform); + else + g_assert(sip->property_type->from_dbus_direct_allow_transform); } if (sip->property_type->from_dbus_fcn == _nm_setting_property_from_dbus_fcn_gprop) @@ -4763,10 +4774,12 @@ check_done:; g_assert(NM_IS_SETTING_VPN(setting)); g_assert_cmpstr(sip->name, ==, NM_SETTING_VPN_SECRETS); } else { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("secret %s.%s is of unexpected property type %s", nm_setting_get_name(setting), sip->name, g_type_name(sip->param_spec->value_type)); + NM_PRAGMA_WARNING_REENABLE } } } @@ -4889,12 +4902,14 @@ check_done:; /* the property-types with same content should all be shared. Here we have two that * are the same content, but different instances. Bug. */ + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("The identical property type for D-Bus type \"%s\" is used by: %s and %s. " "If a NMSettInfoPropertType is identical, it should be shared by creating " "a common instance of the property type", (const char *) pt->dbus_type, _PROP_IDX_OWNER(h_property_types, pt), _PROP_IDX_OWNER(h_property_types, pt_2)); + NM_PRAGMA_WARNING_REENABLE } } } diff --git a/src/libnm-core-intern/nm-core-internal.h b/src/libnm-core-intern/nm-core-internal.h index d9634b04..032f6a9a 100644 --- a/src/libnm-core-intern/nm-core-internal.h +++ b/src/libnm-core-intern/nm-core-internal.h @@ -189,14 +189,14 @@ NM_TERNARY_TO_OPTION_BOOL(NMTernary v) NMSetting **_nm_connection_get_settings_arr(NMConnection *connection); -typedef enum { /*< skip >*/ - NM_SETTING_PARSE_FLAGS_NONE = 0, - NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0, - NM_SETTING_PARSE_FLAGS_BEST_EFFORT = 1LL << 1, - NM_SETTING_PARSE_FLAGS_NORMALIZE = 1LL << 2, - - _NM_SETTING_PARSE_FLAGS_LAST, - NM_SETTING_PARSE_FLAGS_ALL = ((_NM_SETTING_PARSE_FLAGS_LAST - 1) << 1) - 1, +typedef enum /*< skip >*/ { + NM_SETTING_PARSE_FLAGS_NONE = 0, + NM_SETTING_PARSE_FLAGS_STRICT = 1LL << 0, + NM_SETTING_PARSE_FLAGS_BEST_EFFORT = 1LL << 1, + NM_SETTING_PARSE_FLAGS_NORMALIZE = 1LL << 2, + + _NM_SETTING_PARSE_FLAGS_LAST, + NM_SETTING_PARSE_FLAGS_ALL = ((_NM_SETTING_PARSE_FLAGS_LAST - 1) << 1) - 1, } NMSettingParseFlags; gboolean _nm_connection_replace_settings(NMConnection *connection, diff --git a/src/libnm-core-intern/nm-meta-setting-base-impl.h b/src/libnm-core-intern/nm-meta-setting-base-impl.h index ea4f85ff..12688659 100644 --- a/src/libnm-core-intern/nm-meta-setting-base-impl.h +++ b/src/libnm-core-intern/nm-meta-setting-base-impl.h @@ -38,20 +38,20 @@ * * 10: NMSettingUser */ -typedef enum { /*< skip >*/ - NM_SETTING_PRIORITY_INVALID = 0, - NM_SETTING_PRIORITY_CONNECTION = 1, - NM_SETTING_PRIORITY_HW_BASE = 2, - NM_SETTING_PRIORITY_HW_NON_BASE = 3, - NM_SETTING_PRIORITY_HW_AUX = 4, - NM_SETTING_PRIORITY_AUX = 5, - NM_SETTING_PRIORITY_IP = 6, - NM_SETTING_PRIORITY_USER = 10, +typedef enum /*< skip >*/ { + NM_SETTING_PRIORITY_INVALID = 0, + NM_SETTING_PRIORITY_CONNECTION = 1, + NM_SETTING_PRIORITY_HW_BASE = 2, + NM_SETTING_PRIORITY_HW_NON_BASE = 3, + NM_SETTING_PRIORITY_HW_AUX = 4, + NM_SETTING_PRIORITY_AUX = 5, + NM_SETTING_PRIORITY_IP = 6, + NM_SETTING_PRIORITY_USER = 10, } NMSettingPriority; /*****************************************************************************/ -typedef enum { +typedef enum _nm_packed { NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, @@ -92,6 +92,8 @@ typedef struct { extern const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[_NM_SETTING_802_1X_SCHEME_TYPE_NUM + 1]; +const NMSetting8021xSchemeVtable *nm_setting_8021x_scheme_vtable_by_setting_key(const char *key); + /*****************************************************************************/ typedef enum _nm_packed { diff --git a/src/libnm-core-public/nm-connection.h b/src/libnm-core-public/nm-connection.h index 081f115e..93061f25 100644 --- a/src/libnm-core-public/nm-connection.h +++ b/src/libnm-core-public/nm-connection.h @@ -122,15 +122,15 @@ NMSetting *nm_connection_get_setting_by_name(NMConnection *connection, const cha * These flags determine which properties are serialized when calling * nm_connection_to_dbus(). **/ -typedef enum { /*< flags >*/ - NM_CONNECTION_SERIALIZE_ALL = 0x00000000, - NM_CONNECTION_SERIALIZE_WITH_NON_SECRET = 0x00000001, - NM_CONNECTION_SERIALIZE_NO_SECRETS = 0x00000001, - NM_CONNECTION_SERIALIZE_WITH_SECRETS = 0x00000002, - NM_CONNECTION_SERIALIZE_ONLY_SECRETS = 0x00000002, - NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED = 0x00000004, - NM_CONNECTION_SERIALIZE_WITH_SECRETS_SYSTEM_OWNED = 0x00000008, - NM_CONNECTION_SERIALIZE_WITH_SECRETS_NOT_SAVED = 0x00000010, +typedef enum /*< flags >*/ { + NM_CONNECTION_SERIALIZE_ALL = 0x00000000, + NM_CONNECTION_SERIALIZE_WITH_NON_SECRET = 0x00000001, + NM_CONNECTION_SERIALIZE_NO_SECRETS = 0x00000001, + NM_CONNECTION_SERIALIZE_WITH_SECRETS = 0x00000002, + NM_CONNECTION_SERIALIZE_ONLY_SECRETS = 0x00000002, + NM_CONNECTION_SERIALIZE_WITH_SECRETS_AGENT_OWNED = 0x00000004, + NM_CONNECTION_SERIALIZE_WITH_SECRETS_SYSTEM_OWNED = 0x00000008, + NM_CONNECTION_SERIALIZE_WITH_SECRETS_NOT_SAVED = 0x00000010, } NMConnectionSerializationFlags; GVariant *nm_connection_to_dbus(NMConnection *connection, NMConnectionSerializationFlags flags); diff --git a/src/libnm-core-public/nm-dbus-interface.h b/src/libnm-core-public/nm-dbus-interface.h index 0d23c7d7..94622793 100644 --- a/src/libnm-core-public/nm-dbus-interface.h +++ b/src/libnm-core-public/nm-dbus-interface.h @@ -265,12 +265,12 @@ typedef enum { * * General device capability flags. **/ -typedef enum { /*< flags >*/ - NM_DEVICE_CAP_NONE = 0x00000000, - NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001, - NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002, - NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004, - NM_DEVICE_CAP_SRIOV = 0x00000008, +typedef enum /*< flags >*/ { + NM_DEVICE_CAP_NONE = 0x00000000, + NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001, + NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002, + NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004, + NM_DEVICE_CAP_SRIOV = 0x00000008, } NMDeviceCapabilities; /** @@ -292,21 +292,21 @@ typedef enum { /*< flags >*/ * * 802.11 specific device encryption and authentication capabilities. **/ -typedef enum { /*< flags >*/ - NM_WIFI_DEVICE_CAP_NONE = 0x00000000, - NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001, - NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002, - NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004, - NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008, - NM_WIFI_DEVICE_CAP_WPA = 0x00000010, - NM_WIFI_DEVICE_CAP_RSN = 0x00000020, - NM_WIFI_DEVICE_CAP_AP = 0x00000040, - NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080, - NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100, - NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, - NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, - NM_WIFI_DEVICE_CAP_MESH = 0x00001000, - NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, +typedef enum /*< flags >*/ { + NM_WIFI_DEVICE_CAP_NONE = 0x00000000, + NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001, + NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002, + NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004, + NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008, + NM_WIFI_DEVICE_CAP_WPA = 0x00000010, + NM_WIFI_DEVICE_CAP_RSN = 0x00000020, + NM_WIFI_DEVICE_CAP_AP = 0x00000040, + NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080, + NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100, + NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, + NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, + NM_WIFI_DEVICE_CAP_MESH = 0x00001000, + NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, } NMDeviceWifiCapabilities; /** @@ -320,12 +320,12 @@ typedef enum { /*< flags >*/ * * 802.11 access point flags. **/ -typedef enum { /*< underscore_name=nm_802_11_ap_flags, flags >*/ - NM_802_11_AP_FLAGS_NONE = 0x00000000, - NM_802_11_AP_FLAGS_PRIVACY = 0x00000001, - NM_802_11_AP_FLAGS_WPS = 0x00000002, - NM_802_11_AP_FLAGS_WPS_PBC = 0x00000004, - NM_802_11_AP_FLAGS_WPS_PIN = 0x00000008, +typedef enum /*< underscore_name=nm_802_11_ap_flags, flags >*/ { + NM_802_11_AP_FLAGS_NONE = 0x00000000, + NM_802_11_AP_FLAGS_PRIVACY = 0x00000001, + NM_802_11_AP_FLAGS_WPS = 0x00000002, + NM_802_11_AP_FLAGS_WPS_PBC = 0x00000004, + NM_802_11_AP_FLAGS_WPS_PIN = 0x00000008, } NM80211ApFlags; /** @@ -361,22 +361,22 @@ typedef enum { /*< underscore_name=nm_802_11_ap_flags, flags >*/ * the current security requirements of an access point as determined from the * access point's beacon. **/ -typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/ - NM_802_11_AP_SEC_NONE = 0x00000000, - NM_802_11_AP_SEC_PAIR_WEP40 = 0x00000001, - NM_802_11_AP_SEC_PAIR_WEP104 = 0x00000002, - NM_802_11_AP_SEC_PAIR_TKIP = 0x00000004, - NM_802_11_AP_SEC_PAIR_CCMP = 0x00000008, - NM_802_11_AP_SEC_GROUP_WEP40 = 0x00000010, - NM_802_11_AP_SEC_GROUP_WEP104 = 0x00000020, - NM_802_11_AP_SEC_GROUP_TKIP = 0x00000040, - NM_802_11_AP_SEC_GROUP_CCMP = 0x00000080, - NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x00000100, - NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200, - NM_802_11_AP_SEC_KEY_MGMT_SAE = 0x00000400, - NM_802_11_AP_SEC_KEY_MGMT_OWE = 0x00000800, - NM_802_11_AP_SEC_KEY_MGMT_OWE_TM = 0x00001000, - NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192 = 0x00002000, +typedef enum /*< underscore_name=nm_802_11_ap_security_flags, flags >*/ { + NM_802_11_AP_SEC_NONE = 0x00000000, + NM_802_11_AP_SEC_PAIR_WEP40 = 0x00000001, + NM_802_11_AP_SEC_PAIR_WEP104 = 0x00000002, + NM_802_11_AP_SEC_PAIR_TKIP = 0x00000004, + NM_802_11_AP_SEC_PAIR_CCMP = 0x00000008, + NM_802_11_AP_SEC_GROUP_WEP40 = 0x00000010, + NM_802_11_AP_SEC_GROUP_WEP104 = 0x00000020, + NM_802_11_AP_SEC_GROUP_TKIP = 0x00000040, + NM_802_11_AP_SEC_GROUP_CCMP = 0x00000080, + NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x00000100, + NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200, + NM_802_11_AP_SEC_KEY_MGMT_SAE = 0x00000400, + NM_802_11_AP_SEC_KEY_MGMT_OWE = 0x00000800, + NM_802_11_AP_SEC_KEY_MGMT_OWE_TM = 0x00001000, + NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192 = 0x00002000, } NM80211ApSecurityFlags; /** @@ -412,10 +412,10 @@ typedef enum { /*< underscore_name=nm_802_11_mode >*/ * #NMBluetoothCapabilities values indicate the usable capabilities of a * Bluetooth device. **/ -typedef enum { /*< flags >*/ - NM_BT_CAPABILITY_NONE = 0x00000000, - NM_BT_CAPABILITY_DUN = 0x00000001, - NM_BT_CAPABILITY_NAP = 0x00000002, +typedef enum /*< flags >*/ { + NM_BT_CAPABILITY_NONE = 0x00000000, + NM_BT_CAPABILITY_DUN = 0x00000001, + NM_BT_CAPABILITY_NAP = 0x00000002, } NMBluetoothCapabilities; /** @@ -435,13 +435,13 @@ typedef enum { /*< flags >*/ * specific access technologies the device supports use the ModemManager D-Bus * API. **/ -typedef enum { /*< flags >*/ - NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000, - NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001, - NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002, - NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004, - NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008, - NM_DEVICE_MODEM_CAPABILITY_5GNR = 0x00000040, +typedef enum /*< flags >*/ { + NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000, + NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001, + NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002, + NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004, + NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008, + NM_DEVICE_MODEM_CAPABILITY_5GNR = 0x00000040, } NMDeviceModemCapabilities; /* Note: the numeric values of NMDeviceModemCapabilities must be identical to the values * in MMModemCapability. See the G_STATIC_ASSERT() in nm-modem-broadband.c's get_capabilities(). */ @@ -834,16 +834,16 @@ typedef enum { * * #NMSecretAgentGetSecretsFlags values modify the behavior of a GetSecrets request. */ -typedef enum { /*< flags >*/ - NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0, - NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1, - NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2, - NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED = 0x4, - NM_SECRET_AGENT_GET_SECRETS_FLAG_WPS_PBC_ACTIVE = 0x8, +typedef enum /*< flags >*/ { + NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE = 0x0, + NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1, + NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW = 0x2, + NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED = 0x4, + NM_SECRET_AGENT_GET_SECRETS_FLAG_WPS_PBC_ACTIVE = 0x8, - /* Internal to NM; not part of the D-Bus API */ - NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000, - NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS = 0x40000000, + /* Internal to NM; not part of the D-Bus API */ + NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000, + NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS = 0x40000000, } NMSecretAgentGetSecretsFlags; /** @@ -962,20 +962,20 @@ typedef enum { * @NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS: during rollback, * by default externally added ports attached to bridge devices are preserved. * With this flag, the rollback detaches all external ports. - * This only has an effect for bridge ports. Before 1.38, 1.36.2, this was the default - * behavior. Since: 1.38, 1.36.2. + * This only has an effect for bridge ports. Before 1.38, this was the default + * behavior. Since: 1.38. * * The flags for CheckpointCreate call * * Since: 1.4 (gi flags generated since 1.12) */ -typedef enum { /*< flags >*/ - NM_CHECKPOINT_CREATE_FLAG_NONE = 0, - NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL = 0x01, - NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS = 0x02, - NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES = 0x04, - NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING = 0x08, - NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS = 0x10, +typedef enum /*< flags >*/ { + NM_CHECKPOINT_CREATE_FLAG_NONE = 0, + NM_CHECKPOINT_CREATE_FLAG_DESTROY_ALL = 0x01, + NM_CHECKPOINT_CREATE_FLAG_DELETE_NEW_CONNECTIONS = 0x02, + NM_CHECKPOINT_CREATE_FLAG_DISCONNECT_NEW_DEVICES = 0x04, + NM_CHECKPOINT_CREATE_FLAG_ALLOW_OVERLAPPING = 0x08, + NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS = 0x10, } NMCheckpointCreateFlags; /** @@ -989,11 +989,11 @@ typedef enum { /*< flags >*/ * * Since: 1.4 **/ -typedef enum { /*< skip >*/ - NM_ROLLBACK_RESULT_OK = 0, - NM_ROLLBACK_RESULT_ERR_NO_DEVICE = 1, - NM_ROLLBACK_RESULT_ERR_DEVICE_UNMANAGED = 2, - NM_ROLLBACK_RESULT_ERR_FAILED = 3, +typedef enum /*< skip >*/ { + NM_ROLLBACK_RESULT_OK = 0, + NM_ROLLBACK_RESULT_ERR_NO_DEVICE = 1, + NM_ROLLBACK_RESULT_ERR_DEVICE_UNMANAGED = 2, + NM_ROLLBACK_RESULT_ERR_FAILED = 3, } NMRollbackResult; /** @@ -1019,12 +1019,12 @@ typedef enum { /*< skip >*/ * * Since: 1.12 **/ -typedef enum { /*< flags >*/ - NM_SETTINGS_CONNECTION_FLAG_NONE = 0, - NM_SETTINGS_CONNECTION_FLAG_UNSAVED = 0x01, - NM_SETTINGS_CONNECTION_FLAG_NM_GENERATED = 0x02, - NM_SETTINGS_CONNECTION_FLAG_VOLATILE = 0x04, - NM_SETTINGS_CONNECTION_FLAG_EXTERNAL = 0x08, +typedef enum /*< flags >*/ { + NM_SETTINGS_CONNECTION_FLAG_NONE = 0, + NM_SETTINGS_CONNECTION_FLAG_UNSAVED = 0x01, + NM_SETTINGS_CONNECTION_FLAG_NM_GENERATED = 0x02, + NM_SETTINGS_CONNECTION_FLAG_VOLATILE = 0x04, + NM_SETTINGS_CONNECTION_FLAG_EXTERNAL = 0x08, } NMSettingsConnectionFlags; /** @@ -1048,17 +1048,17 @@ typedef enum { /*< flags >*/ * * Since: 1.10 **/ -typedef enum { /*< flags >*/ - NM_ACTIVATION_STATE_FLAG_NONE = 0, +typedef enum /*< flags >*/ { + NM_ACTIVATION_STATE_FLAG_NONE = 0, - NM_ACTIVATION_STATE_FLAG_IS_MASTER = 0x1, - NM_ACTIVATION_STATE_FLAG_IS_SLAVE = 0x2, - NM_ACTIVATION_STATE_FLAG_LAYER2_READY = 0x4, - NM_ACTIVATION_STATE_FLAG_IP4_READY = 0x8, - NM_ACTIVATION_STATE_FLAG_IP6_READY = 0x10, - NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES = 0x20, - NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY = 0x40, - NM_ACTIVATION_STATE_FLAG_EXTERNAL = 0x80, + NM_ACTIVATION_STATE_FLAG_IS_MASTER = 0x1, + NM_ACTIVATION_STATE_FLAG_IS_SLAVE = 0x2, + NM_ACTIVATION_STATE_FLAG_LAYER2_READY = 0x4, + NM_ACTIVATION_STATE_FLAG_IP4_READY = 0x8, + NM_ACTIVATION_STATE_FLAG_IP6_READY = 0x10, + NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES = 0x20, + NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY = 0x40, + NM_ACTIVATION_STATE_FLAG_EXTERNAL = 0x80, } NMActivationStateFlags; /** @@ -1075,11 +1075,11 @@ typedef enum { /*< flags >*/ * * Since: 1.20 */ -typedef enum { /*< flags >*/ - NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE = 0, - NM_SETTINGS_ADD_CONNECTION2_FLAG_TO_DISK = 0x1, - NM_SETTINGS_ADD_CONNECTION2_FLAG_IN_MEMORY = 0x2, - NM_SETTINGS_ADD_CONNECTION2_FLAG_BLOCK_AUTOCONNECT = 0x20, +typedef enum /*< flags >*/ { + NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE = 0, + NM_SETTINGS_ADD_CONNECTION2_FLAG_TO_DISK = 0x1, + NM_SETTINGS_ADD_CONNECTION2_FLAG_IN_MEMORY = 0x2, + NM_SETTINGS_ADD_CONNECTION2_FLAG_BLOCK_AUTOCONNECT = 0x20, } NMSettingsAddConnection2Flags; /** @@ -1131,15 +1131,15 @@ typedef enum { /*< flags >*/ * * Since: 1.12 */ -typedef enum { /*< flags >*/ - NM_SETTINGS_UPDATE2_FLAG_NONE = 0, - NM_SETTINGS_UPDATE2_FLAG_TO_DISK = 0x1, - NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY = 0x2, - NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED = 0x4, - NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY = 0x8, - NM_SETTINGS_UPDATE2_FLAG_VOLATILE = 0x10, - NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT = 0x20, - NM_SETTINGS_UPDATE2_FLAG_NO_REAPPLY = 0x40, +typedef enum /*< flags >*/ { + NM_SETTINGS_UPDATE2_FLAG_NONE = 0, + NM_SETTINGS_UPDATE2_FLAG_TO_DISK = 0x1, + NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY = 0x2, + NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_DETACHED = 0x4, + NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY_ONLY = 0x8, + NM_SETTINGS_UPDATE2_FLAG_VOLATILE = 0x10, + NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT = 0x20, + NM_SETTINGS_UPDATE2_FLAG_NO_REAPPLY = 0x40, } NMSettingsUpdate2Flags; /** @@ -1178,12 +1178,12 @@ typedef enum { * * Since: 1.22 */ -typedef enum { /*< flags >*/ - NM_MANAGER_RELOAD_FLAG_NONE = 0, /*< skip >*/ - NM_MANAGER_RELOAD_FLAG_CONF = 0x1, - NM_MANAGER_RELOAD_FLAG_DNS_RC = 0x2, - NM_MANAGER_RELOAD_FLAG_DNS_FULL = 0x4, - NM_MANAGER_RELOAD_FLAG_ALL = 0x7, /*< skip >*/ +typedef enum /*< flags >*/ { + NM_MANAGER_RELOAD_FLAG_NONE = 0, /*< skip >*/ + NM_MANAGER_RELOAD_FLAG_CONF = 0x1, + NM_MANAGER_RELOAD_FLAG_DNS_RC = 0x2, + NM_MANAGER_RELOAD_FLAG_DNS_FULL = 0x4, + NM_MANAGER_RELOAD_FLAG_ALL = 0x7, /*< skip >*/ } NMManagerReloadFlags; /** @@ -1205,15 +1205,15 @@ typedef enum { /*< flags >*/ * * Since: 1.22 */ -typedef enum { /*< flags >*/ - /* kernel flags */ - NM_DEVICE_INTERFACE_FLAG_NONE = 0, /*< skip >*/ - NM_DEVICE_INTERFACE_FLAG_UP = 0x1, - NM_DEVICE_INTERFACE_FLAG_LOWER_UP = 0x2, - NM_DEVICE_INTERFACE_FLAG_PROMISC = 0x4, - /* NM-specific flags */ - NM_DEVICE_INTERFACE_FLAG_CARRIER = 0x10000, - NM_DEVICE_INTERFACE_FLAG_LLDP_CLIENT_ENABLED = 0x20000, +typedef enum /*< flags >*/ { + /* kernel flags */ + NM_DEVICE_INTERFACE_FLAG_NONE = 0, /*< skip >*/ + NM_DEVICE_INTERFACE_FLAG_UP = 0x1, + NM_DEVICE_INTERFACE_FLAG_LOWER_UP = 0x2, + NM_DEVICE_INTERFACE_FLAG_PROMISC = 0x4, + /* NM-specific flags */ + NM_DEVICE_INTERFACE_FLAG_CARRIER = 0x10000, + NM_DEVICE_INTERFACE_FLAG_LLDP_CLIENT_ENABLED = 0x20000, } NMDeviceInterfaceFlags; /** @@ -1297,4 +1297,22 @@ typedef enum { NM_CLIENT_PERMISSION_RESULT_NO } NMClientPermissionResult; +/** + * NMRadioFlags: + * @NM_RADIO_FLAG_NONE: an alias for numeric zero, no flags set. + * @NM_RADIO_FLAG_WLAN_AVAILABLE: A Wireless LAN device or rfkill switch + * is detected in the system. + * @NM_RADIO_FLAG_WWAN_AVAILABLE: A Wireless WAN device or rfkill switch + * is detected in the system. + * + * Flags related to radio interfaces. + * + * Since: 1.38 + */ +typedef enum /*< flags >*/ { + NM_RADIO_FLAG_NONE = 0, + NM_RADIO_FLAG_WLAN_AVAILABLE = 0x1, + NM_RADIO_FLAG_WWAN_AVAILABLE = 0x2, +} NMRadioFlags; + #endif /* __NM_DBUS_INTERFACE_H__ */ diff --git a/src/libnm-core-public/nm-dbus-types.xml b/src/libnm-core-public/nm-dbus-types.xml index 653859e6..f28ac4cc 100644 --- a/src/libnm-core-public/nm-dbus-types.xml +++ b/src/libnm-core-public/nm-dbus-types.xml @@ -1650,7 +1650,7 @@ NM_CHECKPOINT_CREATE_FLAG_NO_PRESERVE_EXTERNAL_PORTS = 0x10 - during rollback, by default externally added ports attached to bridge devices are preserved. With this flag, the rollback detaches all external ports. This only has an effect for bridge ports. Before 1.38, 1.36.2, this was the default behavior. Since: 1.38, 1.36.2. + during rollback, by default externally added ports attached to bridge devices are preserved. With this flag, the rollback detaches all external ports. This only has an effect for bridge ports. Before 1.38, this was the default behavior. Since: 1.38. @@ -2188,4 +2188,39 @@ + + enum NMRadioFlags + + NMRadioFlags + + Flags related to radio interfaces.Since: 1.38 + + Values + + + + + + + + NM_RADIO_FLAG_NONE + = 0 + an alias for numeric zero, no flags set. + + + NM_RADIO_FLAG_WLAN_AVAILABLE + = 0x1 + A Wireless LAN device or rfkill switch is detected in the system. + + + NM_RADIO_FLAG_WWAN_AVAILABLE + = 0x2 + A Wireless WAN device or rfkill switch is detected in the system. + + + + + + + diff --git a/src/libnm-core-public/nm-keyfile.h b/src/libnm-core-public/nm-keyfile.h index 8f8b1f1b..80fd0043 100644 --- a/src/libnm-core-public/nm-keyfile.h +++ b/src/libnm-core-public/nm-keyfile.h @@ -21,8 +21,8 @@ G_BEGIN_DECLS * * Since: 1.30 */ -typedef enum { /*< flags >*/ - NM_KEYFILE_HANDLER_FLAGS_NONE = 0, +typedef enum /*< flags >*/ { + NM_KEYFILE_HANDLER_FLAGS_NONE = 0, } NMKeyfileHandlerFlags; /** diff --git a/src/libnm-core-public/nm-setting-8021x.h b/src/libnm-core-public/nm-setting-8021x.h index 2bd089da..93c78fa3 100644 --- a/src/libnm-core-public/nm-setting-8021x.h +++ b/src/libnm-core-public/nm-setting-8021x.h @@ -75,13 +75,13 @@ typedef enum { /*< underscore_name=nm_setting_802_1x_ck_scheme >*/ * * Since: 1.8 */ -typedef enum { /*< flags, underscore_name=nm_setting_802_1x_auth_flags >*/ - NM_SETTING_802_1X_AUTH_FLAGS_NONE = 0, - NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_DISABLE = 0x1, - NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_1_DISABLE = 0x2, - NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_2_DISABLE = 0x4, +typedef enum /*< underscore_name=nm_setting_802_1x_auth_flags, flags >*/ { + NM_SETTING_802_1X_AUTH_FLAGS_NONE = 0, + NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_DISABLE = 0x1, + NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_1_DISABLE = 0x2, + NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_2_DISABLE = 0x4, - NM_SETTING_802_1X_AUTH_FLAGS_ALL = 0x7, + NM_SETTING_802_1X_AUTH_FLAGS_ALL = 0x7, } NMSetting8021xAuthFlags; #define NM_TYPE_SETTING_802_1X (nm_setting_802_1x_get_type()) diff --git a/src/libnm-core-public/nm-setting-dcb.h b/src/libnm-core-public/nm-setting-dcb.h index ba702bd7..25676090 100644 --- a/src/libnm-core-public/nm-setting-dcb.h +++ b/src/libnm-core-public/nm-setting-dcb.h @@ -35,11 +35,11 @@ G_BEGIN_DECLS * * DCB feature flags. **/ -typedef enum { /*< flags >*/ - NM_SETTING_DCB_FLAG_NONE = 0x00000000, - NM_SETTING_DCB_FLAG_ENABLE = 0x00000001, - NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002, - NM_SETTING_DCB_FLAG_WILLING = 0x00000004 +typedef enum /*< flags >*/ { + NM_SETTING_DCB_FLAG_NONE = 0x00000000, + NM_SETTING_DCB_FLAG_ENABLE = 0x00000001, + NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002, + NM_SETTING_DCB_FLAG_WILLING = 0x00000004 } NMSettingDcbFlags; /** diff --git a/src/libnm-core-public/nm-setting-ip-config.h b/src/libnm-core-public/nm-setting-ip-config.h index 6a19bdb3..257a687a 100644 --- a/src/libnm-core-public/nm-setting-ip-config.h +++ b/src/libnm-core-public/nm-setting-ip-config.h @@ -31,9 +31,9 @@ G_BEGIN_DECLS * * Since: 1.22 */ -typedef enum { /*< flags >*/ - NM_IP_ADDRESS_CMP_FLAGS_NONE = 0, - NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS = 0x1, +typedef enum /*< flags >*/ { + NM_IP_ADDRESS_CMP_FLAGS_NONE = 0, + NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS = 0x1, } NMIPAddressCmpFlags; typedef struct NMIPAddress NMIPAddress; @@ -86,9 +86,9 @@ void nm_ip_route_ref(NMIPRoute *route); void nm_ip_route_unref(NMIPRoute *route); gboolean nm_ip_route_equal(NMIPRoute *route, NMIPRoute *other); -enum { /*< flags >*/ - NM_IP_ROUTE_EQUAL_CMP_FLAGS_NONE = 0, - NM_IP_ROUTE_EQUAL_CMP_FLAGS_WITH_ATTRS = 0x1, +enum /*< flags >*/ { + NM_IP_ROUTE_EQUAL_CMP_FLAGS_NONE = 0, + NM_IP_ROUTE_EQUAL_CMP_FLAGS_WITH_ATTRS = 0x1, }; NM_AVAILABLE_IN_1_10 @@ -277,12 +277,12 @@ gboolean nm_ip_routing_rule_validate(const NMIPRoutingRule *self, GError **error * * Since: 1.18 */ -typedef enum { /*< flags >*/ - NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE = 0, +typedef enum /*< flags >*/ { + NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE = 0, - NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET = 0x1, - NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 = 0x2, - NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE = 0x4, + NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET = 0x1, + NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6 = 0x2, + NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE = 0x4, } NMIPRoutingRuleAsStringFlags; NM_AVAILABLE_IN_1_18 @@ -386,14 +386,14 @@ typedef struct _NMSettingIPConfigClass NMSettingIPConfigClass; * * Since: 1.22 */ -typedef enum { /*< flags >*/ - NM_DHCP_HOSTNAME_FLAG_NONE = 0x0, +typedef enum /*< flags >*/ { + NM_DHCP_HOSTNAME_FLAG_NONE = 0x0, - NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE = 0x1, - NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED = 0x2, - NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE = 0x4, + NM_DHCP_HOSTNAME_FLAG_FQDN_SERV_UPDATE = 0x1, + NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED = 0x2, + NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE = 0x4, - NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS = 0x8, + NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS = 0x8, } NMDhcpHostnameFlags; diff --git a/src/libnm-core-public/nm-setting-ip-tunnel.h b/src/libnm-core-public/nm-setting-ip-tunnel.h index 4710411c..34920099 100644 --- a/src/libnm-core-public/nm-setting-ip-tunnel.h +++ b/src/libnm-core-public/nm-setting-ip-tunnel.h @@ -60,14 +60,14 @@ typedef struct _NMSettingIPTunnelClass NMSettingIPTunnelClass; * * Since: 1.12 */ -typedef enum { /*< flags, prefix=NM_IP_TUNNEL_FLAG >*/ - NM_IP_TUNNEL_FLAG_NONE = 0x0, - 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, +typedef enum /*< prefix=NM_IP_TUNNEL_FLAG, flags >*/ { + NM_IP_TUNNEL_FLAG_NONE = 0x0, + 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, } NMIPTunnelFlags; NM_AVAILABLE_IN_1_2 diff --git a/src/libnm-core-public/nm-setting-team.h b/src/libnm-core-public/nm-setting-team.h index 339830d3..63df4080 100644 --- a/src/libnm-core-public/nm-setting-team.h +++ b/src/libnm-core-public/nm-setting-team.h @@ -26,11 +26,11 @@ G_BEGIN_DECLS * @NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS: the arp_ping link watcher option * 'send_always' is enabled (set to true). */ -typedef enum { /*< flags >*/ - NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE = 0, /*< skip >*/ - NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE = 0x2, - NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE = 0x4, - NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS = 0x8, +typedef enum /*< flags >*/ { + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE = 0, /*< skip >*/ + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE = 0x2, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE = 0x4, + NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS = 0x8, } NMTeamLinkWatcherArpPingFlags; #define NM_TEAM_LINK_WATCHER_ETHTOOL "ethtool" diff --git a/src/libnm-core-public/nm-setting-vlan.h b/src/libnm-core-public/nm-setting-vlan.h index 10a95da0..a99d7256 100644 --- a/src/libnm-core-public/nm-setting-vlan.h +++ b/src/libnm-core-public/nm-setting-vlan.h @@ -42,12 +42,10 @@ typedef struct _NMSettingVlanClass NMSettingVlanClass; * A selector for traffic priority maps; these map Linux SKB priorities * to 802.1p priorities used in VLANs. **/ -/* clang-format off */ typedef enum { NM_VLAN_INGRESS_MAP, - NM_VLAN_EGRESS_MAP + NM_VLAN_EGRESS_MAP, } NMVlanPriorityMap; -/* clang-format on */ /** * NMVlanFlags: @@ -63,17 +61,17 @@ typedef enum { * * #NMVlanFlags values control the behavior of the VLAN interface. **/ -typedef enum { /*< flags >*/ +typedef enum /*< flags >*/ { - NM_VLAN_FLAG_REORDER_HEADERS = 0x1, - NM_VLAN_FLAG_GVRP = 0x2, - NM_VLAN_FLAG_LOOSE_BINDING = 0x4, - NM_VLAN_FLAG_MVRP = 0x8, + NM_VLAN_FLAG_REORDER_HEADERS = 0x1, + NM_VLAN_FLAG_GVRP = 0x2, + NM_VLAN_FLAG_LOOSE_BINDING = 0x4, + NM_VLAN_FLAG_MVRP = 0x8, - /* NOTE: if adding flags update nm-setting-vlan.c::verify() */ + /* NOTE: if adding flags update nm-setting-vlan.c::verify() */ - /* NOTE: these flags must correspond to the value from the kernel - * header files. */ + /* NOTE: these flags must correspond to the value from the kernel + * header files. */ } NMVlanFlags; #define NM_VLAN_FLAGS_ALL \ diff --git a/src/libnm-core-public/nm-setting-wired.h b/src/libnm-core-public/nm-setting-wired.h index ebe0d00a..5ad3b7f2 100644 --- a/src/libnm-core-public/nm-setting-wired.h +++ b/src/libnm-core-public/nm-setting-wired.h @@ -49,20 +49,20 @@ G_BEGIN_DECLS * * Since: 1.2 */ -typedef enum { /*< flags >*/ - NM_SETTING_WIRED_WAKE_ON_LAN_NONE = 0, /*< skip >*/ - 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, - - NM_SETTING_WIRED_WAKE_ON_LAN_ALL = 0x7E, /*< skip >*/ - - NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT = 0x1, - NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE = 0x8000, - NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = 0x8001, /*< skip >*/ +typedef enum /*< flags >*/ { + NM_SETTING_WIRED_WAKE_ON_LAN_NONE = 0, /*< skip >*/ + 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, + + NM_SETTING_WIRED_WAKE_ON_LAN_ALL = 0x7E, /*< skip >*/ + + NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT = 0x1, + NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE = 0x8000, + NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS = 0x8001, /*< skip >*/ } NMSettingWiredWakeOnLan; #define NM_SETTING_WIRED_PORT "port" diff --git a/src/libnm-core-public/nm-setting-wireless-security.h b/src/libnm-core-public/nm-setting-wireless-security.h index c9aec27d..e564204b 100644 --- a/src/libnm-core-public/nm-setting-wireless-security.h +++ b/src/libnm-core-public/nm-setting-wireless-security.h @@ -99,12 +99,12 @@ typedef enum { * * Since: 1.10 **/ -typedef enum { /*< flags >*/ - NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DEFAULT = 0x00000000, - NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DISABLED = 0x00000001, - NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_AUTO = 0x00000002, - NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PBC = 0x00000004, - NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PIN = 0x00000008, +typedef enum /*< flags >*/ { + NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DEFAULT = 0x00000000, + NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_DISABLED = 0x00000001, + NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_AUTO = 0x00000002, + NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PBC = 0x00000004, + NM_SETTING_WIRELESS_SECURITY_WPS_METHOD_PIN = 0x00000008, } NMSettingWirelessSecurityWpsMethod; /** diff --git a/src/libnm-core-public/nm-setting-wireless.h b/src/libnm-core-public/nm-setting-wireless.h index 0d4872fb..1f94060c 100644 --- a/src/libnm-core-public/nm-setting-wireless.h +++ b/src/libnm-core-public/nm-setting-wireless.h @@ -53,7 +53,7 @@ G_BEGIN_DECLS * Since: 1.12 */ /* clang-format off */ -typedef enum { /*< flags >*/ +typedef enum /*< flags >*/ { NM_SETTING_WIRELESS_WAKE_ON_WLAN_NONE = 0, /*< skip >*/ NM_SETTING_WIRELESS_WAKE_ON_WLAN_ANY = 0x2, NM_SETTING_WIRELESS_WAKE_ON_WLAN_DISCONNECT = 0x4, diff --git a/src/libnm-core-public/nm-setting.h b/src/libnm-core-public/nm-setting.h index ddf648bc..ee2076c3 100644 --- a/src/libnm-core-public/nm-setting.h +++ b/src/libnm-core-public/nm-setting.h @@ -57,13 +57,13 @@ G_BEGIN_DECLS * is to be stored and/or requested when it is needed. * **/ -typedef enum { /*< flags >*/ - NM_SETTING_SECRET_FLAG_NONE = 0x00000000, - NM_SETTING_SECRET_FLAG_AGENT_OWNED = 0x00000001, - NM_SETTING_SECRET_FLAG_NOT_SAVED = 0x00000002, - NM_SETTING_SECRET_FLAG_NOT_REQUIRED = 0x00000004 +typedef enum /*< flags >*/ { + NM_SETTING_SECRET_FLAG_NONE = 0x00000000, + NM_SETTING_SECRET_FLAG_AGENT_OWNED = 0x00000001, + NM_SETTING_SECRET_FLAG_NOT_SAVED = 0x00000002, + NM_SETTING_SECRET_FLAG_NOT_REQUIRED = 0x00000004 - /* NOTE: if adding flags, update nm-core-internal.h as well */ + /* NOTE: if adding flags, update nm-core-internal.h as well */ } NMSettingSecretFlags; /** diff --git a/src/libnm-core-public/nm-utils.h b/src/libnm-core-public/nm-utils.h index 0a7c7a81..5faed75a 100644 --- a/src/libnm-core-public/nm-utils.h +++ b/src/libnm-core-public/nm-utils.h @@ -111,10 +111,6 @@ GPtrArray *nm_utils_ip_routes_from_variant(GVariant *value, int family); char *nm_utils_uuid_generate(void); -gboolean nm_utils_file_is_certificate(const char *filename); -gboolean nm_utils_file_is_private_key(const char *filename, gboolean *out_encrypted); -gboolean nm_utils_file_is_pkcs12(const char *filename); - typedef gboolean (*NMUtilsFileSearchInPathsPredicate)(const char *filename, gpointer user_data); struct stat; diff --git a/src/libnm-core-public/nm-version-macros.h b/src/libnm-core-public/nm-version-macros.h index 0aff11b9..b10be844 100644 --- a/src/libnm-core-public/nm-version-macros.h +++ b/src/libnm-core-public/nm-version-macros.h @@ -22,7 +22,7 @@ * Evaluates to the minor version number of NetworkManager which this source * is compiled against. */ -#define NM_MINOR_VERSION (36) +#define NM_MINOR_VERSION (37) /** * NM_MICRO_VERSION: @@ -30,7 +30,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (4) +#define NM_MICRO_VERSION (92) /** * NM_CHECK_VERSION: @@ -70,6 +70,7 @@ #define NM_VERSION_1_32 (NM_ENCODE_VERSION (1, 32, 0)) #define NM_VERSION_1_34 (NM_ENCODE_VERSION (1, 34, 0)) #define NM_VERSION_1_36 (NM_ENCODE_VERSION (1, 36, 0)) +#define NM_VERSION_1_38 (NM_ENCODE_VERSION (1, 38, 0)) /* For releases, NM_API_VERSION is equal to NM_VERSION. * diff --git a/src/libnm-core-public/nm-version-macros.h.in b/src/libnm-core-public/nm-version-macros.h.in index 76dd4240..516aded5 100644 --- a/src/libnm-core-public/nm-version-macros.h.in +++ b/src/libnm-core-public/nm-version-macros.h.in @@ -70,6 +70,7 @@ #define NM_VERSION_1_32 (NM_ENCODE_VERSION (1, 32, 0)) #define NM_VERSION_1_34 (NM_ENCODE_VERSION (1, 34, 0)) #define NM_VERSION_1_36 (NM_ENCODE_VERSION (1, 36, 0)) +#define NM_VERSION_1_38 (NM_ENCODE_VERSION (1, 38, 0)) /* For releases, NM_API_VERSION is equal to NM_VERSION. * diff --git a/src/libnm-core-public/nm-version.h b/src/libnm-core-public/nm-version.h index d6f58924..ac98f868 100644 --- a/src/libnm-core-public/nm-version.h +++ b/src/libnm-core-public/nm-version.h @@ -313,6 +313,20 @@ #define NM_AVAILABLE_IN_1_36 #endif +#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_38 +#define NM_DEPRECATED_IN_1_38 G_DEPRECATED +#define NM_DEPRECATED_IN_1_38_FOR(f) G_DEPRECATED_FOR(f) +#else +#define NM_DEPRECATED_IN_1_38 +#define NM_DEPRECATED_IN_1_38_FOR(f) +#endif + +#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_38 +#define NM_AVAILABLE_IN_1_38 G_UNAVAILABLE(1, 38) +#else +#define NM_AVAILABLE_IN_1_38 +#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/src/libnm-crypto/README.md b/src/libnm-crypto/README.md new file mode 100644 index 00000000..5e83eb01 --- /dev/null +++ b/src/libnm-crypto/README.md @@ -0,0 +1,7 @@ +libnm-crypto +============ + +libnm-core has a dependency on crypto code (either backed by +"gnutls", "nss" or the "null" dummy implementation). + +libnm-core gets then statically linked into the daemon and into libnm.so. diff --git a/src/libnm-crypto/meson.build b/src/libnm-crypto/meson.build new file mode 100644 index 00000000..9134c929 --- /dev/null +++ b/src/libnm-crypto/meson.build @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +if crypto_nss_dep.found() + libnm_crypto_nss = static_library( + 'nm-crypto-nss', + sources: 'nm-crypto-nss.c', + include_directories: [ + top_inc, + src_inc, + ], + dependencies: [ + glib_dep, + crypto_nss_dep, + ], + ) +endif + +if crypto_gnutls_dep.found() + libnm_crypto_gnutls = static_library( + 'nm-crypto-gnutls', + sources: 'nm-crypto-gnutls.c', + include_directories: [ + top_inc, + src_inc, + ], + dependencies: [ + glib_dep, + crypto_gnutls_dep, + ], + ) +endif + +libnm_crypto_null = static_library( + 'nm-crypto-null', + sources: 'nm-crypto-null.c', + include_directories: [ + top_inc, + src_inc, + ], + dependencies: [ + glib_dep, + ], +) + +if crypto == 'nss' + libnm_crypto_impl = libnm_crypto_nss +elif crypto == 'gnutls' + libnm_crypto_impl = libnm_crypto_gnutls +else + assert(crypto == 'null', 'Unexpected setting "crypto=' + crypto + '"') + libnm_crypto_impl = libnm_crypto_null +endif + +libnm_crypto = static_library( + 'nm-crypto', + sources: [ + 'nm-crypto.c', + ], + include_directories: [ + top_inc, + src_inc, + ], + link_with: [ + libnm_crypto_impl, + ], + dependencies: [ + glib_dep, + ], +) diff --git a/src/libnm-crypto/nm-crypto-gnutls.c b/src/libnm-crypto/nm-crypto-gnutls.c new file mode 100644 index 00000000..60adf4d3 --- /dev/null +++ b/src/libnm-crypto/nm-crypto-gnutls.c @@ -0,0 +1,414 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Dan Williams + * Copyright (C) 2007 - 2015 Red Hat, Inc. + */ + +#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-crypto-impl.h" + +#include +#include +#include +#include + +#include "libnm-glib-aux/nm-secret-utils.h" + +/*****************************************************************************/ + +static gboolean +_get_cipher_info(NMCryptoCipherType cipher, int *out_cipher_mech, guint8 *out_real_iv_len) +{ + static const int cipher_mechs[] = { + [NM_CRYPTO_CIPHER_DES_EDE3_CBC] = GNUTLS_CIPHER_3DES_CBC, + [NM_CRYPTO_CIPHER_DES_CBC] = GNUTLS_CIPHER_DES_CBC, + [NM_CRYPTO_CIPHER_AES_128_CBC] = GNUTLS_CIPHER_AES_128_CBC, + [NM_CRYPTO_CIPHER_AES_192_CBC] = GNUTLS_CIPHER_AES_192_CBC, + [NM_CRYPTO_CIPHER_AES_256_CBC] = GNUTLS_CIPHER_AES_256_CBC, + }; + + g_return_val_if_fail(_NM_INT_NOT_NEGATIVE(cipher) + && (gsize) cipher < G_N_ELEMENTS(cipher_mechs), + FALSE); + + if (cipher_mechs[cipher] == 0) + return FALSE; + + NM_SET_OUT(out_cipher_mech, cipher_mechs[cipher]); + NM_SET_OUT(out_real_iv_len, nm_crypto_cipher_get_info(cipher)->real_iv_len); + return TRUE; +} + +/*****************************************************************************/ + +gboolean +_nm_crypto_init(GError **error) +{ + static gboolean initialized = FALSE; + + if (initialized) + return TRUE; + + if (gnutls_global_init() != 0) { + gnutls_global_deinit(); + g_set_error_literal(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Failed to initialize the crypto engine.")); + return FALSE; + } + + initialized = TRUE; + return TRUE; +} + +/*****************************************************************************/ + +guint8 * +_nmtst_crypto_decrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + gnutls_cipher_hd_t ctx; + gnutls_datum_t key_dt, iv_dt; + int err; + int cipher_mech; + nm_auto_clear_secret_ptr NMSecretPtr output = {0}; + guint8 pad_i, pad_len; + guint8 real_iv_len; + + if (!_get_cipher_info(cipher, &cipher_mech, &real_iv_len)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_UNKNOWN_CIPHER, + _("Unsupported key cipher for decryption")); + return NULL; + } + + if (!_nm_crypto_init(error)) + return NULL; + + if (iv_len < real_iv_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Invalid IV length (must be at least %u)."), + (guint) real_iv_len); + return NULL; + } + + output.len = data_len; + output.bin = g_malloc(data_len); + + key_dt.data = (unsigned char *) key; + key_dt.size = key_len; + iv_dt.data = (unsigned char *) iv; + iv_dt.size = iv_len; + + err = gnutls_cipher_init(&ctx, cipher_mech, &key_dt, &iv_dt); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to initialize the decryption cipher context: %s (%s)"), + gnutls_strerror_name(err), + gnutls_strerror(err)); + return NULL; + } + + err = gnutls_cipher_decrypt2(ctx, data, data_len, output.bin, output.len); + + gnutls_cipher_deinit(ctx); + + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key: %s (%s)"), + gnutls_strerror_name(err), + gnutls_strerror(err)); + return NULL; + } + + pad_len = output.len > 0 ? output.bin[output.len - 1] : 0; + + /* Check if the padding at the end of the decrypted data is valid */ + if (pad_len == 0 || pad_len > real_iv_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key: unexpected padding length.")); + return NULL; + } + + /* Validate tail padding; last byte is the padding size, and all pad bytes + * should contain the padding size. + */ + for (pad_i = 1; pad_i <= pad_len; ++pad_i) { + if (output.bin[data_len - pad_i] != pad_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key.")); + return NULL; + } + } + + *out_len = output.len - pad_len; + return g_steal_pointer(&output.bin); +} + +guint8 * +_nmtst_crypto_encrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + gnutls_cipher_hd_t ctx; + gnutls_datum_t key_dt, iv_dt; + int err; + int cipher_mech; + nm_auto_clear_secret_ptr NMSecretPtr output = {0}; + nm_auto_clear_secret_ptr NMSecretPtr padded_buf = {0}; + gsize i, pad_len; + + nm_assert(iv_len); + + if (cipher == NM_CRYPTO_CIPHER_DES_CBC || !_get_cipher_info(cipher, &cipher_mech, NULL)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_UNKNOWN_CIPHER, + _("Unsupported key cipher for encryption")); + return NULL; + } + + if (!_nm_crypto_init(error)) + return NULL; + + key_dt.data = (unsigned char *) key; + key_dt.size = key_len; + iv_dt.data = (unsigned char *) iv; + iv_dt.size = iv_len; + + err = gnutls_cipher_init(&ctx, cipher_mech, &key_dt, &iv_dt); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to initialize the encryption cipher context: %s (%s)"), + gnutls_strerror_name(err), + gnutls_strerror(err)); + return NULL; + } + + /* If data_len % ivlen == 0, then we add another complete block + * onto the end so that the decrypter knows there's padding. + */ + pad_len = iv_len - (data_len % iv_len); + + padded_buf.len = data_len + pad_len; + padded_buf.bin = g_malloc(padded_buf.len); + memcpy(padded_buf.bin, data, data_len); + for (i = 0; i < pad_len; i++) + padded_buf.bin[data_len + i] = (guint8) (pad_len & 0xFF); + + output.len = padded_buf.len; + output.bin = g_malloc(output.len); + + err = gnutls_cipher_encrypt2(ctx, padded_buf.bin, padded_buf.len, output.bin, output.len); + + gnutls_cipher_deinit(ctx); + + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to encrypt the data: %s (%s)"), + gnutls_strerror_name(err), + gnutls_strerror(err)); + return NULL; + } + + *out_len = output.len; + return g_steal_pointer(&output.bin); +} + +gboolean +_nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error) +{ + gnutls_x509_crt_t der; + gnutls_datum_t dt; + int err; + + if (!_nm_crypto_init(error)) + return FALSE; + + err = gnutls_x509_crt_init(&der); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Error initializing certificate data: %s"), + gnutls_strerror(err)); + return FALSE; + } + + /* Try DER first */ + dt.data = (unsigned char *) data; + dt.size = len; + err = gnutls_x509_crt_import(der, &dt, GNUTLS_X509_FMT_DER); + if (err == GNUTLS_E_SUCCESS) { + gnutls_x509_crt_deinit(der); + return TRUE; + } + + /* And PEM next */ + err = gnutls_x509_crt_import(der, &dt, GNUTLS_X509_FMT_PEM); + gnutls_x509_crt_deinit(der); + if (err == GNUTLS_E_SUCCESS) + return TRUE; + + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Couldn't decode certificate: %s"), + gnutls_strerror(err)); + return FALSE; +} + +gboolean +_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error) +{ + gnutls_pkcs12_t p12; + gnutls_datum_t dt; + int err; + + g_return_val_if_fail(data != NULL, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + dt.data = (unsigned char *) data; + dt.size = data_len; + + err = gnutls_pkcs12_init(&p12); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Couldn't initialize PKCS#12 decoder: %s"), + gnutls_strerror(err)); + return FALSE; + } + + /* DER first */ + err = gnutls_pkcs12_import(p12, &dt, GNUTLS_X509_FMT_DER, 0); + if (err < 0) { + /* PEM next */ + err = gnutls_pkcs12_import(p12, &dt, GNUTLS_X509_FMT_PEM, 0); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Couldn't decode PKCS#12 file: %s"), + gnutls_strerror(err)); + gnutls_pkcs12_deinit(p12); + return FALSE; + } + } + + err = gnutls_pkcs12_verify_mac(p12, password); + if (err != GNUTLS_E_SUCCESS) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Couldn't verify PKCS#12 file: %s"), + gnutls_strerror(err)); + gnutls_pkcs12_deinit(p12); + return FALSE; + } + + gnutls_pkcs12_deinit(p12); + + return TRUE; +} + +gboolean +_nm_crypto_verify_pkcs8(const guint8 *data, + gsize data_len, + gboolean is_encrypted, + const char *password, + GError **error) +{ + gnutls_x509_privkey_t p8; + gnutls_datum_t dt; + int err; + + g_return_val_if_fail(data != NULL, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + err = gnutls_x509_privkey_init(&p8); + if (err < 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Couldn't initialize PKCS#8 decoder: %s"), + gnutls_strerror(err)); + return FALSE; + } + + dt.data = (unsigned char *) data; + dt.size = data_len; + + err = gnutls_x509_privkey_import_pkcs8(p8, + &dt, + GNUTLS_X509_FMT_DER, + is_encrypted ? password : NULL, + is_encrypted ? 0 : GNUTLS_PKCS_PLAIN); + + gnutls_x509_privkey_deinit(p8); + + if (err < 0) { + if (err == GNUTLS_E_UNKNOWN_CIPHER_TYPE) { + /* HACK: gnutls < 3.5.4 doesn't support all the cipher types that openssl + * can use with PKCS#8, so if we encounter one, we have to assume + * the given password works. gnutls needs to unsuckify, apparently. + * Specifically, by default openssl uses pbeWithMD5AndDES-CBC + * which gnutls does not support. + */ + } else { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Couldn't decode PKCS#8 file: %s"), + gnutls_strerror(err)); + return FALSE; + } + } + + return TRUE; +} + +gboolean +_nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) +{ + if (!_nm_crypto_init(error)) + return FALSE; + + gnutls_rnd(GNUTLS_RND_RANDOM, buffer, buffer_len); + return TRUE; +} diff --git a/src/libnm-crypto/nm-crypto-impl.h b/src/libnm-crypto/nm-crypto-impl.h new file mode 100644 index 00000000..0b7c14dc --- /dev/null +++ b/src/libnm-crypto/nm-crypto-impl.h @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Dan Williams + * Copyright (C) 2007 - 2018 Red Hat, Inc. + */ + +#ifndef __NM_CRYPTO_IMPL_H__ +#define __NM_CRYPTO_IMPL_H__ + +#include "nm-crypto.h" +#include "libnm-base/nm-base.h" + +gboolean _nm_crypto_init(GError **error); + +gboolean _nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error); + +gboolean _nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error); + +gboolean +_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error); + +gboolean _nm_crypto_verify_pkcs8(const guint8 *data, + gsize data_len, + gboolean is_encrypted, + const char *password, + GError **error); + +/*****************************************************************************/ + +guint8 *_nmtst_crypto_encrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error); + +guint8 *_nmtst_crypto_decrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error); + +#endif /* __NM_CRYPTO_IMPL_H__ */ diff --git a/src/libnm-crypto/nm-crypto-nss.c b/src/libnm-crypto/nm-crypto-nss.c new file mode 100644 index 00000000..b31ca55e --- /dev/null +++ b/src/libnm-crypto/nm-crypto-nss.c @@ -0,0 +1,552 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Dan Williams + * Copyright (C) 2007 - 2009 Red Hat, Inc. + */ + +#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-crypto-impl.h" + +NM_PRAGMA_WARNING_DISABLE("-Wstrict-prototypes") +#include +#include +#include +#include +#include +#include +#include +#include +#include +NM_PRAGMA_WARNING_REENABLE + +#include "libnm-glib-aux/nm-secret-utils.h" +#include "libnm-base/nm-base.h" + +/*****************************************************************************/ + +static gboolean +_get_cipher_info(NMCryptoCipherType cipher, + CK_MECHANISM_TYPE *out_cipher_mech, + guint8 *out_real_iv_len) +{ + static const CK_MECHANISM_TYPE cipher_mechs[] = { + [NM_CRYPTO_CIPHER_DES_EDE3_CBC] = CKM_DES3_CBC_PAD, + [NM_CRYPTO_CIPHER_DES_CBC] = CKM_DES_CBC_PAD, + [NM_CRYPTO_CIPHER_AES_128_CBC] = CKM_AES_CBC_PAD, + [NM_CRYPTO_CIPHER_AES_192_CBC] = CKM_AES_CBC_PAD, + [NM_CRYPTO_CIPHER_AES_256_CBC] = CKM_AES_CBC_PAD, + }; + + g_return_val_if_fail(_NM_INT_NOT_NEGATIVE(cipher) + && (gsize) cipher < G_N_ELEMENTS(cipher_mechs), + FALSE); + + if (!cipher_mechs[cipher]) + return FALSE; + + NM_SET_OUT(out_cipher_mech, cipher_mechs[cipher]); + NM_SET_OUT(out_real_iv_len, nm_crypto_cipher_get_info(cipher)->real_iv_len); + return TRUE; +} + +/*****************************************************************************/ + +gboolean +_nm_crypto_init(GError **error) +{ + static gboolean initialized = FALSE; + SECStatus ret; + + if (initialized) + return TRUE; + + PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 1); + ret = NSS_NoDB_Init(NULL); + if (ret != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Failed to initialize the crypto engine: %d."), + PR_GetError()); + PR_Cleanup(); + return FALSE; + } + + SEC_PKCS12EnableCipher(PKCS12_RC4_40, 1); + SEC_PKCS12EnableCipher(PKCS12_RC4_128, 1); + SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_40, 1); + SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_128, 1); + SEC_PKCS12EnableCipher(PKCS12_DES_56, 1); + SEC_PKCS12EnableCipher(PKCS12_DES_EDE3_168, 1); + SEC_PKCS12SetPreferredCipher(PKCS12_DES_EDE3_168, 1); + + initialized = TRUE; + return TRUE; +} + +guint8 * +_nmtst_crypto_decrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + CK_MECHANISM_TYPE cipher_mech; + PK11SlotInfo *slot = NULL; + SECItem key_item; + PK11SymKey *sym_key = NULL; + SECItem *sec_param = NULL; + PK11Context *ctx = NULL; + nm_auto_clear_secret_ptr NMSecretPtr output = {0}; + SECStatus s; + gboolean success = FALSE; + int decrypted_len = 0; + unsigned extra = 0; + unsigned pad_len = 0; + guint32 i; + guint8 real_iv_len; + + if (!_get_cipher_info(cipher, &cipher_mech, &real_iv_len)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_UNKNOWN_CIPHER, + _("Unsupported key cipher for decryption")); + return NULL; + } + + if (iv_len < real_iv_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Invalid IV length (must be at least %u)."), + (guint) real_iv_len); + return NULL; + } + + if (!_nm_crypto_init(error)) + return NULL; + + slot = PK11_GetBestSlot(cipher_mech, NULL); + if (!slot) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Failed to initialize the decryption cipher slot.")); + goto out; + } + + key_item.data = (unsigned char *) key; + key_item.len = key_len; + sym_key = PK11_ImportSymKey(slot, cipher_mech, PK11_OriginUnwrap, CKA_DECRYPT, &key_item, NULL); + if (!sym_key) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to set symmetric key for decryption.")); + goto out; + } + + key_item.data = (unsigned char *) iv; + key_item.len = real_iv_len; + sec_param = PK11_ParamFromIV(cipher_mech, &key_item); + if (!sec_param) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to set IV for decryption.")); + goto out; + } + + ctx = PK11_CreateContextBySymKey(cipher_mech, CKA_DECRYPT, sym_key, sec_param); + if (!ctx) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to initialize the decryption context.")); + goto out; + } + + output.len = data_len; + output.bin = g_malloc(data_len); + + s = PK11_CipherOp(ctx, + (unsigned char *) output.bin, + &decrypted_len, + output.len, + data, + data_len); + if (s != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key: %d."), + PORT_GetError()); + goto out; + } + + if (decrypted_len > data_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key: decrypted data too large.")); + goto out; + } + + s = PK11_DigestFinal(ctx, + (unsigned char *) &output.bin[decrypted_len], + &extra, + data_len - decrypted_len); + if (s != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to finalize decryption of the private key: %d."), + PORT_GetError()); + goto out; + } + + decrypted_len += extra; + pad_len = data_len - decrypted_len; + + /* Check if the padding at the end of the decrypted data is valid */ + if (pad_len == 0 || pad_len > real_iv_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key: unexpected padding length.")); + goto out; + } + + /* Validate tail padding; last byte is the padding size, and all pad bytes + * should contain the padding size. + */ + for (i = pad_len; i > 0; i--) { + if (output.bin[data_len - i] != pad_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Failed to decrypt the private key.")); + goto out; + } + } + + success = TRUE; + +out: + if (ctx) + PK11_DestroyContext(ctx, PR_TRUE); + if (sym_key) + PK11_FreeSymKey(sym_key); + if (sec_param) + SECITEM_FreeItem(sec_param, PR_TRUE); + if (slot) + PK11_FreeSlot(slot); + + if (!success) + return NULL; + + if (decrypted_len < output.len) + nm_explicit_bzero(&output.bin[decrypted_len], output.len - decrypted_len); + *out_len = decrypted_len; + return g_steal_pointer(&output.bin); +} + +guint8 * +_nmtst_crypto_encrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + SECStatus ret; + CK_MECHANISM_TYPE cipher_mech = CKM_DES3_CBC_PAD; + PK11SlotInfo *slot = NULL; + SECItem key_item = {.data = (unsigned char *) key, .len = key_len}; + SECItem iv_item = {.data = (unsigned char *) iv, .len = iv_len}; + PK11SymKey *sym_key = NULL; + SECItem *sec_param = NULL; + PK11Context *ctx = NULL; + nm_auto_clear_secret_ptr NMSecretPtr padded_buf = {0}; + nm_auto_clear_secret_ptr NMSecretPtr output = {0}; + int encrypted_len = 0, i; + gboolean success = FALSE; + gsize pad_len; + + if (cipher == NM_CRYPTO_CIPHER_DES_CBC || !_get_cipher_info(cipher, &cipher_mech, NULL)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_UNKNOWN_CIPHER, + _("Unsupported key cipher for encryption")); + return NULL; + } + + if (!_nm_crypto_init(error)) + return NULL; + + slot = PK11_GetBestSlot(cipher_mech, NULL); + if (!slot) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Failed to initialize the encryption cipher slot.")); + return NULL; + } + + sym_key = PK11_ImportSymKey(slot, cipher_mech, PK11_OriginUnwrap, CKA_ENCRYPT, &key_item, NULL); + if (!sym_key) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to set symmetric key for encryption.")); + goto out; + } + + sec_param = PK11_ParamFromIV(cipher_mech, &iv_item); + if (!sec_param) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to set IV for encryption.")); + goto out; + } + + ctx = PK11_CreateContextBySymKey(cipher_mech, CKA_ENCRYPT, sym_key, sec_param); + if (!ctx) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to initialize the encryption context.")); + goto out; + } + + /* If data->len % ivlen == 0, then we add another complete block + * onto the end so that the decrypter knows there's padding. + */ + pad_len = iv_len - (data_len % iv_len); + + padded_buf.len = data_len + pad_len; + padded_buf.bin = g_malloc(padded_buf.len); + + memcpy(padded_buf.bin, data, data_len); + for (i = 0; i < pad_len; i++) + padded_buf.bin[data_len + i] = (guint8) (pad_len & 0xFF); + + output.len = padded_buf.len; + output.bin = g_malloc(output.len); + + ret = + PK11_CipherOp(ctx, output.bin, &encrypted_len, output.len, padded_buf.bin, padded_buf.len); + if (ret != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Failed to encrypt: %d."), + PORT_GetError()); + goto out; + } + + if (encrypted_len != output.len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_ENCRYPTION_FAILED, + _("Unexpected amount of data after encrypting.")); + goto out; + } + + success = TRUE; + +out: + if (ctx) + PK11_DestroyContext(ctx, PR_TRUE); + if (sec_param) + SECITEM_FreeItem(sec_param, PR_TRUE); + if (sym_key) + PK11_FreeSymKey(sym_key); + if (slot) + PK11_FreeSlot(slot); + + if (!success) + return NULL; + + *out_len = output.len; + return g_steal_pointer(&output.bin); +} + +gboolean +_nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error) +{ + CERTCertificate *cert; + + if (!_nm_crypto_init(error)) + return FALSE; + + /* Try DER/PEM first */ + cert = CERT_DecodeCertFromPackage((char *) data, len); + if (!cert) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Couldn't decode certificate: %d"), + PORT_GetError()); + return FALSE; + } + + CERT_DestroyCertificate(cert); + return TRUE; +} + +gboolean +_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error) +{ + SEC_PKCS12DecoderContext *p12ctx = NULL; + SECItem pw = {0}; + PK11SlotInfo *slot = NULL; + SECStatus s; + gboolean success = FALSE; + + g_return_val_if_fail(!error || !*error, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + /* PKCS#12 passwords are apparently UCS2 BIG ENDIAN, and NSS doesn't do + * any conversions for us. + */ + if (password && *password) { + nm_auto_clear_secret_ptr NMSecretPtr ucs2_password = {0}; + + if (g_utf8_validate(password, -1, NULL)) { + long ucs2_chars; + + ucs2_password.bin = + (guint8 *) g_utf8_to_utf16(password, strlen(password), NULL, &ucs2_chars, NULL); + + /* cannot fail, because password is valid UTF-8*/ + nm_assert(ucs2_password.bin && ucs2_chars > 0); + + ucs2_password.len = ucs2_chars * 2; + } + + if (!ucs2_password.bin || ucs2_password.len == 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_PASSWORD, + _("Password must be UTF-8")); + return FALSE; + } + + pw.data = PORT_ZAlloc(ucs2_password.len + 2); + memcpy(pw.data, ucs2_password.bin, ucs2_password.len); + pw.len = ucs2_password.len + 2; + +#if __BYTE_ORDER == __LITTLE_ENDIAN + { + guint16 *p, *p_end; + + p_end = (guint16 *) &(((guint8 *) pw.data)[ucs2_password.len]); + for (p = (guint16 *) pw.data; p < p_end; p++) + *p = GUINT16_SWAP_LE_BE(*p); + } +#endif + } + + slot = PK11_GetInternalKeySlot(); + if (!slot) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Couldn't initialize slot")); + goto out; + } + + p12ctx = SEC_PKCS12DecoderStart(&pw, slot, NULL, NULL, NULL, NULL, NULL, NULL); + if (!p12ctx) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Couldn't initialize PKCS#12 decoder: %d"), + PORT_GetError()); + goto out; + } + + s = SEC_PKCS12DecoderUpdate(p12ctx, (guint8 *) data, data_len); + if (s != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Couldn't decode PKCS#12 file: %d"), + PORT_GetError()); + goto out; + } + + s = SEC_PKCS12DecoderVerify(p12ctx); + if (s != SECSuccess) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_DECRYPTION_FAILED, + _("Couldn't verify PKCS#12 file: %d"), + PORT_GetError()); + goto out; + } + + success = TRUE; + +out: + if (p12ctx) + SEC_PKCS12DecoderFinish(p12ctx); + if (slot) + PK11_FreeSlot(slot); + + if (pw.data) + SECITEM_ZfreeItem(&pw, PR_FALSE); + + nm_assert(!error || (success == (!*error))); + return success; +} + +gboolean +_nm_crypto_verify_pkcs8(const guint8 *data, + gsize data_len, + gboolean is_encrypted, + const char *password, + GError **error) +{ + g_return_val_if_fail(data != NULL, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + /* NSS apparently doesn't do PKCS#8 natively, but you have to put the + * PKCS#8 key into a PKCS#12 file and import that?? So until we figure + * all that out, we can only assume the password is valid. + */ + return TRUE; +} + +gboolean +_nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) +{ + SECStatus s; + + if (!_nm_crypto_init(error)) + return FALSE; + + s = PK11_GenerateRandom(buffer, buffer_len); + if (s != SECSuccess) { + g_set_error_literal(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Could not generate random data.")); + return FALSE; + } + return TRUE; +} diff --git a/src/libnm-crypto/nm-crypto-null.c b/src/libnm-crypto/nm-crypto-null.c new file mode 100644 index 00000000..6f6c7f28 --- /dev/null +++ b/src/libnm-crypto/nm-crypto-null.c @@ -0,0 +1,103 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Christian Eggers + * Copyright (C) 2020 - 2022 ARRI Lighting + */ + +#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-crypto-impl.h" + +#include "libnm-glib-aux/nm-secret-utils.h" + +/*****************************************************************************/ + +gboolean +_nm_crypto_init(GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return FALSE; +} + +guint8 * +_nmtst_crypto_decrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return NULL; +} + +guint8 * +_nmtst_crypto_encrypt(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const guint8 *iv, + gsize iv_len, + const guint8 *key, + gsize key_len, + gsize *out_len, + GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return NULL; +} + +gboolean +_nm_crypto_verify_x509(const guint8 *data, gsize len, GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return FALSE; +} + +gboolean +_nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *password, GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return FALSE; +} + +gboolean +_nm_crypto_verify_pkcs8(const guint8 *data, + gsize data_len, + gboolean is_encrypted, + const char *password, + GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return FALSE; +} + +gboolean +_nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) +{ + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_FAILED, + _("Compiled without crypto support.")); + return FALSE; +} diff --git a/src/libnm-crypto/nm-crypto.c b/src/libnm-crypto/nm-crypto.c new file mode 100644 index 00000000..69d2b53f --- /dev/null +++ b/src/libnm-crypto/nm-crypto.c @@ -0,0 +1,1063 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Dan Williams + * Copyright (C) 2007 - 2018 Red Hat, Inc. + */ + +#include "libnm-glib-aux/nm-default-glib-i18n-lib.h" + +#include "nm-crypto.h" + +#include +#include +#include + +#include "libnm-glib-aux/nm-secret-utils.h" +#include "libnm-glib-aux/nm-io-utils.h" + +#include "nm-crypto-impl.h" + +/*****************************************************************************/ + +#define PEM_RSA_KEY_BEGIN "-----BEGIN RSA PRIVATE KEY-----" +#define PEM_RSA_KEY_END "-----END RSA PRIVATE KEY-----" + +#define PEM_DSA_KEY_BEGIN "-----BEGIN DSA PRIVATE KEY-----" +#define PEM_DSA_KEY_END "-----END DSA PRIVATE KEY-----" + +#define PEM_CERT_BEGIN "-----BEGIN CERTIFICATE-----" +#define PEM_CERT_END "-----END CERTIFICATE-----" + +#define PEM_PKCS8_ENC_KEY_BEGIN "-----BEGIN ENCRYPTED PRIVATE KEY-----" +#define PEM_PKCS8_ENC_KEY_END "-----END ENCRYPTED PRIVATE KEY-----" + +#define PEM_PKCS8_DEC_KEY_BEGIN "-----BEGIN PRIVATE KEY-----" +#define PEM_PKCS8_DEC_KEY_END "-----END PRIVATE KEY-----" + +#define PEM_TPM2_WRAPPED_KEY_BEGIN "-----BEGIN TSS2 PRIVATE KEY-----" +#define PEM_TPM2_WRAPPED_KEY_END "-----END TSS2 PRIVATE KEY-----" + +#define PEM_TPM2_OLD_WRAPPED_KEY_BEGIN "-----BEGIN TSS2 KEY BLOB-----" +#define PEM_TPM2_OLD_WRAPPED_KEY_END "-----END TSS2 KEY BLOB-----" + +/*****************************************************************************/ + +static const NMCryptoCipherInfo cipher_infos[] = { +#define _CI(_cipher, _name, _digest_len, _real_iv_len) \ + [(_cipher) -1] = {.cipher = _cipher, \ + .name = ""_name \ + "", \ + .digest_len = _digest_len, \ + .real_iv_len = _real_iv_len} + _CI(NM_CRYPTO_CIPHER_DES_EDE3_CBC, "DES-EDE3-CBC", 24, 8), + _CI(NM_CRYPTO_CIPHER_DES_CBC, "DES-CBC", 8, 8), + _CI(NM_CRYPTO_CIPHER_AES_128_CBC, "AES-128-CBC", 16, 16), + _CI(NM_CRYPTO_CIPHER_AES_192_CBC, "AES-192-CBC", 24, 16), + _CI(NM_CRYPTO_CIPHER_AES_256_CBC, "AES-256-CBC", 32, 16), +}; + +const NMCryptoCipherInfo * +nm_crypto_cipher_get_info(NMCryptoCipherType cipher) +{ + g_return_val_if_fail(cipher > NM_CRYPTO_CIPHER_UNKNOWN + && (gsize) cipher < G_N_ELEMENTS(cipher_infos) + 1, + NULL); + +#if NM_MORE_ASSERTS > 10 + { + int i, j; + + for (i = 0; i < (int) G_N_ELEMENTS(cipher_infos); i++) { + const NMCryptoCipherInfo *info = &cipher_infos[i]; + + nm_assert(info->cipher == (NMCryptoCipherType) (i + 1)); + nm_assert(info->name && info->name[0]); + for (j = 0; j < i; j++) + nm_assert(g_ascii_strcasecmp(info->name, cipher_infos[j].name) != 0); + } + } +#endif + + return &cipher_infos[cipher - 1]; +} + +const NMCryptoCipherInfo * +nm_crypto_cipher_get_info_by_name(const char *cipher_name, gssize p_len) +{ + int i; + + nm_assert(nm_crypto_cipher_get_info(NM_CRYPTO_CIPHER_DES_CBC)->cipher + == NM_CRYPTO_CIPHER_DES_CBC); + + if (p_len < 0) { + if (!cipher_name) + return FALSE; + p_len = strlen(cipher_name); + } + + for (i = 0; i < (int) G_N_ELEMENTS(cipher_infos); i++) { + const NMCryptoCipherInfo *info = &cipher_infos[i]; + + if ((gsize) p_len == strlen(info->name) + && g_ascii_strncasecmp(info->name, cipher_name, p_len) == 0) + return info; + } + return NULL; +} + +/*****************************************************************************/ + +static gboolean +find_tag(const char *tag, const guint8 *data, gsize data_len, gsize start_at, gsize *out_pos) +{ + const guint8 *p; + gsize taglen; + + nm_assert(out_pos); + nm_assert(start_at <= data_len); + + taglen = strlen(tag); + + p = memmem(&data[start_at], data_len - start_at, tag, taglen); + if (!p) + return FALSE; + + *out_pos = p - data; + + nm_assert(memcmp(&data[*out_pos], tag, taglen) == 0); + + return TRUE; +} + +#define DEK_INFO_TAG "DEK-Info: " +#define PROC_TYPE_TAG "Proc-Type: " + +static char * +_extract_line(const guint8 **p, const guint8 *p_end) +{ + const guint8 *x, *x0; + + nm_assert(p); + nm_assert(p_end); + nm_assert(*p); + nm_assert(*p < p_end); + + x = x0 = *p; + while (TRUE) { + if (x == p_end) { + *p = p_end; + break; + } + if (*x == '\0') { + /* the data contains embedded NUL. This is the end. */ + *p = p_end; + break; + } + if (*x == '\n') { + *p = x + 1; + break; + } + x++; + } + + if (x == x0) + return NULL; + return g_strndup((char *) x0, x - x0); +} + +static gboolean +parse_old_openssl_key_file(const guint8 *data, + gsize data_len, + NMSecretPtr *out_parsed, + NMCryptoKeyType *out_key_type, + NMCryptoCipherType *out_cipher, + char **out_iv, + GError **error) +{ + gsize start = 0, end = 0; + nm_auto_free_secret char *str = NULL; + char *str_p; + gsize str_len; + int enc_tags = 0; + NMCryptoKeyType key_type; + nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; + nm_auto_free_secret char *iv = NULL; + NMCryptoCipherType cipher = NM_CRYPTO_CIPHER_UNKNOWN; + const char *start_tag; + const char *end_tag; + const guint8 *data_start, *data_end; + + nm_assert(!out_parsed || (out_parsed->len == 0 && !out_parsed->bin)); + nm_assert(!out_iv || !*out_iv); + + NM_SET_OUT(out_key_type, NM_CRYPTO_KEY_TYPE_UNKNOWN); + NM_SET_OUT(out_cipher, NM_CRYPTO_CIPHER_UNKNOWN); + + if (find_tag(PEM_RSA_KEY_BEGIN, data, data_len, 0, &start)) { + key_type = NM_CRYPTO_KEY_TYPE_RSA; + start_tag = PEM_RSA_KEY_BEGIN; + end_tag = PEM_RSA_KEY_END; + } else if (find_tag(PEM_DSA_KEY_BEGIN, data, data_len, 0, &start)) { + key_type = NM_CRYPTO_KEY_TYPE_DSA; + start_tag = PEM_DSA_KEY_BEGIN; + end_tag = PEM_DSA_KEY_END; + } else { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("PEM key file had no start tag")); + return FALSE; + } + + start += strlen(start_tag); + if (!find_tag(end_tag, data, data_len, start, &end)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("PEM key file had no end tag '%s'."), + end_tag); + return FALSE; + } + + str_len = end - start + 1; + str = g_new(char, str_len); + str[0] = '\0'; + str_p = str; + + data_start = &data[start]; + data_end = &data[end]; + + while (data_start < data_end) { + nm_auto_free_secret char *line = NULL; + char *p; + + line = _extract_line(&data_start, data_end); + if (!line) + continue; + + p = nm_secret_strchomp(nm_str_skip_leading_spaces(line)); + + if (!strncmp(p, PROC_TYPE_TAG, strlen(PROC_TYPE_TAG))) { + if (enc_tags++ != 0 || str_p != str) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: Proc-Type was not first tag.")); + return FALSE; + } + + p += strlen(PROC_TYPE_TAG); + if (strcmp(p, "4,ENCRYPTED")) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: unknown Proc-Type tag '%s'."), + p); + return FALSE; + } + } else if (!strncmp(p, DEK_INFO_TAG, strlen(DEK_INFO_TAG))) { + const NMCryptoCipherInfo *cipher_info; + char *comma; + gsize p_len; + + if (enc_tags++ != 1 || str_p != str) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: DEK-Info was not the second tag.")); + return FALSE; + } + + p += strlen(DEK_INFO_TAG); + + /* Grab the IV first */ + comma = strchr(p, ','); + if (!comma || (*(comma + 1) == '\0')) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: no IV found in DEK-Info tag.")); + return FALSE; + } + p_len = comma - p; + comma++; + if (!g_ascii_isxdigit(*comma)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: invalid format of IV in DEK-Info tag.")); + return FALSE; + } + nm_free_secret(iv); + iv = g_strdup(comma); + + /* Get the private key cipher */ + cipher_info = nm_crypto_cipher_get_info_by_name(p, p_len); + if (!cipher_info) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Malformed PEM file: unknown private key cipher '%s'."), + p); + return FALSE; + } + cipher = cipher_info->cipher; + } else { + if (enc_tags == 1) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + "Malformed PEM file: both Proc-Type and DEK-Info tags are required."); + return FALSE; + } + nm_strbuf_append_str(&str_p, &str_len, p); + nm_assert(str_len > 0); + } + } + + parsed.bin = (guint8 *) g_base64_decode(str, &parsed.len); + if (!parsed.bin || parsed.len == 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Could not decode private key.")); + nm_secret_ptr_clear(&parsed); + return FALSE; + } + + NM_SET_OUT(out_key_type, key_type); + NM_SET_OUT(out_iv, g_steal_pointer(&iv)); + NM_SET_OUT(out_cipher, cipher); + nm_secret_ptr_move(out_parsed, &parsed); + return TRUE; +} + +static gboolean +parse_pkcs8_key_file(const guint8 *data, + gsize data_len, + NMSecretPtr *parsed, + gboolean *out_encrypted, + GError **error) +{ + gsize start = 0, end = 0; + const char *start_tag = NULL, *end_tag = NULL; + gboolean encrypted = FALSE; + nm_auto_free_secret char *der_base64 = NULL; + + nm_assert(parsed); + nm_assert(!parsed->bin); + nm_assert(parsed->len == 0); + nm_assert(out_encrypted); + + /* Try encrypted first, decrypted next */ + if (find_tag(PEM_PKCS8_ENC_KEY_BEGIN, data, data_len, 0, &start)) { + start_tag = PEM_PKCS8_ENC_KEY_BEGIN; + end_tag = PEM_PKCS8_ENC_KEY_END; + encrypted = TRUE; + } else if (find_tag(PEM_PKCS8_DEC_KEY_BEGIN, data, data_len, 0, &start)) { + start_tag = PEM_PKCS8_DEC_KEY_BEGIN; + end_tag = PEM_PKCS8_DEC_KEY_END; + encrypted = FALSE; + } else { + g_set_error_literal(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to find expected PKCS#8 start tag.")); + return FALSE; + } + + start += strlen(start_tag); + if (!find_tag(end_tag, data, data_len, start, &end)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to find expected PKCS#8 end tag '%s'."), + end_tag); + return FALSE; + } + + /* g_base64_decode() wants a NULL-terminated string */ + der_base64 = g_strndup((char *) &data[start], end - start); + + parsed->bin = (guint8 *) g_base64_decode(der_base64, &parsed->len); + if (!parsed->bin || parsed->len == 0) { + g_set_error_literal(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to decode PKCS#8 private key.")); + nm_secret_ptr_clear(parsed); + return FALSE; + } + + *out_encrypted = encrypted; + return TRUE; +} + +static gboolean +parse_tpm2_wrapped_key_file(const guint8 *data, + gsize data_len, + gboolean *out_encrypted, + GError **error) +{ + gsize start = 0, end = 0; + const char *start_tag = NULL, *end_tag = NULL; + + nm_assert(out_encrypted); + + if (find_tag(PEM_TPM2_WRAPPED_KEY_BEGIN, data, data_len, 0, &start)) { + start_tag = PEM_TPM2_WRAPPED_KEY_BEGIN; + end_tag = PEM_TPM2_WRAPPED_KEY_END; + } else if (find_tag(PEM_TPM2_OLD_WRAPPED_KEY_BEGIN, data, data_len, 0, &start)) { + start_tag = PEM_TPM2_OLD_WRAPPED_KEY_BEGIN; + end_tag = PEM_TPM2_OLD_WRAPPED_KEY_END; + } else { + g_set_error_literal(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to find expected TSS start tag.")); + return FALSE; + } + + start += strlen(start_tag); + if (!find_tag(end_tag, data, data_len, start, &end)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to find expected TSS end tag '%s'."), + end_tag); + return FALSE; + } + + *out_encrypted = FALSE; + return TRUE; +} + +/* + * Convert a hex string into bytes. + */ +static guint8 * +_nmtst_convert_iv(const char *src, gsize *out_len, GError **error) +{ + gsize i, num; + gs_free guint8 *c = NULL; + int c0, c1; + + nm_assert(src); + + num = strlen(src); + if (num == 0 || (num % 2) != 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("IV must be an even number of bytes in length.")); + return NULL; + } + + num /= 2; + c = g_malloc(num + 1); + + /* defensively add trailing NUL. This function returns binary data, + * do not assume it's NUL terminated. */ + c[num] = '\0'; + + for (i = 0; i < num; i++) { + if (((c0 = nm_utils_hexchar_to_int(*(src++))) < 0) + || ((c1 = nm_utils_hexchar_to_int(*(src++))) < 0)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("IV contains non-hexadecimal digits.")); + nm_explicit_bzero(c, i); + return FALSE; + } + + c[i] = (c0 << 4) + c1; + } + *out_len = num; + return g_steal_pointer(&c); +} + +guint8 * +nmtst_crypto_make_des_aes_key(NMCryptoCipherType cipher, + const guint8 *salt, + gsize salt_len, + const char *password, + gsize *out_len, + GError **error) +{ + guint8 *key; + const NMCryptoCipherInfo *cipher_info; + + g_return_val_if_fail(salt != NULL, NULL); + g_return_val_if_fail(salt_len >= 8, NULL); + g_return_val_if_fail(password != NULL, NULL); + g_return_val_if_fail(out_len != NULL, NULL); + + *out_len = 0; + + cipher_info = nm_crypto_cipher_get_info(cipher); + + g_return_val_if_fail(cipher_info, NULL); + + if (password[0] == '\0') + return NULL; + + key = g_malloc(cipher_info->digest_len); + + nm_crypto_md5_hash(salt, + 8, + (guint8 *) password, + strlen(password), + key, + cipher_info->digest_len); + + *out_len = cipher_info->digest_len; + return key; +} + +static gboolean +_nmtst_decrypt_key(NMCryptoCipherType cipher, + const guint8 *data, + gsize data_len, + const char *iv, + const char *password, + NMSecretPtr *parsed, + GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr bin_iv = {0}; + nm_auto_clear_secret_ptr NMSecretPtr key = {0}; + + nm_assert(password); + nm_assert(cipher != NM_CRYPTO_CIPHER_UNKNOWN); + nm_assert(iv); + nm_assert(parsed); + nm_assert(!parsed->bin); + nm_assert(parsed->len == 0); + + bin_iv.bin = _nmtst_convert_iv(iv, &bin_iv.len, error); + if (!bin_iv.bin) + return FALSE; + + if (bin_iv.len < 8) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("IV must contain at least 8 characters")); + return FALSE; + } + + /* Convert the password and IV into a DES or AES key */ + key.bin = + nmtst_crypto_make_des_aes_key(cipher, bin_iv.bin, bin_iv.len, password, &key.len, error); + if (!key.bin || !key.len) + return FALSE; + + parsed->bin = _nmtst_crypto_decrypt(cipher, + data, + data_len, + bin_iv.bin, + bin_iv.len, + key.bin, + key.len, + &parsed->len, + error); + if (!parsed->bin || parsed->len == 0) { + nm_secret_ptr_clear(parsed); + return FALSE; + } + + return TRUE; +} + +GBytes * +nmtst_crypto_decrypt_openssl_private_key_data(const guint8 *data, + gsize data_len, + const char *password, + NMCryptoKeyType *out_key_type, + GError **error) +{ + NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN; + nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; + nm_auto_free_secret char *iv = NULL; + NMCryptoCipherType cipher = NM_CRYPTO_CIPHER_UNKNOWN; + + g_return_val_if_fail(data != NULL, NULL); + + NM_SET_OUT(out_key_type, NM_CRYPTO_KEY_TYPE_UNKNOWN); + + if (!_nm_crypto_init(error)) + return NULL; + + if (!parse_old_openssl_key_file(data, data_len, &parsed, &key_type, &cipher, &iv, NULL)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Unable to determine private key type.")); + return NULL; + } + + NM_SET_OUT(out_key_type, key_type); + + if (password) { + nm_auto_clear_secret_ptr NMSecretPtr parsed2 = {0}; + + if (cipher == NM_CRYPTO_CIPHER_UNKNOWN || !iv) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_PASSWORD, + _("Password provided, but key was not encrypted.")); + return NULL; + } + + if (!_nmtst_decrypt_key(cipher, parsed.bin, parsed.len, iv, password, &parsed2, error)) + return NULL; + + return nm_secret_copy_to_gbytes(parsed2.bin, parsed2.len); + } + + if (cipher != NM_CRYPTO_CIPHER_UNKNOWN || iv) + return NULL; + + return nm_secret_copy_to_gbytes(parsed.bin, parsed.len); +} + +GBytes * +nmtst_crypto_decrypt_openssl_private_key(const char *file, + const char *password, + NMCryptoKeyType *out_key_type, + GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; + + if (!_nm_crypto_init(error)) + return NULL; + + if (!nm_utils_read_crypto_file(file, &contents, error)) + return NULL; + + return nmtst_crypto_decrypt_openssl_private_key_data(contents.bin, + contents.len, + password, + out_key_type, + error); +} + +static gboolean +extract_pem_cert_data(const guint8 *contents, + gsize contents_len, + NMSecretPtr *out_cert, + GError **error) +{ + gsize start = 0; + gsize end = 0; + nm_auto_free_secret char *der_base64 = NULL; + + nm_assert(contents); + nm_assert(out_cert); + nm_assert(out_cert->len == 0); + nm_assert(!out_cert->ptr); + + if (!find_tag(PEM_CERT_BEGIN, contents, contents_len, 0, &start)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("PEM certificate had no start tag '%s'."), + PEM_CERT_BEGIN); + return FALSE; + } + + start += strlen(PEM_CERT_BEGIN); + if (!find_tag(PEM_CERT_END, contents, contents_len, start, &end)) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("PEM certificate had no end tag '%s'."), + PEM_CERT_END); + return FALSE; + } + + /* g_base64_decode() wants a NULL-terminated string */ + der_base64 = g_strndup((const char *) &contents[start], end - start); + + out_cert->bin = (guint8 *) g_base64_decode(der_base64, &out_cert->len); + if (!out_cert->bin || !out_cert->len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to decode certificate.")); + nm_secret_ptr_clear(out_cert); + return FALSE; + } + + return TRUE; +} + +gboolean +nm_crypto_load_and_verify_certificate(const char *file, + NMCryptoFileFormat *out_file_format, + GBytes **out_certificate, + GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; + + g_return_val_if_fail(file, FALSE); + nm_assert(!error || !*error); + + if (!_nm_crypto_init(error)) + goto out; + + if (!nm_utils_read_crypto_file(file, &contents, error)) + goto out; + + if (contents.len == 0) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Certificate file is empty")); + goto out; + } + + /* Check for PKCS#12 */ + if (nm_crypto_is_pkcs12_data(contents.bin, contents.len, NULL)) { + NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_PKCS12); + NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); + return TRUE; + } + + /* Check for plain DER format */ + if (contents.len > 2 && contents.bin[0] == 0x30 && contents.bin[1] == 0x82) { + if (_nm_crypto_verify_x509(contents.bin, contents.len, NULL)) { + NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_X509); + NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); + return TRUE; + } + } else { + nm_auto_clear_secret_ptr NMSecretPtr pem_cert = {0}; + + if (extract_pem_cert_data(contents.bin, contents.len, &pem_cert, NULL)) { + if (_nm_crypto_verify_x509(pem_cert.bin, pem_cert.len, NULL)) { + NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_X509); + NM_SET_OUT(out_certificate, nm_secret_copy_to_gbytes(contents.bin, contents.len)); + return TRUE; + } + } + } + + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Failed to recognize certificate")); + +out: + NM_SET_OUT(out_file_format, NM_CRYPTO_FILE_FORMAT_UNKNOWN); + NM_SET_OUT(out_certificate, NULL); + return FALSE; +} + +gboolean +nm_crypto_is_pkcs12_data(const guint8 *data, gsize data_len, GError **error) +{ + gs_free_error GError *local = NULL; + gboolean success; + + if (!data_len) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("Certificate file is empty")); + return FALSE; + } + + g_return_val_if_fail(data != NULL, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + success = _nm_crypto_verify_pkcs12(data, data_len, NULL, &local); + + /* If the error was just a decryption error, then it's pkcs#12 */ + if (!success && !g_error_matches(local, _NM_CRYPTO_ERROR, _NM_CRYPTO_ERROR_DECRYPTION_FAILED)) { + g_propagate_error(error, g_steal_pointer(&local)); + return FALSE; + } + + return TRUE; +} + +gboolean +nm_crypto_is_pkcs12_file(const char *file, GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; + + g_return_val_if_fail(file != NULL, FALSE); + + if (!_nm_crypto_init(error)) + return FALSE; + + if (!nm_utils_read_crypto_file(file, &contents, error)) + return FALSE; + + return nm_crypto_is_pkcs12_data(contents.bin, contents.len, error); +} + +/* Verifies that a private key can be read, and if a password is given, that + * the private key can be decrypted with that password. + */ +NMCryptoFileFormat +nm_crypto_verify_private_key_data(const guint8 *data, + gsize data_len, + const char *password, + gboolean *out_is_encrypted, + GError **error) +{ + NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; + gboolean is_encrypted = FALSE; + + g_return_val_if_fail(data != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN); + g_return_val_if_fail(out_is_encrypted == NULL || *out_is_encrypted == FALSE, + NM_CRYPTO_FILE_FORMAT_UNKNOWN); + + if (!_nm_crypto_init(error)) + return NM_CRYPTO_FILE_FORMAT_UNKNOWN; + + /* Check for PKCS#12 first */ + if (nm_crypto_is_pkcs12_data(data, data_len, NULL)) { + is_encrypted = TRUE; + if (!password || _nm_crypto_verify_pkcs12(data, data_len, password, error)) + format = NM_CRYPTO_FILE_FORMAT_PKCS12; + } else { + nm_auto_clear_secret_ptr NMSecretPtr parsed = {0}; + + /* Maybe it's PKCS#8 */ + if (parse_pkcs8_key_file(data, data_len, &parsed, &is_encrypted, NULL)) { + if (!password + || _nm_crypto_verify_pkcs8(parsed.bin, parsed.len, is_encrypted, password, error)) + format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; + } else if (parse_tpm2_wrapped_key_file(data, data_len, &is_encrypted, NULL)) { + format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; + } else { + NMCryptoCipherType cipher; + nm_auto_free_secret char *iv = NULL; + + /* Or it's old-style OpenSSL */ + if (parse_old_openssl_key_file(data, data_len, NULL, NULL, &cipher, &iv, NULL)) { + format = NM_CRYPTO_FILE_FORMAT_RAW_KEY; + is_encrypted = (cipher != NM_CRYPTO_CIPHER_UNKNOWN && iv); + } + } + } + + if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN && error && !*error) { + g_set_error(error, + _NM_CRYPTO_ERROR, + _NM_CRYPTO_ERROR_INVALID_DATA, + _("not a valid private key")); + } + + if (out_is_encrypted) + *out_is_encrypted = is_encrypted; + return format; +} + +NMCryptoFileFormat +nm_crypto_verify_private_key(const char *filename, + const char *password, + gboolean *out_is_encrypted, + GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; + + g_return_val_if_fail(filename != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN); + + if (!_nm_crypto_init(error)) + return NM_CRYPTO_FILE_FORMAT_UNKNOWN; + + if (!nm_utils_read_crypto_file(filename, &contents, error)) + return NM_CRYPTO_FILE_FORMAT_UNKNOWN; + + return nm_crypto_verify_private_key_data(contents.bin, + contents.len, + password, + out_is_encrypted, + error); +} + +gboolean +nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error) +{ + return _nm_crypto_randomize(buffer, buffer_len, error); +} + +/** + * nmtst_crypto_rsa_key_encrypt: + * @data: (array length=len): RSA private key data to be encrypted + * @len: length of @data + * @in_password: (allow-none): existing password to use, if any + * @out_password: (out) (allow-none): if @in_password was %NULL, a random + * password will be generated and returned in this argument + * @error: detailed error information on return, if an error occurred + * + * Encrypts the given RSA private key data with the given password (or generates + * a password if no password was given) and converts the data to PEM format + * suitable for writing to a file. It uses Triple DES cipher for the encryption. + * + * Returns: (transfer full): on success, PEM-formatted data suitable for writing + * to a PEM-formatted certificate/private key file. + **/ +GBytes * +nmtst_crypto_rsa_key_encrypt(const guint8 *data, + gsize len, + const char *in_password, + char **out_password, + GError **error) +{ + guint8 salt[8]; + nm_auto_clear_secret_ptr NMSecretPtr key = {0}; + nm_auto_clear_secret_ptr NMSecretPtr enc = {0}; + gs_unref_ptrarray GPtrArray *pem = NULL; + nm_auto_free_secret char *tmp_password = NULL; + nm_auto_free_secret char *enc_base64 = NULL; + gsize enc_base64_len; + const char *p; + gsize ret_len, ret_idx; + guint i; + NMSecretBuf *ret; + + g_return_val_if_fail(data, NULL); + g_return_val_if_fail(len > 0, NULL); + g_return_val_if_fail(!out_password || !*out_password, NULL); + + /* Make the password if needed */ + if (!in_password) { + nm_auto_clear_static_secret_ptr NMSecretPtr pw_buf = NM_SECRET_PTR_STATIC(32); + + if (!nm_crypto_randomize(pw_buf.bin, pw_buf.len, error)) + return NULL; + tmp_password = _nm_utils_bin2hexstr(pw_buf.bin, pw_buf.len, -1); + in_password = tmp_password; + } + + if (!nm_crypto_randomize(salt, sizeof(salt), error)) + return NULL; + + key.bin = nmtst_crypto_make_des_aes_key(NM_CRYPTO_CIPHER_DES_EDE3_CBC, + salt, + sizeof(salt), + in_password, + &key.len, + NULL); + if (!key.bin) + g_return_val_if_reached(NULL); + + enc.bin = _nmtst_crypto_encrypt(NM_CRYPTO_CIPHER_DES_EDE3_CBC, + data, + len, + salt, + sizeof(salt), + key.bin, + key.len, + &enc.len, + error); + if (!enc.bin) + return NULL; + + /* What follows is not the most efficient way to construct the pem + * file line-by-line. At least, it makes sure, that the data will be cleared + * again and not left around in memory. + * + * If this would not be test code, we should improve the implementation + * to avoid some of the copying. */ + pem = g_ptr_array_new_with_free_func((GDestroyNotify) nm_free_secret); + + g_ptr_array_add(pem, g_strdup("-----BEGIN RSA PRIVATE KEY-----\n")); + g_ptr_array_add(pem, g_strdup("Proc-Type: 4,ENCRYPTED\n")); + + /* Convert the salt to a hex string */ + g_ptr_array_add( + pem, + g_strdup_printf("DEK-Info: %s,", + nm_crypto_cipher_get_info(NM_CRYPTO_CIPHER_DES_EDE3_CBC)->name)); + g_ptr_array_add(pem, _nm_utils_bin2hexstr(salt, sizeof(salt), sizeof(salt) * 2)); + g_ptr_array_add(pem, g_strdup("\n\n")); + + /* Convert the encrypted key to a base64 string */ + enc_base64 = g_base64_encode((const guchar *) enc.bin, enc.len); + enc_base64_len = strlen(enc_base64); + for (p = enc_base64; (p - enc_base64) < (ptrdiff_t) enc_base64_len; p += 64) { + g_ptr_array_add(pem, g_strndup(p, 64)); + g_ptr_array_add(pem, g_strdup("\n")); + } + + g_ptr_array_add(pem, g_strdup("-----END RSA PRIVATE KEY-----\n")); + + ret_len = 0; + for (i = 0; i < pem->len; i++) + ret_len += strlen(pem->pdata[i]); + + ret = nm_secret_buf_new(ret_len + 1); + ret_idx = 0; + for (i = 0; i < pem->len; i++) { + const char *line = pem->pdata[i]; + gsize line_l = strlen(line); + + memcpy(&ret->bin[ret_idx], line, line_l); + ret_idx += line_l; + nm_assert(ret_idx <= ret_len); + } + nm_assert(ret_idx == ret_len); + ret->bin[ret_len] = '\0'; + + NM_SET_OUT(out_password, g_strdup(tmp_password)); + return nm_secret_buf_to_gbytes_take(ret, ret_len); +} + +/*****************************************************************************/ + +static gboolean +file_has_extension(const char *filename, const char *extensions[]) +{ + const char *ext; + gsize i; + + ext = strrchr(filename, '.'); + if (!ext) + return FALSE; + + for (i = 0; extensions[i]; i++) { + if (!g_ascii_strcasecmp(ext, extensions[i])) + return TRUE; + } + + return FALSE; +} + +gboolean +nm_crypto_utils_file_is_certificate(const char *filename) +{ + const char *extensions[] = {".der", ".pem", ".crt", ".cer", NULL}; + NMCryptoFileFormat file_format; + + nm_assert(filename); + + if (!file_has_extension(filename, extensions)) + return FALSE; + + if (!nm_crypto_load_and_verify_certificate(filename, &file_format, NULL, NULL)) + return FALSE; + return file_format = NM_CRYPTO_FILE_FORMAT_X509; +} + +gboolean +nm_crypto_utils_file_is_private_key(const char *filename, gboolean *out_encrypted) +{ + const char *extensions[] = {".der", ".pem", ".p12", ".key", NULL}; + + nm_assert(filename); + + NM_SET_OUT(out_encrypted, FALSE); + if (!file_has_extension(filename, extensions)) + return FALSE; + + return nm_crypto_verify_private_key(filename, NULL, out_encrypted, NULL) + != NM_CRYPTO_FILE_FORMAT_UNKNOWN; +} diff --git a/src/libnm-crypto/nm-crypto.h b/src/libnm-crypto/nm-crypto.h new file mode 100644 index 00000000..48c7c6b7 --- /dev/null +++ b/src/libnm-crypto/nm-crypto.h @@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Dan Williams + * Copyright (C) 2007 - 2014 Red Hat, Inc. + */ + +#ifndef __NM_CRYPTO_H__ +#define __NM_CRYPTO_H__ + +typedef enum { + NM_CRYPTO_CIPHER_UNKNOWN, + NM_CRYPTO_CIPHER_DES_EDE3_CBC, + NM_CRYPTO_CIPHER_DES_CBC, + NM_CRYPTO_CIPHER_AES_128_CBC, + NM_CRYPTO_CIPHER_AES_192_CBC, + NM_CRYPTO_CIPHER_AES_256_CBC, +} NMCryptoCipherType; + +typedef struct { + const char *name; + NMCryptoCipherType cipher; + guint8 digest_len; + guint8 real_iv_len; +} NMCryptoCipherInfo; + +const NMCryptoCipherInfo *nm_crypto_cipher_get_info(NMCryptoCipherType cipher); +const NMCryptoCipherInfo *nm_crypto_cipher_get_info_by_name(const char *cipher_name, gssize p_len); + +typedef enum { + NM_CRYPTO_KEY_TYPE_UNKNOWN = 0, + NM_CRYPTO_KEY_TYPE_RSA, + NM_CRYPTO_KEY_TYPE_DSA +} NMCryptoKeyType; + +typedef enum { + NM_CRYPTO_FILE_FORMAT_UNKNOWN = 0, + NM_CRYPTO_FILE_FORMAT_X509, + NM_CRYPTO_FILE_FORMAT_RAW_KEY, + NM_CRYPTO_FILE_FORMAT_PKCS12 +} NMCryptoFileFormat; + +/*****************************************************************************/ + +GBytes *nm_crypto_read_file(const char *filename, GError **error); + +gboolean nm_crypto_load_and_verify_certificate(const char *file, + NMCryptoFileFormat *out_file_format, + GBytes **out_certificat, + GError **error); + +gboolean nm_crypto_is_pkcs12_file(const char *file, GError **error); + +gboolean nm_crypto_is_pkcs12_data(const guint8 *data, gsize len, GError **error); + +NMCryptoFileFormat nm_crypto_verify_private_key_data(const guint8 *data, + gsize data_len, + const char *password, + gboolean *out_is_encrypted, + GError **error); + +NMCryptoFileFormat nm_crypto_verify_private_key(const char *file, + const char *password, + gboolean *out_is_encrypted, + GError **error); + +gboolean nm_crypto_randomize(void *buffer, gsize buffer_len, GError **error); + +/*****************************************************************************/ + +GBytes *nmtst_crypto_decrypt_openssl_private_key_data(const guint8 *data, + gsize data_len, + const char *password, + NMCryptoKeyType *out_key_type, + GError **error); + +GBytes *nmtst_crypto_decrypt_openssl_private_key(const char *file, + const char *password, + NMCryptoKeyType *out_key_type, + GError **error); + +GBytes *nmtst_crypto_rsa_key_encrypt(const guint8 *data, + gsize len, + const char *in_password, + char **out_password, + GError **error); + +guint8 *nmtst_crypto_make_des_aes_key(NMCryptoCipherType cipher, + const guint8 *salt, + gsize salt_len, + const char *password, + gsize *out_len, + GError **error); + +/*****************************************************************************/ + +gboolean nm_crypto_utils_file_is_certificate(const char *filename); +gboolean nm_crypto_utils_file_is_private_key(const char *filename, gboolean *out_encrypted); + +#endif /* __NM_CRYPTO_H__ */ diff --git a/src/libnm-glib-aux/nm-glib.h b/src/libnm-glib-aux/nm-glib.h index 4ab9cbbd..f3be3b32 100644 --- a/src/libnm-glib-aux/nm-glib.h +++ b/src/libnm-glib-aux/nm-glib.h @@ -717,4 +717,14 @@ _nm_deprecated("Don't use this API") void _nm_forbidden_glib_api_n(gconstpointer /*****************************************************************************/ +/* g_alloca0() evaluates the "size" argument multiple times. That seems an error + * prone API (as it's not function-like). + * + * We could fix it by using an expression statement. But it doesn't seem + * worth it, so hide it to prevent its use. */ +#undef g_alloca0 +#undef g_newa0 + +/*****************************************************************************/ + #endif /* __NM_GLIB_H__ */ diff --git a/src/libnm-glib-aux/nm-json-aux.h b/src/libnm-glib-aux/nm-json-aux.h index 275ed770..3054b1f9 100644 --- a/src/libnm-glib-aux/nm-json-aux.h +++ b/src/libnm-glib-aux/nm-json-aux.h @@ -391,6 +391,7 @@ nm_value_type_to_json(NMValueType value_type, GString *gstr, gconstpointer p_fie nm_json_gstr_append_string(gstr, *((const char *const *) p_field)); return; case NM_VALUE_TYPE_BYTES: + case NM_VALUE_TYPE_STRV: case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; @@ -428,12 +429,12 @@ nm_value_type_from_json(const NMJsonVt *vt, return (nm_jansson_json_as_string(vt, elem, out_val) > 0); case NM_VALUE_TYPE_BYTES: + case NM_VALUE_TYPE_STRV: case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; } - nm_assert_not_reached(); - return FALSE; + return nm_assert_unreachable_val(FALSE); } #endif /* NM_VALUE_TYPE_DEFINE_FUNCTIONS */ diff --git a/src/libnm-glib-aux/nm-logging-fwd.h b/src/libnm-glib-aux/nm-logging-fwd.h index 3e999c4a..0e715c50 100644 --- a/src/libnm-glib-aux/nm-logging-fwd.h +++ b/src/libnm-glib-aux/nm-logging-fwd.h @@ -9,54 +9,54 @@ /* Log domains */ -typedef enum { /*< skip >*/ - LOGD_NONE = 0LL, - LOGD_PLATFORM = (1LL << 0), /* Platform services */ - LOGD_RFKILL = (1LL << 1), - LOGD_ETHER = (1LL << 2), - LOGD_WIFI = (1LL << 3), - LOGD_BT = (1LL << 4), - LOGD_MB = (1LL << 5), /* mobile broadband */ - LOGD_DHCP4 = (1LL << 6), - LOGD_DHCP6 = (1LL << 7), - LOGD_PPP = (1LL << 8), - LOGD_WIFI_SCAN = (1LL << 9), - LOGD_IP4 = (1LL << 10), - LOGD_IP6 = (1LL << 11), - LOGD_AUTOIP4 = (1LL << 12), - LOGD_DNS = (1LL << 13), - LOGD_VPN = (1LL << 14), - LOGD_SHARING = (1LL << 15), /* Connection sharing/dnsmasq */ - LOGD_SUPPLICANT = (1LL << 16), /* Wi-Fi and 802.1x */ - LOGD_AGENTS = (1LL << 17), /* Secret agents */ - LOGD_SETTINGS = (1LL << 18), /* Settings */ - LOGD_SUSPEND = (1LL << 19), /* Suspend/Resume */ - LOGD_CORE = (1LL << 20), /* Core daemon and policy stuff */ - LOGD_DEVICE = (1LL << 21), /* Device state and activation */ - LOGD_OLPC = (1LL << 22), - LOGD_INFINIBAND = (1LL << 23), - LOGD_FIREWALL = (1LL << 24), - LOGD_ADSL = (1LL << 25), - LOGD_BOND = (1LL << 26), - LOGD_VLAN = (1LL << 27), - LOGD_BRIDGE = (1LL << 28), - LOGD_DBUS_PROPS = (1LL << 29), - LOGD_TEAM = (1LL << 30), - LOGD_CONCHECK = (1LL << 31), - LOGD_DCB = (1LL << 32), /* Data Center Bridging */ - LOGD_DISPATCH = (1LL << 33), - LOGD_AUDIT = (1LL << 34), - LOGD_SYSTEMD = (1LL << 35), - LOGD_VPN_PLUGIN = (1LL << 36), - LOGD_PROXY = (1LL << 37), - - __LOGD_MAX, - LOGD_ALL = (((__LOGD_MAX - 1LL) << 1) - 1LL), - LOGD_DEFAULT = LOGD_ALL & ~(LOGD_DBUS_PROPS | LOGD_WIFI_SCAN | LOGD_VPN_PLUGIN | 0), - - /* aliases: */ - LOGD_DHCP = LOGD_DHCP4 | LOGD_DHCP6, - LOGD_IP = LOGD_IP4 | LOGD_IP6, +typedef enum { + LOGD_NONE = 0LL, + LOGD_PLATFORM = (1LL << 0), /* Platform services */ + LOGD_RFKILL = (1LL << 1), + LOGD_ETHER = (1LL << 2), + LOGD_WIFI = (1LL << 3), + LOGD_BT = (1LL << 4), + LOGD_MB = (1LL << 5), /* mobile broadband */ + LOGD_DHCP4 = (1LL << 6), + LOGD_DHCP6 = (1LL << 7), + LOGD_PPP = (1LL << 8), + LOGD_WIFI_SCAN = (1LL << 9), + LOGD_IP4 = (1LL << 10), + LOGD_IP6 = (1LL << 11), + LOGD_AUTOIP4 = (1LL << 12), + LOGD_DNS = (1LL << 13), + LOGD_VPN = (1LL << 14), + LOGD_SHARING = (1LL << 15), /* Connection sharing/dnsmasq */ + LOGD_SUPPLICANT = (1LL << 16), /* Wi-Fi and 802.1x */ + LOGD_AGENTS = (1LL << 17), /* Secret agents */ + LOGD_SETTINGS = (1LL << 18), /* Settings */ + LOGD_SUSPEND = (1LL << 19), /* Suspend/Resume */ + LOGD_CORE = (1LL << 20), /* Core daemon and policy stuff */ + LOGD_DEVICE = (1LL << 21), /* Device state and activation */ + LOGD_OLPC = (1LL << 22), + LOGD_INFINIBAND = (1LL << 23), + LOGD_FIREWALL = (1LL << 24), + LOGD_ADSL = (1LL << 25), + LOGD_BOND = (1LL << 26), + LOGD_VLAN = (1LL << 27), + LOGD_BRIDGE = (1LL << 28), + LOGD_DBUS_PROPS = (1LL << 29), + LOGD_TEAM = (1LL << 30), + LOGD_CONCHECK = (1LL << 31), + LOGD_DCB = (1LL << 32), /* Data Center Bridging */ + LOGD_DISPATCH = (1LL << 33), + LOGD_AUDIT = (1LL << 34), + LOGD_SYSTEMD = (1LL << 35), + LOGD_VPN_PLUGIN = (1LL << 36), + LOGD_PROXY = (1LL << 37), + + __LOGD_MAX, + LOGD_ALL = (((__LOGD_MAX - 1LL) << 1) - 1LL), + LOGD_DEFAULT = LOGD_ALL & ~(LOGD_DBUS_PROPS | LOGD_WIFI_SCAN | LOGD_VPN_PLUGIN | 0), + + /* aliases: */ + LOGD_DHCP = LOGD_DHCP4 | LOGD_DHCP6, + LOGD_IP = LOGD_IP4 | LOGD_IP6, #define LOGD_DHCPX(is_ipv4) ((is_ipv4) ? LOGD_DHCP4 : LOGD_DHCP6) #define LOGD_IPX(is_ipv4) ((is_ipv4) ? LOGD_IP4 : LOGD_IP6) @@ -64,19 +64,20 @@ typedef enum { /*< skip >*/ } NMLogDomain; /* Log levels */ -typedef enum { /*< skip >*/ - LOGL_TRACE, - LOGL_DEBUG, - LOGL_INFO, - LOGL_WARN, - LOGL_ERR, +typedef enum { - _LOGL_N_REAL, /* the number of actual logging levels */ + LOGL_TRACE, + LOGL_DEBUG, + LOGL_INFO, + LOGL_WARN, + LOGL_ERR, - _LOGL_OFF = _LOGL_N_REAL, /* special logging level that is always disabled. */ - _LOGL_KEEP, /* special logging level to indicate that the logging level should not be changed. */ + _LOGL_N_REAL, /* the number of actual logging levels */ - _LOGL_N, /* the number of logging levels including "OFF" */ + _LOGL_OFF = _LOGL_N_REAL, /* special logging level that is always disabled. */ + _LOGL_KEEP, /* special logging level to indicate that the logging level should not be changed. */ + + _LOGL_N, /* the number of logging levels including "OFF" */ } NMLogLevel; gboolean _nm_log_enabled_impl(gboolean mt_require_locking, NMLogLevel level, NMLogDomain domain); diff --git a/src/libnm-glib-aux/nm-macros-internal.h b/src/libnm-glib-aux/nm-macros-internal.h index 14c16020..7cc8ac97 100644 --- a/src/libnm-glib-aux/nm-macros-internal.h +++ b/src/libnm-glib-aux/nm-macros-internal.h @@ -184,22 +184,31 @@ _nm_auto_freev(gpointer ptr) * same name for the same warning. */ #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define NM_PRAGMA_DIAGNOSTICS_PUSH _Pragma("GCC diagnostic push") #define NM_PRAGMA_WARNING_DISABLE(warning) \ - _Pragma("GCC diagnostic push") _Pragma(_NM_PRAGMA_WARNING_DO(warning)) + NM_PRAGMA_DIAGNOSTICS_PUSH _Pragma(_NM_PRAGMA_WARNING_DO(warning)) +#define NM_PRAGMA_WARNING_REENABLE _Pragma("GCC diagnostic pop") #elif defined(__clang__) -#define NM_PRAGMA_WARNING_DISABLE(warning) \ - _Pragma("clang diagnostic push") _Pragma(_NM_PRAGMA_WARNING_DO("-Wunknown-warning-option")) \ +#define NM_PRAGMA_DIAGNOSTICS_PUSH _Pragma("clang diagnostic push") +#define NM_PRAGMA_WARNING_DISABLE(warning) \ + NM_PRAGMA_DIAGNOSTICS_PUSH _Pragma(_NM_PRAGMA_WARNING_DO("-Wunknown-warning-option")) \ _Pragma(_NM_PRAGMA_WARNING_DO(warning)) +#define NM_PRAGMA_WARNING_REENABLE _Pragma("clang diagnostic pop") #else +#define NM_PRAGMA_DIAGNOSTICS_PUSH #define NM_PRAGMA_WARNING_DISABLE(warning) +#define NM_PRAGMA_WARNING_REENABLE #endif -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) -#define NM_PRAGMA_WARNING_REENABLE _Pragma("GCC diagnostic pop") -#elif defined(__clang__) -#define NM_PRAGMA_WARNING_REENABLE _Pragma("clang diagnostic pop") +/*****************************************************************************/ + +/* Seems gcc-12 has a tendency for false-positive -Wdangling-pointer warnings with + * g_error()'s `for(;;);`. See https://bugzilla.redhat.com/show_bug.cgi?id=2056613 . + * Work around, but only for the affected gcc 12.0.1. */ +#if defined(__GNUC__) && __GNUC__ == 12 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ <= 1 +#define NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER NM_PRAGMA_WARNING_DISABLE("-Wdangling-pointer") #else -#define NM_PRAGMA_WARNING_REENABLE +#define NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER NM_PRAGMA_DIAGNOSTICS_PUSH #endif /*****************************************************************************/ @@ -611,10 +620,16 @@ nm_str_realloc(char *str) /* invokes _notify() for all arguments (of type _PropertyEnums). Note, that if * there are more than one prop arguments, this will involve a freeze/thaw * of GObject property notifications. */ -#define nm_gobject_notify_together_full(suffix, obj, ...) \ - _nm_gobject_notify_together_impl##suffix(obj, \ - NM_NARG(__VA_ARGS__), \ - (const _PropertyEnums##suffix[]){__VA_ARGS__}) +#define nm_gobject_notify_together_full(suffix, obj, ...) \ + G_STMT_START \ + { \ + const _PropertyEnums##suffix _props[] = {__VA_ARGS__}; \ + \ + G_STATIC_ASSERT(G_N_ELEMENTS(_props) == NM_NARG(__VA_ARGS__)); \ + \ + _nm_gobject_notify_together_impl##suffix(obj, G_N_ELEMENTS(_props), _props); \ + } \ + G_STMT_END #define nm_gobject_notify_together(obj, ...) nm_gobject_notify_together_full(, obj, __VA_ARGS__) diff --git a/src/libnm-glib-aux/nm-secret-utils.c b/src/libnm-glib-aux/nm-secret-utils.c index c764b6e5..983b04ca 100644 --- a/src/libnm-glib-aux/nm-secret-utils.c +++ b/src/libnm-glib-aux/nm-secret-utils.c @@ -10,6 +10,8 @@ #include +#include "nm-io-utils.h" + /*****************************************************************************/ void @@ -176,3 +178,34 @@ nm_utils_memeqzero_secret(gconstpointer data, gsize length) } return 1 & ((acc - 1) >> 8); } + +/*****************************************************************************/ + +gboolean +nm_utils_read_crypto_file(const char *filename, NMSecretPtr *out_contents, GError **error) +{ + nm_assert(out_contents); + nm_assert(out_contents->len == 0); + nm_assert(!out_contents->str); + + return nm_utils_file_get_contents(-1, + filename, + 100 * 1024 * 1024, + NM_UTILS_FILE_GET_CONTENTS_FLAG_SECRET, + &out_contents->str, + &out_contents->len, + NULL, + error); +} + +GBytes * +nm_utils_read_crypto_file_to_bytes(const char *filename, GError **error) +{ + nm_auto_clear_secret_ptr NMSecretPtr contents = {0}; + + g_return_val_if_fail(filename, NULL); + + if (!nm_utils_read_crypto_file(filename, &contents, error)) + return NULL; + return nm_secret_copy_to_gbytes(contents.bin, contents.len); +} diff --git a/src/libnm-glib-aux/nm-secret-utils.h b/src/libnm-glib-aux/nm-secret-utils.h index 513dbca5..c175bc8f 100644 --- a/src/libnm-glib-aux/nm-secret-utils.h +++ b/src/libnm-glib-aux/nm-secret-utils.h @@ -286,4 +286,8 @@ nm_secret_mem_try_realloc_take(gpointer m_old, gboolean do_bzero_mem, gsize cur_ /*****************************************************************************/ +gboolean nm_utils_read_crypto_file(const char *filename, NMSecretPtr *out_contents, GError **error); + +GBytes *nm_utils_read_crypto_file_to_bytes(const char *filename, GError **error); + #endif /* __NM_SECRET_UTILS_H__ */ diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index 563b7cc2..ad99a6b9 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -870,7 +870,12 @@ nm_utils_to_string_buffer_init(char **buf, gsize *len) { if (!*buf) { *buf = _nm_utils_to_string_buffer; - *len = sizeof(_nm_utils_to_string_buffer); + *len = NM_UTILS_TO_STRING_BUFFER_SIZE; + + /* We no longer want to support callers to omit the buffer + * and fallback to the global buffer. Callers should be fixed + * to always provide a valid buffer. */ + g_return_if_reached(); } } @@ -945,20 +950,6 @@ nm_utils_flags2str(const NMUtilsFlags2StrDesc *descs, /*****************************************************************************/ -/** - * _nm_utils_ip4_prefix_to_netmask: - * @prefix: a CIDR prefix - * - * Returns: the netmask represented by the prefix, in network byte order - **/ -guint32 -_nm_utils_ip4_prefix_to_netmask(guint32 prefix) -{ - return prefix < 32 ? ~htonl(0xFFFFFFFFu >> prefix) : 0xFFFFFFFFu; -} - -/*****************************************************************************/ - guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip) { @@ -1130,6 +1121,7 @@ nm_utils_parse_inaddr_bin_full(int addr_family, #if NM_MORE_ASSERTS > 10 if (addr_family == AF_INET) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER gs_free_error GError *error = NULL; in_addr_t a; @@ -1145,6 +1137,7 @@ nm_utils_parse_inaddr_bin_full(int addr_family, error->message); } nm_assert(addrbin.addr4 == a); + NM_PRAGMA_WARNING_REENABLE } #endif @@ -2958,8 +2951,8 @@ _str_buf_append_c_escape_octal(NMStrBuf *strbuf, char ch) * * Returns: the unescaped buffer of length @out_len. If @str is %NULL, this returns %NULL * and sets @out_len to 0. Otherwise, a non-%NULL binary buffer is returned with - * @out_len bytes. Note that the binary buffer is guaranteed to be NUL terminated. That - * is @result[@out_len] is NUL. + * @out_len bytes. Note that the binary buffer is guaranteed to be NUL terminated + * (@result[@out_len] is NUL). * Note that the result is binary, and may have embedded NUL characters and non-UTF-8. * If the function can avoid cloning the input string, it will return a pointer inside * the input @str. For example, if there is no backslash, no cloning is necessary. In that @@ -3121,11 +3114,14 @@ nm_utils_buf_utf8safe_unescape(const char *str, * invalid UTF-8 sequences, and other (depending on @flags). * * Returns: the escaped input buffer, as valid UTF-8. If no escaping - * is necessary, it returns the input @buf. Otherwise, an allocated - * string @to_free is returned which must be freed by the caller - * with g_free. The escaping can be reverted by g_strcompress(). - * There are cases where this function can return NULL: - * - if @buflen is 0 + * is necessary and @buflen is negative, it returns the input @buf + * that can be interpreted as NUL terminated UTF-8 string. + * Otherwise, an allocated string @to_free is returned which must be freed + * by the caller with g_free(). + * The escaping can be reverted by nm_utils_buf_utf8safe_unescape() + * (or, if in the absence of NUL characters, with g_strcompress()). + * There are cases where this function returns %NULL: + * - if @buflen is 0. * - if @buflen is negative and @buf is NULL. **/ const char * @@ -4689,14 +4685,20 @@ _nm_utils_invoke_on_idle_start(gboolean use_timeout, } if (use_timeout) { + /* We use G_PRIORITY_DEFAULT_IDLE both for the with/without timeout + * case. The reason is not strong, but it seems right that the caller + * requests a lower priority than G_PRIORITY_DEFAULT. That is unlike + * what g_timeout_add() would do. */ source = nm_g_timeout_source_new(timeout_msec, - G_PRIORITY_DEFAULT, + G_PRIORITY_DEFAULT_IDLE, _nm_utils_invoke_on_idle_cb_idle, data, NULL); } else { - source = - nm_g_idle_source_new(G_PRIORITY_DEFAULT, _nm_utils_invoke_on_idle_cb_idle, data, NULL); + source = nm_g_idle_source_new(G_PRIORITY_DEFAULT_IDLE, + _nm_utils_invoke_on_idle_cb_idle, + data, + NULL); } /* use the current thread default context. */ @@ -4840,6 +4842,27 @@ nm_utils_bin2hexstr_full(gconstpointer addr, return out0; } +char * +_nm_utils_bin2hexstr(gconstpointer src, gsize len, int final_len) +{ + char *result; + gsize buflen = (len * 2) + 1; + + nm_assert(src); + nm_assert(len > 0 && (buflen - 1) / 2 == len); + nm_assert(final_len < 0 || (gsize) final_len < buflen); + + result = g_malloc(buflen); + + nm_utils_bin2hexstr_full(src, len, '\0', FALSE, result); + + /* Cut converted key off at the correct length for this cipher type */ + if (final_len >= 0 && (gsize) final_len < buflen) + result[final_len] = '\0'; + + return result; +} + guint8 * nm_utils_hexstr2bin_full(const char *hexstr, gboolean allow_0x_prefix, @@ -6259,7 +6282,7 @@ _nm_utils_ssid_to_string_gbytes(GBytes *ssid) /*****************************************************************************/ gconstpointer -nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen) +nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint32 plen) { g_return_val_if_fail(dst, NULL); @@ -6283,21 +6306,10 @@ nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer return dst; } -/* nm_utils_ip4_address_clear_host_address: - * @addr: source ip6 address - * @plen: prefix length of network - * - * returns: the input address, with the host address set to 0. - */ -in_addr_t -nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen) -{ - return addr & _nm_utils_ip4_prefix_to_netmask(plen); -} - /* nm_utils_ip6_address_clear_host_address: * @dst: destination output buffer, will contain the network part of the @src address - * @src: source ip6 address + * @src: source ip6 address. If NULL, this does an in-place update of @dst. + * Also, @src and @dst are allowed to be the same pointers. * @plen: prefix length of network * * Note: this function is self assignment safe, to update @src inplace, set both @@ -6306,7 +6318,7 @@ nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen) const struct in6_addr * nm_utils_ip6_address_clear_host_address(struct in6_addr *dst, const struct in6_addr *src, - guint8 plen) + guint32 plen) { g_return_val_if_fail(plen <= 128, NULL); g_return_val_if_fail(dst, NULL); @@ -6335,14 +6347,15 @@ nm_utils_ip6_address_clear_host_address(struct in6_addr *dst, int nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a, const struct in6_addr *addr_b, - guint8 plen) + guint32 plen) { int nbytes; guint8 va, vb, m; - if (plen >= 128) + if (plen >= 128) { + nm_assert(plen == 128); NM_CMP_DIRECT_MEMCMP(addr_a, addr_b, sizeof(struct in6_addr)); - else { + } else { nbytes = plen / 8; if (nbytes) NM_CMP_DIRECT_MEMCMP(addr_a, addr_b, nbytes); diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index a953140b..941312bd 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -389,15 +389,43 @@ gboolean nm_utils_get_ipv6_interface_identifier(NMLinkType link_type, /*****************************************************************************/ +/** + * _nm_utils_ip4_prefix_to_netmask: + * @prefix: a CIDR prefix + * + * Returns: the netmask represented by the prefix, in network byte order + **/ +static inline in_addr_t +_nm_utils_ip4_prefix_to_netmask(guint32 prefix) +{ + nm_assert(prefix <= 32); + return prefix < 32 ? ~htonl(0xFFFFFFFFu >> prefix) : 0xFFFFFFFFu; +} + +guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip); +guint32 _nm_utils_ip4_get_default_prefix(in_addr_t ip); + gconstpointer -nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen); -in_addr_t nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen); +nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint32 plen); + +/* nm_utils_ip4_address_clear_host_address: + * @addr: source ip6 address + * @plen: prefix length of network + * + * returns: the input address, with the host address set to 0. + */ +static inline in_addr_t +nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint32 plen) +{ + return addr & _nm_utils_ip4_prefix_to_netmask(plen); +} + const struct in6_addr *nm_utils_ip6_address_clear_host_address(struct in6_addr *dst, const struct in6_addr *src, - guint8 plen); + guint32 plen); static inline int -nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint8 plen) +nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint32 plen) { NM_CMP_DIRECT(htonl(nm_utils_ip4_address_clear_host_address(addr_a, plen)), htonl(nm_utils_ip4_address_clear_host_address(addr_b, plen))); @@ -406,7 +434,21 @@ nm_utils_ip4_address_same_prefix_cmp(in_addr_t addr_a, in_addr_t addr_b, guint8 int nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a, const struct in6_addr *addr_b, - guint8 plen); + guint32 plen); + +static inline gboolean +nm_utils_ip4_address_same_prefix(in_addr_t addr_a, in_addr_t addr_b, guint32 plen) +{ + return nm_utils_ip4_address_same_prefix_cmp(addr_a, addr_b, plen) == 0; +} + +static inline gboolean +nm_utils_ip6_address_same_prefix(const struct in6_addr *addr_a, + const struct in6_addr *addr_b, + guint8 plen) +{ + return nm_utils_ip6_address_same_prefix_cmp(addr_a, addr_b, plen) == 0; +} static inline int nm_utils_ip_address_same_prefix_cmp(int addr_family, @@ -414,8 +456,6 @@ nm_utils_ip_address_same_prefix_cmp(int addr_family, gconstpointer addr_b, guint8 plen) { - nm_assert_addr_family(addr_family); - NM_CMP_SELF(addr_a, addr_b); if (NM_IS_IPv4(addr_family)) { @@ -427,20 +467,6 @@ nm_utils_ip_address_same_prefix_cmp(int addr_family, return nm_utils_ip6_address_same_prefix_cmp(addr_a, addr_b, plen); } -static inline gboolean -nm_utils_ip4_address_same_prefix(in_addr_t addr_a, in_addr_t addr_b, guint8 plen) -{ - return nm_utils_ip4_address_same_prefix_cmp(addr_a, addr_b, plen) == 0; -} - -static inline gboolean -nm_utils_ip6_address_same_prefix(const struct in6_addr *addr_a, - const struct in6_addr *addr_b, - guint8 plen) -{ - return nm_utils_ip6_address_same_prefix_cmp(addr_a, addr_b, plen) == 0; -} - static inline gboolean nm_utils_ip_address_same_prefix(int addr_family, gconstpointer addr_a, @@ -458,6 +484,10 @@ nm_utils_ip_address_same_prefix(int addr_family, /*****************************************************************************/ +gboolean nm_utils_ip_is_site_local(int addr_family, const void *address); + +/*****************************************************************************/ + #define NM_IPV4LL_NETWORK ((in_addr_t) (htonl(0xA9FE0000lu))) #define NM_IPV4LL_NETMASK ((in_addr_t) (htonl(0xFFFF0000lu))) @@ -974,24 +1004,6 @@ nm_utils_escaped_tokens_options_escape_val(const char *val, char **out_to_free) /*****************************************************************************/ -guint32 _nm_utils_ip4_prefix_to_netmask(guint32 prefix); -guint32 _nm_utils_ip4_get_default_prefix0(in_addr_t ip); -guint32 _nm_utils_ip4_get_default_prefix(in_addr_t ip); - -gconstpointer -nm_utils_ipx_address_clear_host_address(int family, gpointer dst, gconstpointer src, guint8 plen); -in_addr_t nm_utils_ip4_address_clear_host_address(in_addr_t addr, guint8 plen); -const struct in6_addr *nm_utils_ip6_address_clear_host_address(struct in6_addr *dst, - const struct in6_addr *src, - guint8 plen); -int nm_utils_ip6_address_same_prefix_cmp(const struct in6_addr *addr_a, - const struct in6_addr *addr_b, - guint8 plen); - -gboolean nm_utils_ip_is_site_local(int addr_family, const void *address); - -/*****************************************************************************/ - gboolean nm_utils_parse_inaddr_bin_full(int addr_family, gboolean accept_legacy, const char *text, @@ -1047,7 +1059,9 @@ int _nm_utils_ascii_str_to_bool(const char *str, int default_value); /*****************************************************************************/ -extern _nm_thread_local char _nm_utils_to_string_buffer[2096]; +#define NM_UTILS_TO_STRING_BUFFER_SIZE 2096 + +extern _nm_thread_local char _nm_utils_to_string_buffer[NM_UTILS_TO_STRING_BUFFER_SIZE]; void nm_utils_to_string_buffer_init(char **buf, gsize *len); gboolean nm_utils_to_string_buffer_init_null(gconstpointer obj, char **buf, gsize *len); @@ -2710,6 +2724,8 @@ char *nm_utils_bin2hexstr_full(gconstpointer addr, gboolean upper_case, char *out); +char *_nm_utils_bin2hexstr(gconstpointer src, gsize len, int final_len); + #define nm_utils_bin2hexstr_a(addr, length, delimiter, upper_case, str_to_free) \ ({ \ gconstpointer _addr = (addr); \ @@ -3141,6 +3157,33 @@ nm_strvarray_remove_first(GArray *strv, const char *needle) return TRUE; } +static inline int +nm_strvarray_cmp(const GArray *a, const GArray *b) +{ + NM_CMP_SELF(a, b); + + return nm_strv_cmp_n((const char *const *) a->data, + a->len, + (const char *const *) b->data, + b->len); +} + +#define nm_strvarray_equal(a, b) (nm_strvarray_cmp((a), (b)) == 0) + +static inline int +_nm_strvarray_cmp_strv(const GArray *strv, const char *const *ss, gsize ss_len) +{ + return nm_strv_cmp_n(strv ? (const char *const *) strv->data : NULL, + strv ? ((gssize) strv->len) : -1, + ss, + ss_len); +} +#define nm_strvarray_cmp_strv(strv, ss, ss_len) \ + _nm_strvarray_cmp_strv((strv), NM_CAST_STRV_CC(ss), (ss_len)) + +#define nm_strvarray_equal_strv(strv, ss, ss_len) \ + (nm_strvarray_cmp_strv((strv), (ss), (ss_len)) == 0) + /*****************************************************************************/ struct _NMVariantAttributeSpec { diff --git a/src/libnm-glib-aux/nm-test-utils.h b/src/libnm-glib-aux/nm-test-utils.h index caf43d5f..2dfe9e32 100644 --- a/src/libnm-glib-aux/nm-test-utils.h +++ b/src/libnm-glib-aux/nm-test-utils.h @@ -1714,8 +1714,11 @@ __nmtst_spawn_sync(const char *working_directory, standard_err, &exit_status, &error); - if (!success) + if (!success) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("nmtst_spawn_sync(%s): %s", ((char **) argv->pdata)[0], error->message); + NM_PRAGMA_WARNING_REENABLE + } g_assert(!error); g_assert(!standard_out || *standard_out); @@ -1844,7 +1847,8 @@ _nmtst_assert_resolve_relative_path_equals(const char *f1, /* Fixme: later we might need to coalesce repeated '/', "./", and "../". * For now, it's good enough. */ - if (g_strcmp0(p1, p2) != 0) + if (g_strcmp0(p1, p2) != 0) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("%s:%d : filenames don't match \"%s\" vs. \"%s\" // \"%s\" - \"%s\"", file, line, @@ -1852,6 +1856,8 @@ _nmtst_assert_resolve_relative_path_equals(const char *f1, f2, p1, p2); + NM_PRAGMA_WARNING_REENABLE + } } #define nmtst_assert_resolve_relative_path_equals(f1, f2) \ _nmtst_assert_resolve_relative_path_equals(f1, f2, __FILE__, __LINE__); @@ -2404,9 +2410,11 @@ _nmtst_assert_connection_has_settings(NMConnection *connection, settings = nm_connection_get_settings(connection, &len); for (i = 0; i < len; i++) { if (!g_hash_table_remove(names, nm_setting_get_name(settings[i])) && has_at_most) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error( "nmtst_assert_connection_has_settings(): has setting \"%s\" which is not expected", nm_setting_get_name(settings[i])); + NM_PRAGMA_WARNING_REENABLE } } if (g_hash_table_size(names) > 0 && has_at_least) { @@ -2419,11 +2427,13 @@ _nmtst_assert_connection_has_settings(NMConnection *connection, settings_names[i] = nm_setting_get_name(settings[i]); has_str = g_strjoinv(" ", (char **) settings_names); + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("nmtst_assert_connection_has_settings(): the setting lacks %u expected settings " "(expected: [%s] vs. has: [%s])", g_hash_table_size(names), expected_str, has_str); + NM_PRAGMA_WARNING_REENABLE } } #define nmtst_assert_connection_has_settings(connection, ...) \ diff --git a/src/libnm-glib-aux/nm-time-utils.h b/src/libnm-glib-aux/nm-time-utils.h index 3c3e935f..461d6845 100644 --- a/src/libnm-glib-aux/nm-time-utils.h +++ b/src/libnm-glib-aux/nm-time-utils.h @@ -41,6 +41,12 @@ nm_utils_get_monotonic_timestamp_msec_cached(gint64 *cache_now) return (*cache_now) ?: (*cache_now = nm_utils_get_monotonic_timestamp_msec()); } +static inline gint32 +nm_utils_get_monotonic_timestamp_sec_cached(gint32 *cache_now) +{ + return (*cache_now) ?: (*cache_now = nm_utils_get_monotonic_timestamp_sec()); +} + gint64 nm_utils_clock_gettime_nsec(clockid_t clockid); gint64 nm_utils_clock_gettime_msec(clockid_t clockid); diff --git a/src/libnm-glib-aux/nm-uuid.c b/src/libnm-glib-aux/nm-uuid.c index 19b09667..ff0649d0 100644 --- a/src/libnm-glib-aux/nm-uuid.c +++ b/src/libnm-glib-aux/nm-uuid.c @@ -316,8 +316,20 @@ nm_uuid_generate_from_string(NMUuid *uuid, NMUuidType uuid_type, const NMUuid *type_args) { - g_return_val_if_fail(uuid, FALSE); - g_return_val_if_fail(slen == 0 || s, FALSE); + nm_auto_free_checksum GChecksum *sum = NULL; + union { + guint8 sha1[NM_UTILS_CHECKSUM_LENGTH_SHA1]; + guint8 md5[NM_UTILS_CHECKSUM_LENGTH_MD5]; + NMUuid uuid; + } digest; + gsize digest_len; + GChecksumType checksum_type; + + G_STATIC_ASSERT_EXPR(sizeof(digest.md5) >= sizeof(digest.uuid)); + G_STATIC_ASSERT_EXPR(sizeof(digest.sha1) >= sizeof(digest.uuid)); + + g_return_val_if_fail(uuid, NULL); + g_return_val_if_fail(slen <= 0 || s, NULL); if (slen < 0) slen = s ? strlen(s) : 0; @@ -325,43 +337,41 @@ nm_uuid_generate_from_string(NMUuid *uuid, switch (uuid_type) { case NM_UUID_TYPE_LEGACY: nm_assert(!type_args); - nm_crypto_md5_hash(NULL, 0, (guint8 *) s, slen, (guint8 *) uuid, sizeof(*uuid)); + type_args = NULL; + checksum_type = G_CHECKSUM_MD5; break; case NM_UUID_TYPE_VERSION3: + if (!type_args) + type_args = &nm_uuid_ns_zero; + checksum_type = G_CHECKSUM_MD5; + break; case NM_UUID_TYPE_VERSION5: - { if (!type_args) type_args = &nm_uuid_ns_zero; + checksum_type = G_CHECKSUM_SHA1; + break; + default: + g_return_val_if_reached(NULL); + } - if (uuid_type == NM_UUID_TYPE_VERSION3) { - nm_crypto_md5_hash((guint8 *) s, - slen, - (guint8 *) type_args, - sizeof(*type_args), - (guint8 *) uuid, - sizeof(*uuid)); - } else { - nm_auto_free_checksum GChecksum *sum = NULL; - union { - guint8 sha1[NM_UTILS_CHECKSUM_LENGTH_SHA1]; - NMUuid uuid; - } digest; - - sum = g_checksum_new(G_CHECKSUM_SHA1); - g_checksum_update(sum, (guchar *) type_args, sizeof(*type_args)); - g_checksum_update(sum, (guchar *) s, slen); - nm_utils_checksum_get_digest(sum, digest.sha1); - - G_STATIC_ASSERT_EXPR(sizeof(digest.sha1) > sizeof(digest.uuid)); - *uuid = digest.uuid; - } + sum = g_checksum_new(checksum_type); + if (type_args) + g_checksum_update(sum, (guchar *) type_args, sizeof(*type_args)); + g_checksum_update(sum, (guchar *) s, slen); + + digest_len = sizeof(digest); + g_checksum_get_digest(sum, (guint8 *) &digest, &digest_len); + + nm_assert(digest_len >= sizeof(digest.uuid)); + nm_assert(digest_len + == ((checksum_type == G_CHECKSUM_MD5 ? NM_UTILS_CHECKSUM_LENGTH_MD5 + : NM_UTILS_CHECKSUM_LENGTH_SHA1))); + + *uuid = digest.uuid; + if (uuid_type != NM_UUID_TYPE_LEGACY) { uuid->uuid[6] = (uuid->uuid[6] & 0x0F) | (uuid_type << 4); uuid->uuid[8] = (uuid->uuid[8] & 0x3F) | 0x80; - break; - } - default: - g_return_val_if_reached(NULL); } return uuid; diff --git a/src/libnm-glib-aux/nm-value-type.h b/src/libnm-glib-aux/nm-value-type.h index d774e120..771021da 100644 --- a/src/libnm-glib-aux/nm-value-type.h +++ b/src/libnm-glib-aux/nm-value-type.h @@ -9,25 +9,26 @@ typedef enum _nm_packed { NM_VALUE_TYPE_NONE = 0, NM_VALUE_TYPE_UNSPEC = 1, - NM_VALUE_TYPE_BOOL = 2, - NM_VALUE_TYPE_INT32 = 3, - NM_VALUE_TYPE_INT = 4, - NM_VALUE_TYPE_INT64 = 5, - NM_VALUE_TYPE_UINT32 = 6, - NM_VALUE_TYPE_UINT = 7, - NM_VALUE_TYPE_UINT64 = 8, + + NM_VALUE_TYPE_BOOL, + NM_VALUE_TYPE_INT32, + NM_VALUE_TYPE_INT, + NM_VALUE_TYPE_INT64, + NM_VALUE_TYPE_UINT32, + NM_VALUE_TYPE_UINT, + NM_VALUE_TYPE_UINT64, /* Flags are for G_TYPE_FLAGS. That is, internally they are tracked * as a guint, they have a g_param_spec_flags() property and they are * serialized on D-Bus as "u". */ - NM_VALUE_TYPE_FLAGS = 9, + NM_VALUE_TYPE_FLAGS, /* G_TYPE_ENUM */ - NM_VALUE_TYPE_ENUM = 10, - - NM_VALUE_TYPE_STRING = 11, + NM_VALUE_TYPE_ENUM, - NM_VALUE_TYPE_BYTES = 12, + NM_VALUE_TYPE_STRING, + NM_VALUE_TYPE_BYTES, + NM_VALUE_TYPE_STRV, } NMValueType; /*****************************************************************************/ @@ -112,14 +113,17 @@ nm_value_type_cmp(NMValueType value_type, gconstpointer p_a, gconstpointer p_b) return 0; case NM_VALUE_TYPE_STRING: return nm_strcmp0(*((const char *const *) p_a), *((const char *const *) p_b)); + case NM_VALUE_TYPE_BYTES: - return nm_g_bytes_equal0(*((const GBytes *const *) p_a), *((const GBytes *const *) p_b)); + case NM_VALUE_TYPE_STRV: + /* These types have implementation define memory representations. */ + break; + case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; } - nm_assert_not_reached(); - return 0; + return nm_assert_unreachable_val(0); } static inline gboolean @@ -163,14 +167,12 @@ nm_value_type_copy(NMValueType value_type, gpointer dst, gconstpointer src) *((char **) dst) = g_strdup(*((const char *const *) src)); } return; + case NM_VALUE_TYPE_BYTES: - /* self assignment safe! */ - if (*((GBytes **) dst) != *((const GBytes *const *) src)) { - _nm_unused gs_unref_bytes GBytes *old = *((GBytes **) dst); + case NM_VALUE_TYPE_STRV: + /* These types have implementation define memory representations. */ + break; - *((GBytes **) dst) = g_bytes_ref(*((GBytes *const *) src)); - } - return; case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; @@ -212,14 +214,18 @@ nm_value_type_get_from_variant(NMValueType value_type, return; case NM_VALUE_TYPE_BYTES: + case NM_VALUE_TYPE_STRV: + /* These types have implementation define memory representations. */ + break; + case NM_VALUE_TYPE_INT: case NM_VALUE_TYPE_UINT: case NM_VALUE_TYPE_ENUM: case NM_VALUE_TYPE_FLAGS: /* These types don't have a defined variant type, because it's not * clear how many bits we would need or how to handle the type. */ + break; - /* fall-through */ case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; @@ -230,8 +236,7 @@ nm_value_type_get_from_variant(NMValueType value_type, static inline GVariant * nm_value_type_to_variant(NMValueType value_type, gconstpointer src) { - const char *v_string; - const GBytes *v_bytes; + const char *v_string; switch (value_type) { case NM_VALUE_TYPE_BOOL: @@ -247,9 +252,11 @@ nm_value_type_to_variant(NMValueType value_type, gconstpointer src) case NM_VALUE_TYPE_STRING: v_string = *((const char *const *) src); return v_string ? g_variant_new_string(v_string) : NULL; + case NM_VALUE_TYPE_BYTES: - v_bytes = *((const GBytes *const *) src); - return v_bytes ? nm_g_bytes_to_variant_ay(v_bytes) : NULL; + case NM_VALUE_TYPE_STRV: + /* These types have implementation define memory representations. */ + break; case NM_VALUE_TYPE_INT: case NM_VALUE_TYPE_UINT: @@ -257,14 +264,13 @@ nm_value_type_to_variant(NMValueType value_type, gconstpointer src) case NM_VALUE_TYPE_FLAGS: /* These types don't have a defined variant type, because it's not * clear how many bits we would need or how to handle the type. */ + break; - /* fall-through */ case NM_VALUE_TYPE_NONE: case NM_VALUE_TYPE_UNSPEC: break; } - nm_assert_not_reached(); - return NULL; + return nm_assert_unreachable_val(NULL); } static inline const GVariantType * @@ -285,6 +291,8 @@ nm_value_type_get_variant_type(NMValueType value_type) return G_VARIANT_TYPE_STRING; case NM_VALUE_TYPE_BYTES: return G_VARIANT_TYPE_BYTESTRING; + case NM_VALUE_TYPE_STRV: + return G_VARIANT_TYPE_STRING_ARRAY; case NM_VALUE_TYPE_INT: case NM_VALUE_TYPE_UINT: diff --git a/src/libnm-glib-aux/tests/test-shared-general.c b/src/libnm-glib-aux/tests/test-shared-general.c index ecba02e0..46689947 100644 --- a/src/libnm-glib-aux/tests/test-shared-general.c +++ b/src/libnm-glib-aux/tests/test-shared-general.c @@ -283,9 +283,6 @@ test_nm_utils_ip4_prefix_to_netmask(void) g_assert_cmpint(_nm_utils_ip4_prefix_to_netmask(32), ==, nmtst_inet4_from_string("255.255.255.255")); - g_assert_cmpint(_nm_utils_ip4_prefix_to_netmask(33), - ==, - nmtst_inet4_from_string("255.255.255.255")); } /*****************************************************************************/ diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c index ce21ebbb..40cb4396 100644 --- a/src/libnm-platform/nm-linux-platform.c +++ b/src/libnm-platform/nm-linux-platform.c @@ -1114,20 +1114,22 @@ _linktype_get_type(NMPlatform *platform, return link_type; } - if (arptype == ARPHRD_LOOPBACK) + switch (arptype) { + case ARPHRD_LOOPBACK: return NM_LINK_TYPE_LOOPBACK; - else if (arptype == ARPHRD_INFINIBAND) + case ARPHRD_INFINIBAND: return NM_LINK_TYPE_INFINIBAND; - else if (arptype == ARPHRD_SIT) + case ARPHRD_SIT: return NM_LINK_TYPE_SIT; - else if (arptype == ARPHRD_TUNNEL6) + case ARPHRD_TUNNEL6: return NM_LINK_TYPE_IP6TNL; - else if (arptype == ARPHRD_PPP) + case ARPHRD_PPP: return NM_LINK_TYPE_PPP; - else if (arptype == ARPHRD_IEEE802154) + case ARPHRD_IEEE802154: return NM_LINK_TYPE_WPAN; - else if (arptype == ARPHRD_6LOWPAN) + case ARPHRD_6LOWPAN: return NM_LINK_TYPE_6LOWPAN; + } { NMPUtilsEthtoolDriverInfo driver_info; @@ -3453,7 +3455,8 @@ _new_from_nl_route(struct nlmsghdr *nlh, gboolean id_only, ParseNlmsgIter *parse RTN_LOCAL, RTN_BLACKHOLE, RTN_UNREACHABLE, - RTN_PROHIBIT)) + RTN_PROHIBIT, + RTN_THROW)) return NULL; if (nlmsg_parse_arr(nlh, sizeof(struct rtmsg), tb, policy) < 0) @@ -6339,6 +6342,7 @@ cache_prune_one_type(NMPlatform *platform, const NMPLookup *lookup) nm_dedup_multi_iter_init(&iter, nmp_cache_lookup(cache, lookup)); while (nm_dedup_multi_iter_next(&iter)) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; const NMDedupMultiEntry *main_entry; /* we only track the dirty flag for the OBJECT-TYPE index. That means, @@ -6350,7 +6354,7 @@ cache_prune_one_type(NMPlatform *platform, const NMPLookup *lookup) obj = main_entry->obj; _LOGt("cache-prune: prune %s", - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_ALL, NULL, 0)); + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_ALL, sbuf, sizeof(sbuf))); { nm_auto_nmpobj const NMPObject *obj_old = NULL; @@ -6390,8 +6394,8 @@ cache_on_change(NMPlatform *platform, const NMPObject *obj_new) { const NMPClass *klass; - char str_buf[sizeof(_nm_utils_to_string_buffer)]; - char str_buf2[sizeof(_nm_utils_to_string_buffer)]; + char str_buf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + char str_buf2[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPCache *cache = nm_platform_get_cache(platform); ASSERT_nmp_cache_ops(cache, cache_op, obj_old, obj_new); @@ -7023,6 +7027,7 @@ event_seq_check(NMPlatform *platform, static void event_valid_msg(NMPlatform *platform, struct nl_msg *msg, gboolean handle_events) { + char sbuf1[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMLinuxPlatformPrivate *priv; nm_auto_nmpobj NMPObject *obj = NULL; NMPCacheOpsType cache_op; @@ -7079,8 +7084,8 @@ event_valid_msg(NMPlatform *platform, struct nl_msg *msg, gboolean handle_events is_dump ? ", in-dump" : "", nmp_object_to_string(obj, is_del ? NMP_OBJECT_TO_STRING_ID : NMP_OBJECT_TO_STRING_PUBLIC, - NULL, - 0)); + sbuf1, + sizeof(sbuf1))); while (TRUE) { nm_auto_nmpobj const NMPObject *obj_old = NULL; @@ -7306,6 +7311,7 @@ do_add_addrroute(NMPlatform *platform, struct nl_msg *nlmsg, gboolean suppress_netlink_failure) { + char sbuf1[NM_UTILS_TO_STRING_BUFFER_SIZE]; WaitForNlResponseResult seq_result = WAIT_FOR_NL_RESPONSE_RESULT_UNKNOWN; gs_free char *errmsg = NULL; int nle; @@ -7328,7 +7334,7 @@ do_add_addrroute(NMPlatform *platform, if (nle < 0) { _LOGE("do-add-%s[%s]: failure sending netlink request \"%s\" (%d)", NMP_OBJECT_GET_CLASS(obj_id)->obj_type_name, - nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, NULL, 0), + nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, sbuf1, sizeof(sbuf1)), nm_strerror(nle), -nle); return -NME_PL_NETLINK; @@ -7344,7 +7350,7 @@ do_add_addrroute(NMPlatform *platform, : LOGL_WARN, "do-add-%s[%s]: %s", NMP_OBJECT_GET_CLASS(obj_id)->obj_type_name, - nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, NULL, 0), + nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, sbuf1, sizeof(sbuf1)), wait_for_nl_response_to_string(seq_result, errmsg, s_buf, sizeof(s_buf))); if (NMP_OBJECT_GET_TYPE(obj_id) == NMP_OBJECT_TYPE_IP6_ADDRESS) { @@ -7365,6 +7371,7 @@ do_add_addrroute(NMPlatform *platform, static gboolean do_delete_object(NMPlatform *platform, const NMPObject *obj_id, struct nl_msg *nlmsg) { + char sbuf1[NM_UTILS_TO_STRING_BUFFER_SIZE]; WaitForNlResponseResult seq_result = WAIT_FOR_NL_RESPONSE_RESULT_UNKNOWN; gs_free char *errmsg = NULL; int nle; @@ -7383,7 +7390,7 @@ do_delete_object(NMPlatform *platform, const NMPObject *obj_id, struct nl_msg *n if (nle < 0) { _LOGE("do-delete-%s[%s]: failure sending netlink request \"%s\" (%d)", NMP_OBJECT_GET_CLASS(obj_id)->obj_type_name, - nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, NULL, 0), + nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, sbuf1, sizeof(sbuf1)), nm_strerror(nle), -nle); return FALSE; @@ -7402,6 +7409,8 @@ do_delete_object(NMPlatform *platform, const NMPObject *obj_id, struct nl_msg *n && NM_IN_SET(NMP_OBJECT_GET_TYPE(obj_id), NMP_OBJECT_TYPE_IP6_ADDRESS)) { /* On RHEL7 kernel, deleting a non existing address fails with ENXIO */ log_detail = ", meaning the address was already removed"; + } else if (NM_IN_SET(-((int) seq_result), ENODEV)) { + log_detail = ", meaning the device was already removed"; } else if (NM_IN_SET(-((int) seq_result), EADDRNOTAVAIL) && NM_IN_SET(NMP_OBJECT_GET_TYPE(obj_id), NMP_OBJECT_TYPE_IP4_ADDRESS, @@ -7413,7 +7422,7 @@ do_delete_object(NMPlatform *platform, const NMPObject *obj_id, struct nl_msg *n _NMLOG(success ? LOGL_DEBUG : LOGL_WARN, "do-delete-%s[%s]: %s%s", NMP_OBJECT_GET_CLASS(obj_id)->obj_type_name, - nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, NULL, 0), + nmp_object_to_string(obj_id, NMP_OBJECT_TO_STRING_ID, sbuf1, sizeof(sbuf1)), wait_for_nl_response_to_string(seq_result, errmsg, s_buf, sizeof(s_buf)), log_detail); @@ -7533,6 +7542,21 @@ out: return result; } +static int +link_change(NMPlatform *platform, NMLinkType type, int ifindex, gconstpointer extra_data) +{ + nm_auto_nlmsg struct nl_msg *nlmsg = NULL; + + nlmsg = _nl_msg_new_link(RTM_NEWLINK, 0, ifindex, 0); + if (!nlmsg) + return -NME_UNSPEC; + + if (!_nl_msg_new_link_set_linkinfo(nlmsg, type, extra_data)) + return -NME_UNSPEC; + + return do_change_link(platform, CHANGE_LINK_TYPE_UNSPEC, ifindex, nlmsg, NULL); +} + static int link_add(NMPlatform *platform, NMLinkType type, @@ -8451,6 +8475,7 @@ static gboolean wifi_get_capabilities(NMPlatform *platform, int ifindex, _NMDeviceWifiCapabilities *caps) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + if (caps) *caps = nm_wifi_utils_get_caps(wifi_data); return TRUE; @@ -8460,6 +8485,7 @@ static guint32 wifi_get_frequency(NMPlatform *platform, int ifindex) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, 0); + return nm_wifi_utils_get_freq(wifi_data); } @@ -8471,6 +8497,7 @@ wifi_get_station(NMPlatform *platform, guint32 *out_rate) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + return nm_wifi_utils_get_station(wifi_data, out_bssid, out_quality, out_rate); } @@ -8478,6 +8505,7 @@ static _NM80211Mode wifi_get_mode(NMPlatform *platform, int ifindex) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, _NM_802_11_MODE_UNKNOWN); + return nm_wifi_utils_get_mode(wifi_data); } @@ -8485,6 +8513,7 @@ static void wifi_set_mode(NMPlatform *platform, int ifindex, _NM80211Mode mode) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, ); + nm_wifi_utils_set_mode(wifi_data, mode); } @@ -8492,6 +8521,7 @@ static void wifi_set_powersave(NMPlatform *platform, int ifindex, guint32 powersave) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, ); + nm_wifi_utils_set_powersave(wifi_data, powersave); } @@ -8499,6 +8529,7 @@ static guint32 wifi_find_frequency(NMPlatform *platform, int ifindex, const guint32 *freqs) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, 0); + return nm_wifi_utils_find_freq(wifi_data, freqs); } @@ -8506,6 +8537,7 @@ static void wifi_indicate_addressing_running(NMPlatform *platform, int ifindex, gboolean running) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, ); + nm_wifi_utils_indicate_addressing_running(wifi_data, running); } @@ -8513,6 +8545,7 @@ static _NMSettingWirelessWakeOnWLan wifi_get_wake_on_wlan(NMPlatform *platform, int ifindex) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + return nm_wifi_utils_get_wake_on_wlan(wifi_data); } @@ -8520,9 +8553,26 @@ static gboolean wifi_set_wake_on_wlan(NMPlatform *platform, int ifindex, _NMSettingWirelessWakeOnWLan wowl) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + return nm_wifi_utils_set_wake_on_wlan(wifi_data, wowl); } +static gboolean +wifi_get_csme_conn_info(NMPlatform *platform, int ifindex, NMPlatformCsmeConnInfo *out_conn_info) +{ + WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + + return nm_wifi_utils_get_csme_conn_info(wifi_data, out_conn_info); +} + +static gboolean +wifi_get_device_from_csme(NMPlatform *platform, int ifindex) +{ + WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + + return nm_wifi_utils_get_device_from_csme(wifi_data); +} + /*****************************************************************************/ static gboolean @@ -8565,6 +8615,7 @@ static guint32 mesh_get_channel(NMPlatform *platform, int ifindex) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, 0); + return nm_wifi_utils_get_mesh_channel(wifi_data); } @@ -8572,6 +8623,7 @@ static gboolean mesh_set_channel(NMPlatform *platform, int ifindex, guint32 channel) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + return nm_wifi_utils_set_mesh_channel(wifi_data, channel); } @@ -8579,6 +8631,7 @@ static gboolean mesh_set_ssid(NMPlatform *platform, int ifindex, const guint8 *ssid, gsize len) { WIFI_GET_WIFI_DATA_NETNS(wifi_data, platform, ifindex, FALSE); + return nm_wifi_utils_set_mesh_ssid(wifi_data, ssid, len); } @@ -9727,13 +9780,10 @@ constructed(GObject *_object) fd); priv->event_source = - nm_g_unix_fd_source_new(fd, + nm_g_unix_fd_add_source(fd, G_IO_IN | G_IO_NVAL | G_IO_PRI | G_IO_ERR | G_IO_HUP, - G_PRIORITY_DEFAULT, event_handler, - platform, - NULL); - g_source_attach(priv->event_source, NULL); + platform); /* complete construction of the GObject instance before populating the cache. */ G_OBJECT_CLASS(nm_linux_platform_parent_class)->constructed(_object); @@ -9889,6 +9939,7 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass) platform_class->sysctl_get = sysctl_get; platform_class->link_add = link_add; + platform_class->link_change = link_change; platform_class->link_delete = link_delete; platform_class->link_refresh = link_refresh; @@ -9938,6 +9989,8 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass) platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running; platform_class->wifi_get_wake_on_wlan = wifi_get_wake_on_wlan; platform_class->wifi_set_wake_on_wlan = wifi_set_wake_on_wlan; + platform_class->wifi_get_csme_conn_info = wifi_get_csme_conn_info; + platform_class->wifi_get_device_from_csme = wifi_get_device_from_csme; platform_class->mesh_get_channel = mesh_get_channel; platform_class->mesh_set_channel = mesh_set_channel; diff --git a/src/libnm-platform/nm-platform-utils.c b/src/libnm-platform/nm-platform-utils.c index 9ad030df..bebc53a8 100644 --- a/src/libnm-platform/nm-platform-utils.c +++ b/src/libnm-platform/nm-platform-utils.c @@ -2132,12 +2132,15 @@ guint32 nmp_utils_lifetime_get(guint32 timestamp, guint32 lifetime, guint32 preferred, - gint32 now, + gint32 *cached_now, guint32 *out_preferred) { - guint32 t_lifetime, t_preferred; + guint32 t_lifetime; + guint32 t_preferred; + gint32 now; - nm_assert(now >= 0); + nm_assert(cached_now); + nm_assert(*cached_now >= 0); if (timestamp == 0 && lifetime == 0) { /* We treat lifetime==0 && timestamp==0 addresses as permanent addresses to allow easy @@ -2150,8 +2153,7 @@ nmp_utils_lifetime_get(guint32 timestamp, return NM_PLATFORM_LIFETIME_PERMANENT; } - if (now <= 0) - now = nm_utils_get_monotonic_timestamp_sec(); + now = nm_utils_get_monotonic_timestamp_sec_cached(cached_now); t_lifetime = nmp_utils_lifetime_rebase_relative_time_on_now(timestamp, lifetime, now); if (!t_lifetime) { diff --git a/src/libnm-platform/nm-platform-utils.h b/src/libnm-platform/nm-platform-utils.h index a9ccebb3..9f17da48 100644 --- a/src/libnm-platform/nm-platform-utils.h +++ b/src/libnm-platform/nm-platform-utils.h @@ -86,7 +86,7 @@ nmp_utils_lifetime_rebase_relative_time_on_now(guint32 timestamp, guint32 durati guint32 nmp_utils_lifetime_get(guint32 timestamp, guint32 lifetime, guint32 preferred, - gint32 now, + gint32 *cached_now, guint32 *out_preferred); int nmp_utils_modprobe(GError **error, gboolean suppress_error_logging, const char *arg1, ...) diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index 922f412d..8866a436 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -1304,6 +1304,45 @@ nm_platform_link_add(NMPlatform *self, ->link_add(self, type, name, parent, address, address_len, mtu, extra_data, out_link); } +int +nm_platform_link_change(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data) +{ + char buf[512]; + const char *name = nm_platform_link_get_name(self, ifindex); + + _CHECK_SELF(self, klass, -NME_BUG); + + _LOG2D("link: changing link: " + "%s " /* type */ + "\"%s\"" /* name */ + "%s" /* extra_data */ + "", + nm_link_type_to_string(type), + name, + ({ + char *buf_p = buf; + gsize buf_len = sizeof(buf); + + buf[0] = '\0'; + + switch (type) { + case NM_LINK_TYPE_BRIDGE: + nm_strbuf_append_str(&buf_p, &buf_len, ", "); + nm_platform_lnk_bridge_to_string((const NMPlatformLnkBridge *) extra_data, + buf_p, + buf_len); + break; + default: + nm_assert(!extra_data); + break; + } + + buf; + })); + + return klass->link_change(self, type, ifindex, extra_data); +} + /** * nm_platform_link_delete: * @self: platform instance @@ -1834,11 +1873,14 @@ nm_platform_link_set_sriov_vfs(NMPlatform *self, int ifindex, const NMPlatformVF g_return_val_if_fail(ifindex > 0, FALSE); - _LOG3D("link: setting VFs"); - for (i = 0; vfs[i]; i++) { - const NMPlatformVF *vf = vfs[i]; + if (_LOGD_ENABLED()) { + _LOG3D("link: setting VFs"); + for (i = 0; vfs[i]; i++) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + const NMPlatformVF *vf = vfs[i]; - _LOG3D("link: VF %s", nm_platform_vf_to_string(vf, NULL, 0)); + _LOG3D("link: VF %s", nm_platform_vf_to_string(vf, sbuf, sizeof(sbuf))); + } } return klass->link_set_sriov_vfs(self, ifindex, vfs); @@ -1855,14 +1897,18 @@ nm_platform_link_set_bridge_vlans(NMPlatform *self, g_return_val_if_fail(ifindex > 0, FALSE); - _LOG3D("link: %s bridge VLANs on %s", - vlans ? "setting" : "clearing", - on_master ? "master" : "self"); - if (vlans) { - for (i = 0; vlans[i]; i++) { - const NMPlatformBridgeVlan *vlan = vlans[i]; - - _LOG3D("link: bridge VLAN %s", nm_platform_bridge_vlan_to_string(vlan, NULL, 0)); + if (_LOGD_ENABLED()) { + _LOG3D("link: %s bridge VLANs on %s", + vlans ? "setting" : "clearing", + on_master ? "master" : "self"); + if (vlans) { + for (i = 0; vlans[i]; i++) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + const NMPlatformBridgeVlan *vlan = vlans[i]; + + _LOG3D("link: bridge VLAN %s", + nm_platform_bridge_vlan_to_string(vlan, sbuf, sizeof(sbuf))); + } } } @@ -2092,7 +2138,10 @@ nm_platform_link_release(NMPlatform *self, int master, int ifindex) if (nm_platform_link_get_master(self, ifindex) != master) return FALSE; - _LOG3D("link: releasing from master '%s'", nm_platform_link_get_name(self, master)); + _LOG3D("link: releasing %d from master '%s' (%d)", + ifindex, + nm_platform_link_get_name(self, master), + master); return klass->link_release(self, master, ifindex); } @@ -3058,6 +3107,28 @@ nm_platform_wifi_set_wake_on_wlan(NMPlatform *self, int ifindex, _NMSettingWirel return klass->wifi_set_wake_on_wlan(self, ifindex, wowl); } +gboolean +nm_platform_wifi_get_csme_conn_info(NMPlatform *self, + int ifindex, + NMPlatformCsmeConnInfo *out_conn_info) +{ + _CHECK_SELF(self, klass, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + + return klass->wifi_get_csme_conn_info(self, ifindex, out_conn_info); +} + +gboolean +nm_platform_wifi_get_device_from_csme(NMPlatform *self, int ifindex) +{ + _CHECK_SELF(self, klass, FALSE); + + g_return_val_if_fail(ifindex > 0, FALSE); + + return klass->wifi_get_device_from_csme(self, ifindex); +} + guint32 nm_platform_mesh_get_channel(NMPlatform *self, int ifindex) { @@ -3479,6 +3550,7 @@ nm_platform_ip4_address_add(NMPlatform *self, FALSE); if (_LOGD_ENABLED()) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPlatformIP4Address addr; addr = (NMPlatformIP4Address){ @@ -3497,7 +3569,7 @@ nm_platform_ip4_address_add(NMPlatform *self, g_strlcpy(addr.label, label, sizeof(addr.label)); _LOG3D("address: adding or updating IPv4 address: %s", - nm_platform_ip4_address_to_string(&addr, NULL, 0)); + nm_platform_ip4_address_to_string(&addr, sbuf, sizeof(sbuf))); } return klass->ip4_address_add(self, ifindex, @@ -3529,6 +3601,7 @@ nm_platform_ip6_address_add(NMPlatform *self, g_return_val_if_fail(preferred <= lifetime, FALSE); if (_LOGD_ENABLED()) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPlatformIP6Address addr = {0}; addr.ifindex = ifindex; @@ -3541,7 +3614,7 @@ nm_platform_ip6_address_add(NMPlatform *self, addr.n_ifa_flags = flags; _LOG3D("address: adding or updating IPv6 address: %s", - nm_platform_ip6_address_to_string(&addr, NULL, 0)); + nm_platform_ip6_address_to_string(&addr, sbuf, sizeof(sbuf))); } return klass ->ip6_address_add(self, ifindex, address, plen, peer_address, lifetime, preferred, flags); @@ -3592,6 +3665,41 @@ nm_platform_ip6_address_delete(NMPlatform *self, int ifindex, struct in6_addr ad return klass->ip6_address_delete(self, ifindex, address, plen); } +const NMPObject * +nm_platform_ip_address_get(NMPlatform *self, + int addr_family, + int ifindex, + gconstpointer /* (NMPlatformIPAddress *) */ needle) +{ + const NMPlatformIPXAddress *addr; + NMPObject obj_id; + const NMPObject *obj; + + nm_assert(NM_IS_PLATFORM(self)); + nm_assert_addr_family(addr_family); + nm_assert(needle); + + addr = needle; + + if (ifindex <= 0) { + /* We allow the caller to override the ifindex. */ + ifindex = addr->ax.ifindex; + } + + if (NM_IS_IPv4(addr_family)) { + nmp_object_stackinit_id_ip4_address(&obj_id, + ifindex, + addr->a4.address, + addr->a4.plen, + addr->a4.peer_address); + } else + nmp_object_stackinit_id_ip6_address(&obj_id, ifindex, &addr->a6.address); + + obj = nmp_cache_lookup_obj(nm_platform_get_cache(self), &obj_id); + nm_assert(!obj || nmp_object_is_visible(obj)); + return obj; +} + const NMPlatformIP4Address * nm_platform_ip4_address_get(NMPlatform *self, int ifindex, @@ -3632,7 +3740,7 @@ static gboolean _addr_array_clean_expired(int addr_family, int ifindex, GPtrArray *array, - guint32 now, + gint32 *cached_now, GHashTable **idx) { guint i; @@ -3640,7 +3748,8 @@ _addr_array_clean_expired(int addr_family, nm_assert_addr_family(addr_family); nm_assert(ifindex > 0); - nm_assert(now > 0); + nm_assert(cached_now); + nm_assert(*cached_now >= 0); if (!array) return FALSE; @@ -3674,17 +3783,16 @@ _addr_array_clean_expired(int addr_family, goto clear_and_next; } - if (!nmp_utils_lifetime_get(a->timestamp, a->lifetime, a->preferred, now, NULL)) + if (!nmp_utils_lifetime_get(a->timestamp, a->lifetime, a->preferred, cached_now, NULL)) goto clear_and_next; - if (idx) { - if (G_UNLIKELY(!*idx)) { - *idx = g_hash_table_new((GHashFunc) nmp_object_id_hash, - (GEqualFunc) nmp_object_id_equal); - } - if (!g_hash_table_add(*idx, (gpointer) NMP_OBJECT_UP_CAST(a))) - nm_assert_not_reached(); + if (G_UNLIKELY(!*idx)) { + *idx = + g_hash_table_new((GHashFunc) nmp_object_id_hash, (GEqualFunc) nmp_object_id_equal); } + if (!g_hash_table_add(*idx, (gpointer) NMP_OBJECT_UP_CAST(a))) + nm_assert_not_reached(); + any_addrs = TRUE; continue; @@ -3698,8 +3806,8 @@ clear_and_next: static gboolean ip4_addr_subnets_is_plain_address(const GPtrArray *addresses, gconstpointer needle) { - return needle >= (gconstpointer) &addresses->pdata[0] - && needle < (gconstpointer) &addresses->pdata[addresses->len]; + return nm_ptr_to_uintptr(needle) >= nm_ptr_to_uintptr(&addresses->pdata[0]) + && nm_ptr_to_uintptr(needle) < nm_ptr_to_uintptr(&addresses->pdata[addresses->len]); } static const NMPObject ** @@ -3733,6 +3841,30 @@ ip4_addr_subnets_destroy_index(GHashTable *subnets, const GPtrArray *addresses) g_hash_table_unref(subnets); } +static guint +_ip4_addr_subnets_hash(gconstpointer ptr) +{ + const NMPlatformIP4Address *addr = NMP_OBJECT_CAST_IP4_ADDRESS(ptr); + NMHashState h; + + nm_hash_init(&h, 3282159733); + nm_hash_update_vals(&h, + addr->plen, + nm_utils_ip4_address_clear_host_address(addr->address, addr->plen)); + return nm_hash_complete(&h); +} + +static gboolean +_ip4_addr_subnets_equal(gconstpointer p_a, gconstpointer p_b) +{ + const NMPlatformIP4Address *a = NMP_OBJECT_CAST_IP4_ADDRESS(p_a); + const NMPlatformIP4Address *b = NMP_OBJECT_CAST_IP4_ADDRESS(p_b); + + return a->plen == b->plen + && (nm_utils_ip4_address_clear_host_address(a->address, a->plen) + == nm_utils_ip4_address_clear_host_address(b->address, b->plen)); +} + static GHashTable * ip4_addr_subnets_build_index(const GPtrArray *addresses, gboolean consider_flags, @@ -3743,34 +3875,35 @@ ip4_addr_subnets_build_index(const GPtrArray *addresses, nm_assert(addresses && addresses->len); - subnets = g_hash_table_new(nm_direct_hash, NULL); + subnets = g_hash_table_new(_ip4_addr_subnets_hash, _ip4_addr_subnets_equal); /* Build a hash table of all addresses per subnet */ for (i = 0; i < addresses->len; i++) { + const NMPObject **p_obj; + const NMPObject *obj; const NMPlatformIP4Address *address; - gpointer p_address; GPtrArray *addr_list; - guint32 net; int position; gpointer p; if (!addresses->pdata[i]) continue; - p_address = &addresses->pdata[i]; - address = NMP_OBJECT_CAST_IP4_ADDRESS(addresses->pdata[i]); + p_obj = (const NMPObject **) &addresses->pdata[i]; + obj = *p_obj; - net = address->address & _nm_utils_ip4_prefix_to_netmask(address->plen); - if (!g_hash_table_lookup_extended(subnets, GUINT_TO_POINTER(net), NULL, &p)) { - g_hash_table_insert(subnets, GUINT_TO_POINTER(net), p_address); + if (!g_hash_table_lookup_extended(subnets, obj, NULL, &p)) { + g_hash_table_insert(subnets, (gpointer) obj, p_obj); continue; } nm_assert(p); + address = NMP_OBJECT_CAST_IP4_ADDRESS(obj); + if (full_index) { if (ip4_addr_subnets_is_plain_address(addresses, p)) { addr_list = g_ptr_array_new(); - g_hash_table_insert(subnets, GUINT_TO_POINTER(net), addr_list); + g_hash_table_insert(subnets, (gpointer) obj, addr_list); g_ptr_array_add(addr_list, p); } else addr_list = p; @@ -3779,13 +3912,13 @@ ip4_addr_subnets_build_index(const GPtrArray *addresses, position = -1; /* append */ else position = 0; /* prepend */ - g_ptr_array_insert(addr_list, position, p_address); + g_ptr_array_insert(addr_list, position, p_obj); } else { /* we only care about the primary. No need to track the secondaries * as a GPtrArray. */ nm_assert(ip4_addr_subnets_is_plain_address(addresses, p)); if (consider_flags && !NM_FLAGS_HAS(address->n_ifa_flags, IFA_F_SECONDARY)) { - g_hash_table_insert(subnets, GUINT_TO_POINTER(net), p_address); + g_hash_table_insert(subnets, (gpointer) obj, p_obj); } } } @@ -3811,16 +3944,11 @@ ip4_addr_subnets_is_secondary(const NMPObject *address, const GPtrArray *addresses, const GPtrArray **out_addr_list) { - const NMPlatformIP4Address *a; - const GPtrArray *addr_list; - gconstpointer p; - guint32 net; - const NMPObject **o; + const GPtrArray *addr_list; + gconstpointer p; + const NMPObject **o; - a = NMP_OBJECT_CAST_IP4_ADDRESS(address); - - net = a->address & _nm_utils_ip4_prefix_to_netmask(a->plen); - p = g_hash_table_lookup(subnets, GUINT_TO_POINTER(net)); + p = g_hash_table_lookup(subnets, address); nm_assert(p); if (!ip4_addr_subnets_is_plain_address(addresses, p)) { addr_list = p; @@ -3857,41 +3985,33 @@ ip6_address_scope(const NMPlatformIP6Address *a) } static int -ip6_address_scope_cmp(gconstpointer p_a, gconstpointer p_b, gpointer increasing) +ip6_address_scope_cmp_ascending(gconstpointer p_a, gconstpointer p_b, gpointer unused) { - const NMPlatformIP6Address *a; - const NMPlatformIP6Address *b; - - if (!increasing) - NM_SWAP(&p_a, &p_b); - - a = NMP_OBJECT_CAST_IP6_ADDRESS(*(const NMPObject *const *) p_a); - b = NMP_OBJECT_CAST_IP6_ADDRESS(*(const NMPObject *const *) p_b); - - NM_CMP_DIRECT(ip6_address_scope(a), ip6_address_scope(b)); + NM_CMP_DIRECT(ip6_address_scope(NMP_OBJECT_CAST_IP6_ADDRESS(*(const NMPObject *const *) p_a)), + ip6_address_scope(NMP_OBJECT_CAST_IP6_ADDRESS(*(const NMPObject *const *) p_b))); return 0; } +static int +ip6_address_scope_cmp_descending(gconstpointer p_a, gconstpointer p_b, gpointer unused) +{ + return ip6_address_scope_cmp_ascending(p_b, p_a, NULL); +} + /** * nm_platform_ip_address_sync: * @self: platform instance * @addr_family: the address family AF_INET or AF_INET6. * @ifindex: Interface index - * @known_addresses: List of addresses. The list will be modified and only - * addresses that were successfully added will be kept in the list. - * That means, expired addresses and addresses that could not be added - * will be dropped. - * Hence, the input argument @known_addresses is also an output argument - * telling which addresses were successfully added. - * Addresses are removed by unrefing the instance via nmp_object_unref() - * and leaving a NULL tombstone. + * @known_addresses: List of addresses. The list will be modified and + * expired addresses will be cleared (by calling nmp_object_unref() + * on the array element). * @addresses_prune: (allow-none): the list of addresses to delete. * If platform has such an address configured, it will be deleted * at the beginning of the sync. Note that the array will be modified * by the function. - * Note that the addresses must be properly sorted, by their priority. - * Create this list with nm_platform_ip_address_get_prune_list() which - * gets the sorting right. + * Addresses that are both contained in @known_addresses and @addresses_prune + * will be configured. * * A convenience function to synchronize addresses for a specific interface * with the least possible disturbance. It simply removes addresses that are @@ -3906,11 +4026,14 @@ nm_platform_ip_address_sync(NMPlatform *self, GPtrArray *known_addresses, GPtrArray *addresses_prune) { - const gint32 now = nm_utils_get_monotonic_timestamp_sec(); - const int IS_IPv4 = NM_IS_IPv4(addr_family); - gs_unref_hashtable GHashTable *known_addresses_idx = NULL; - GPtrArray *plat_addresses; - GHashTable *known_subnets = NULL; + gint32 now = 0; + const int IS_IPv4 = NM_IS_IPv4(addr_family); + NMPLookup lookup; + const gboolean EXTRA_LOGGING = FALSE; + gs_unref_hashtable GHashTable *known_addresses_idx = NULL; + gs_unref_hashtable GHashTable *plat_addrs_to_delete = NULL; + gs_unref_ptrarray GPtrArray *plat_addresses = NULL; + gboolean success; guint i_plat; guint i_know; guint i; @@ -3918,74 +4041,181 @@ nm_platform_ip_address_sync(NMPlatform *self, _CHECK_SELF(self, klass, FALSE); +#define _plat_addrs_to_delete_ensure(ptr) \ + ({ \ + GHashTable **_ptr = (ptr); \ + \ + if (!*_ptr) { \ + *_ptr = g_hash_table_new_full((GHashFunc) nmp_object_id_hash, \ + (GEqualFunc) nmp_object_id_equal, \ + (GDestroyNotify) nmp_object_unref, \ + NULL); \ + } \ + *_ptr; \ + }) + + /* Disabled. Enable this for printf debugging. */ + if (EXTRA_LOGGING) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + char sbuf1[50]; + + _LOG3T("IPv%c address sync on %d (%u addresses, %u to prune)", + nm_utils_addr_family_to_char(addr_family), + ifindex, + nm_g_ptr_array_len(known_addresses), + nm_g_ptr_array_len(addresses_prune)); + for (i = 0; known_addresses && i < known_addresses->len; i++) { + _LOG3T(" address#%u: %s%s", + i, + nmp_object_to_string(known_addresses->pdata[i], + NMP_OBJECT_TO_STRING_ALL, + sbuf, + sizeof(sbuf)), + IS_IPv4 ? "" + : nm_sprintf_buf(sbuf1, + " (scope %d)", + (int) ip6_address_scope(NMP_OBJECT_CAST_IP6_ADDRESS( + known_addresses->pdata[i])))); + } + for (i = 0; addresses_prune && i < addresses_prune->len; i++) { + _LOG3T(" prune #%u: %s", + i, + nmp_object_to_string(addresses_prune->pdata[i], + NMP_OBJECT_TO_STRING_ALL, + sbuf, + sizeof(sbuf))); + } + } + + /* @known_addresses are in decreasing priority order (highest priority addresses first). */ + /* The order we want to enforce is only among addresses with the same * scope, as the kernel keeps addresses sorted by scope. Therefore, * apply the same sorting to known addresses, so that we don't try to * unnecessary change the order of addresses with different scopes. */ if (!IS_IPv4) { if (known_addresses) - g_ptr_array_sort_with_data(known_addresses, - ip6_address_scope_cmp, - GINT_TO_POINTER(TRUE)); + g_ptr_array_sort_with_data(known_addresses, ip6_address_scope_cmp_descending, NULL); } if (!_addr_array_clean_expired(addr_family, ifindex, known_addresses, - now, + &now, &known_addresses_idx)) known_addresses = NULL; - /* @plat_addresses must be sorted in decreasing priority order (highest priority addresses first), contrary to - * @known_addresses which is in increasing priority order (lowest priority addresses first). */ - plat_addresses = addresses_prune; + if (nm_g_ptr_array_len(addresses_prune) > 0) { + /* First delete addresses that we should prune (and which are no longer tracked + * as @known_addresses. */ + for (i = 0; i < addresses_prune->len; i++) { + const NMPObject *prune_obj = addresses_prune->pdata[i]; + + nm_assert(NM_IN_SET(NMP_OBJECT_GET_TYPE(prune_obj), + NMP_OBJECT_TYPE_IP4_ADDRESS, + NMP_OBJECT_TYPE_IP6_ADDRESS)); + + if (nm_g_hash_table_contains(known_addresses_idx, prune_obj)) + continue; + + nm_platform_ip_address_delete(self, + addr_family, + ifindex, + NMP_OBJECT_CAST_IP_ADDRESS(prune_obj)); + } + } + + /* ensure we have the platform cache up to date. */ + nm_platform_process_events(self); + + /* @plat_addresses for IPv6 must be sorted in decreasing priority order (highest priority addresses first). + * IPv4 are probably unsorted or sorted with lowest priority first, but their order doesn't matter because + * we check the "secondary" flag. */ + plat_addresses = nm_platform_lookup_clone( + self, + nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4), ifindex), + NULL, + NULL); + + if (EXTRA_LOGGING && plat_addresses) { + for (i = 0; i < plat_addresses->len; i++) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + char sbuf1[50]; + + _LOG3T(" platform#%u: %s%s", + i, + nmp_object_to_string(plat_addresses->pdata[i], + NMP_OBJECT_TO_STRING_ALL, + sbuf, + sizeof(sbuf)), + IS_IPv4 ? "" + : nm_sprintf_buf(sbuf1, + " (scope %d)", + (int) ip6_address_scope(NMP_OBJECT_CAST_IP6_ADDRESS( + plat_addresses->pdata[i])))); + } + } if (nm_g_ptr_array_len(plat_addresses) > 0) { - /* Delete unknown addresses */ + /* Delete addresses that interfere with our intended order. */ if (IS_IPv4) { - GHashTable *plat_subnets; + GHashTable *known_subnets = NULL; + GHashTable *plat_subnets; + gs_free bool *plat_handled_to_free = NULL; + bool *plat_handled = NULL; + + /* For IPv4, we only consider it a conflict for addresses in the same + * subnet. That's where kernel will assign a primary/secondary flag. + * For different subnets, we don't define the order. */ plat_subnets = ip4_addr_subnets_build_index(plat_addresses, TRUE, TRUE); for (i = 0; i < plat_addresses->len; i++) { - const NMPObject *plat_obj; + const NMPObject *plat_obj = plat_addresses->pdata[i]; + const NMPObject *known_obj; const NMPlatformIP4Address *plat_address; const GPtrArray *addr_list; + gboolean secondary; - plat_obj = plat_addresses->pdata[i]; - if (!plat_obj) { - /* Already deleted */ + if (plat_handled && plat_handled[i]) continue; - } - plat_address = NMP_OBJECT_CAST_IP4_ADDRESS(plat_obj); + known_obj = nm_g_hash_table_lookup(known_addresses_idx, plat_obj); - if (known_addresses) { - const NMPObject *o; + if (!known_obj) { + /* this address is added externally. Even if it's presence would mess + * with our desired order, we cannot delete it. Skip it. */ + if (!plat_handled) { + plat_handled = nm_malloc0_maybe_a(300, + sizeof(bool) * plat_addresses->len, + &plat_handled_to_free); + } + plat_handled[i] = TRUE; + continue; + } - o = g_hash_table_lookup(known_addresses_idx, plat_obj); - if (o) { - gboolean secondary; + if (!known_subnets) + known_subnets = ip4_addr_subnets_build_index(known_addresses, FALSE, FALSE); - if (!known_subnets) - known_subnets = - ip4_addr_subnets_build_index(known_addresses, FALSE, FALSE); + plat_address = NMP_OBJECT_CAST_IP4_ADDRESS(plat_obj); - secondary = - ip4_addr_subnets_is_secondary(o, known_subnets, known_addresses, NULL); - if (secondary == NM_FLAGS_HAS(plat_address->n_ifa_flags, IFA_F_SECONDARY)) { - /* if we have an existing known-address, with matching secondary role, - * do not delete the platform-address. */ - continue; - } - } + secondary = + ip4_addr_subnets_is_secondary(known_obj, known_subnets, known_addresses, NULL); + if (secondary == NM_FLAGS_HAS(plat_address->n_ifa_flags, IFA_F_SECONDARY)) { + /* if we have an existing known-address, with matching secondary role, + * do not delete the platform-address. */ + continue; } - nm_platform_ip4_address_delete(self, - ifindex, - plat_address->address, - plat_address->plen, - plat_address->peer_address); + if (!plat_handled) { + plat_handled = nm_malloc0_maybe_a(300, + sizeof(bool) * plat_addresses->len, + &plat_handled_to_free); + } + plat_handled[i] = TRUE; + + g_hash_table_add(_plat_addrs_to_delete_ensure(&plat_addrs_to_delete), + (gpointer) nmp_object_ref(plat_obj)); if (!ip4_addr_subnets_is_secondary(plat_obj, plat_subnets, @@ -3999,74 +4229,73 @@ nm_platform_ip_address_sync(NMPlatform *self, * addresses are deleted, so that we can start with a clean * slate and add addresses in the right order. */ for (j = 1; j < addr_list->len; j++) { - const NMPObject **o; + const NMPObject **o = ip4_addr_subnets_addr_list_get(addr_list, j); + guint o_idx; - o = ip4_addr_subnets_addr_list_get(addr_list, j); - nm_assert(o); + o_idx = (o - ((const NMPObject **) &plat_addresses->pdata[0])); - if (*o) { - const NMPlatformIP4Address *a; + nm_assert(o_idx < plat_addresses->len); + nm_assert(o == ((const NMPObject **) &plat_addresses->pdata[o_idx])); - a = NMP_OBJECT_CAST_IP4_ADDRESS(*o); - nm_platform_ip4_address_delete(self, - ifindex, - a->address, - a->plen, - a->peer_address); - nmp_object_unref(*o); - *o = NULL; + if (plat_handled[o_idx]) + continue; + + plat_handled[o_idx] = TRUE; + + if (!nm_g_hash_table_contains(known_addresses_idx, *o)) { + /* Again, this is an external address. We cannot delete + * it to fix the address order. Pass. */ + continue; } + + g_hash_table_add(_plat_addrs_to_delete_ensure(&plat_addrs_to_delete), + (gpointer) nmp_object_ref(*o)); } } } ip4_addr_subnets_destroy_index(plat_subnets, plat_addresses); + ip4_addr_subnets_destroy_index(known_subnets, known_addresses); } else { - guint known_addresses_len; IP6AddrScope cur_scope; gboolean delete_remaining_addrs; - g_ptr_array_sort_with_data(plat_addresses, - ip6_address_scope_cmp, - GINT_TO_POINTER(FALSE)); + /* For IPv6, we only compare addresses per-scope. Addresses in different + * scopes don't have a defined order. */ - known_addresses_len = known_addresses ? known_addresses->len : 0; + g_ptr_array_sort_with_data(plat_addresses, ip6_address_scope_cmp_descending, NULL); - /* First, compare every address whether it is still a "known address", that is, whether - * to keep it or to delete it. - * - * If we don't find a matching valid address in @known_addresses, we will delete - * plat_addr. - * - * Certain addresses, like temporary addresses, are ignored by this function - * if not run with full_sync. These addresses are usually not managed by NetworkManager - * directly, or at least, they are not managed via nm_platform_ip6_address_sync(). - * Only in full_sync mode, we really want to get rid of them (usually, when we take - * the interface down). - * - * Note that we mark handled addresses by setting it to %NULL in @plat_addresses array. */ + /* First, check that existing addresses have a matching plen as the ones + * we are about to configure (@known_addresses). If not, delete them. */ for (i_plat = 0; i_plat < plat_addresses->len; i_plat++) { - const NMPObject *plat_obj = plat_addresses->pdata[i_plat]; - const NMPObject *know_obj; - const NMPlatformIP6Address *plat_addr = NMP_OBJECT_CAST_IP6_ADDRESS(plat_obj); - - if (known_addresses_idx) { - know_obj = g_hash_table_lookup(known_addresses_idx, plat_obj); - if (know_obj - && plat_addr->plen == NMP_OBJECT_CAST_IP6_ADDRESS(know_obj)->plen) { - /* technically, plen is not part of the ID for IPv6 addresses and thus - * @plat_addr is essentially the same address as @know_addr (regrading - * its identity, not its other attributes). - * However, we cannot modify an existing addresses' plen without - * removing and readding it. Thus, only keep plat_addr, if the plen - * matches. - * - * keep this one, and continue */ - continue; - } + const NMPObject *plat_obj = plat_addresses->pdata[i_plat]; + const NMPObject *known_obj; + + known_obj = nm_g_hash_table_lookup(known_addresses_idx, plat_obj); + if (!known_obj) { + /* We don't know this address. It was added externally. Keep it configured. + * We also don't want to delete the address below, so mark it as handled + * by clearing the pointer. */ + nm_clear_pointer(&plat_addresses->pdata[i_plat], nmp_object_unref); + continue; } - nm_platform_ip6_address_delete(self, ifindex, plat_addr->address, plat_addr->plen); - nmp_object_unref(g_steal_pointer(&plat_addresses->pdata[i_plat])); + if (NMP_OBJECT_CAST_IP6_ADDRESS(plat_obj)->plen + != NMP_OBJECT_CAST_IP6_ADDRESS(known_obj)->plen) { + /* technically, plen is not part of the ID for IPv6 addresses and thus + * @plat_addr is essentially the same address as @know_addr (w.r.t. + * its identity, not its other attributes). + * However, we cannot modify an existing addresses' plen without + * removing and readding it. Thus, we need to delete plat_addr. + * + * We don't just add this address to @plat_addrs_to_delete, because + * it's too different. Instead, delete and re-add below. */ + nm_platform_ip_address_delete(self, + AF_INET6, + ifindex, + NMP_OBJECT_CAST_IP6_ADDRESS(plat_obj)); + /* Mark address as handled. */ + nm_clear_pointer(&plat_addresses->pdata[i_plat], nmp_object_unref); + } } /* Next, we must preserve the priority of the routes. That is, source address @@ -4077,16 +4306,17 @@ nm_platform_ip_address_sync(NMPlatform *self, * @known_addresses (which has lowest priority first). * * If we find a first discrepancy, we need to delete all remaining addresses - * with same scope from that point on, because below we must re-add all the + * for same scope from that point on, because below we must re-add all the * addresses in the right order to get their priority right. */ cur_scope = IP6_ADDR_SCOPE_LOOPBACK; delete_remaining_addrs = FALSE; i_plat = plat_addresses->len; - i_know = 0; + i_know = nm_g_ptr_array_len(known_addresses); + while (i_plat > 0) { - const NMPlatformIP6Address *plat_addr = - NMP_OBJECT_CAST_IP6_ADDRESS(plat_addresses->pdata[--i_plat]); - IP6AddrScope plat_scope; + const NMPObject *plat_obj = plat_addresses->pdata[--i_plat]; + const NMPlatformIP6Address *plat_addr = NMP_OBJECT_CAST_IP6_ADDRESS(plat_obj); + IP6AddrScope plat_scope; if (!plat_addr) continue; @@ -4099,10 +4329,9 @@ nm_platform_ip_address_sync(NMPlatform *self, } if (!delete_remaining_addrs) { - delete_remaining_addrs = TRUE; - for (; i_know < known_addresses_len; i_know++) { + while (i_know > 0) { const NMPlatformIP6Address *know_addr = - NMP_OBJECT_CAST_IP6_ADDRESS(known_addresses->pdata[i_know]); + NMP_OBJECT_CAST_IP6_ADDRESS(known_addresses->pdata[--i_know]); IP6AddrScope know_scope; if (!know_addr) @@ -4114,18 +4343,18 @@ nm_platform_ip_address_sync(NMPlatform *self, if (IN6_ARE_ADDR_EQUAL(&plat_addr->address, &know_addr->address)) { /* we have a match. Mark address as handled. */ - i_know++; - delete_remaining_addrs = FALSE; goto next_plat; } - /* plat_address has no match. Now delete_remaining_addrs is TRUE and we will - * delete all the remaining addresses with cur_scope. */ + /* "plat_address" has no match. "delete_remaining_addrs" will be set to TRUE and we will + * delete all the remaining addresses with "cur_scope". */ break; } + delete_remaining_addrs = TRUE; } - nm_platform_ip6_address_delete(self, ifindex, plat_addr->address, plat_addr->plen); + g_hash_table_add(_plat_addrs_to_delete_ensure(&plat_addrs_to_delete), + (gpointer) nmp_object_ref(plat_obj)); next_plat:; } } @@ -4134,33 +4363,69 @@ next_plat:; if (!known_addresses) return TRUE; - if (IS_IPv4) - ip4_addr_subnets_destroy_index(known_subnets, known_addresses); + success = TRUE; /* Add missing addresses. New addresses are added by kernel with top * priority. */ - for (i_know = 0; i_know < known_addresses->len; i_know++) { + for (i = 0; i < known_addresses->len; i++) { + const NMPObject *plat_obj; + const NMPObject *known_obj; const NMPlatformIPXAddress *known_address; - const NMPObject *o; guint32 lifetime; guint32 preferred; - o = known_addresses->pdata[i_know]; - if (!o) + /* IPv4 addresses we need to add in the order most important first. + * IPv6 addresses we need to add in the reverse order with least + * important first. Kernel will interpret the last address as most + * important. + * + * @known_addresses is always in the order most-important-first. */ + i_know = IS_IPv4 ? i : (known_addresses->len - i - 1u); + + known_obj = known_addresses->pdata[i_know]; + if (!known_obj) continue; - nm_assert(NMP_OBJECT_GET_TYPE(o) == NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)); + nm_assert(NMP_OBJECT_GET_TYPE(known_obj) == NMP_OBJECT_TYPE_IP_ADDRESS(IS_IPv4)); - known_address = NMP_OBJECT_CAST_IPX_ADDRESS(o); + known_address = NMP_OBJECT_CAST_IPX_ADDRESS(known_obj); lifetime = nmp_utils_lifetime_get(known_address->ax.timestamp, known_address->ax.lifetime, known_address->ax.preferred, - now, + &now, &preferred); nm_assert(lifetime > 0); + plat_obj = nm_platform_ip_address_get(self, addr_family, ifindex, known_address); + + if (plat_obj && nm_g_hash_table_contains(plat_addrs_to_delete, plat_obj)) { + /* This address exists, but it had the wrong priority earlier. We + * cannot just update it, we need to remove it first. */ + nm_platform_ip_address_delete(self, + addr_family, + ifindex, + NMP_OBJECT_CAST_IP_ADDRESS(plat_obj)); + plat_obj = NULL; + } + + if (plat_obj + && nm_platform_vtable_address.vx[IS_IPv4].address_cmp( + known_address, + NMP_OBJECT_CAST_IPX_ADDRESS(plat_obj), + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY) + == 0) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + + /* The object is already added. Skip update. */ + _LOG3T( + "address: skip updating IPv%c address: %s", + nm_utils_addr_family_to_char(addr_family), + nmp_object_to_string(known_obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); + continue; + } + if (IS_IPv4) { if (!nm_platform_ip4_address_add( self, @@ -4172,9 +4437,8 @@ next_plat:; lifetime, preferred, IFA_F_NOPREFIXROUTE, - known_address->a4.label)) { - /* ignore error, for unclear reasons. */ - } + known_address->a4.label)) + success = FALSE; } else { if (!nm_platform_ip6_address_add(self, ifindex, @@ -4184,11 +4448,11 @@ next_plat:; lifetime, preferred, IFA_F_NOPREFIXROUTE | known_address->a6.n_ifa_flags)) - return FALSE; + success = FALSE; } } - return TRUE; + return success; } gboolean @@ -4254,7 +4518,7 @@ nm_platform_ip_address_get_prune_list(NMPlatform *self, const int IS_IPv4 = NM_IS_IPv4(addr_family); const NMDedupMultiHeadEntry *head_entry; NMPLookup lookup; - GPtrArray *result; + GPtrArray *result = NULL; CList *iter; nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(NM_IS_IPv4(addr_family)), ifindex); @@ -4264,8 +4528,6 @@ nm_platform_ip_address_get_prune_list(NMPlatform *self, if (!head_entry) return NULL; - result = g_ptr_array_new_full(head_entry->len, (GDestroyNotify) nmp_object_unref); - c_list_for_each (iter, &head_entry->lst_entries_head) { const NMPObject *obj = c_list_entry(iter, NMDedupMultiEntry, lst_entries)->obj; @@ -4275,13 +4537,12 @@ nm_platform_ip_address_get_prune_list(NMPlatform *self, continue; } + if (!result) + result = g_ptr_array_new_full(head_entry->len, (GDestroyNotify) nmp_object_unref); + g_ptr_array_add(result, (gpointer) nmp_object_ref(obj)); } - if (result->len == 0) { - g_ptr_array_unref(result); - return NULL; - } return result; } @@ -4292,7 +4553,7 @@ nm_platform_ip_route_get_prune_list(NMPlatform *self, NMIPRouteTableSyncMode route_table_sync) { NMPLookup lookup; - GPtrArray *routes_prune; + GPtrArray *routes_prune = NULL; const NMDedupMultiHeadEntry *head_entry; CList *iter; NMPlatformIP4Route rt_local4; @@ -4324,8 +4585,6 @@ nm_platform_ip_route_get_prune_list(NMPlatform *self, rt_local6.plen = 0; rt_mcast6.plen = 0; - routes_prune = g_ptr_array_new_full(head_entry->len, (GDestroyNotify) nm_dedup_multi_obj_unref); - c_list_for_each (iter, &head_entry->lst_entries_head) { const NMPObject *obj = c_list_entry(iter, NMDedupMultiEntry, lst_entries)->obj; const NMPlatformIPXRoute *rt = NMP_OBJECT_CAST_IPX_ROUTE(obj); @@ -4463,13 +4722,14 @@ nm_platform_ip_route_get_prune_list(NMPlatform *self, break; } + if (!routes_prune) { + routes_prune = + g_ptr_array_new_full(head_entry->len, (GDestroyNotify) nm_dedup_multi_obj_unref); + } + g_ptr_array_add(routes_prune, (gpointer) nmp_object_ref(obj)); } - if (routes_prune->len == 0) { - g_ptr_array_unref(routes_prune); - return NULL; - } return routes_prune; } @@ -4506,8 +4766,8 @@ nm_platform_ip_route_sync(NMPlatform *self, guint i; int i_type; gboolean success = TRUE; - char sbuf1[sizeof(_nm_utils_to_string_buffer)]; - char sbuf2[sizeof(_nm_utils_to_string_buffer)]; + char sbuf1[NM_UTILS_TO_STRING_BUFFER_SIZE]; + char sbuf2[NM_UTILS_TO_STRING_BUFFER_SIZE]; nm_assert(NM_IS_PLATFORM(self)); nm_assert(ifindex > 0); @@ -4854,7 +5114,7 @@ nm_platform_ip_route_normalize(int addr_family, NMPlatformIPRoute *route) static int _ip_route_add(NMPlatform *self, NMPNlmFlags flags, int addr_family, gconstpointer route) { - char sbuf[sizeof(_nm_utils_to_string_buffer)]; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; int ifindex; _CHECK_SELF(self, klass, FALSE); @@ -4906,7 +5166,8 @@ nm_platform_ip6_route_add(NMPlatform *self, NMPNlmFlags flags, const NMPlatformI gboolean nm_platform_object_delete(NMPlatform *self, const NMPObject *obj) { - int ifindex; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + int ifindex; _CHECK_SELF(self, klass, FALSE); @@ -4914,7 +5175,7 @@ nm_platform_object_delete(NMPlatform *self, const NMPObject *obj) case NMP_OBJECT_TYPE_ROUTING_RULE: _LOGD("%s: delete %s", NMP_OBJECT_GET_CLASS(obj)->obj_type_name, - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); break; case NMP_OBJECT_TYPE_IP4_ROUTE: case NMP_OBJECT_TYPE_IP6_ROUTE: @@ -4923,7 +5184,7 @@ nm_platform_object_delete(NMPlatform *self, const NMPObject *obj) ifindex = NMP_OBJECT_CAST_OBJ_WITH_IFINDEX(obj)->ifindex; _LOG3D("%s: delete %s", NMP_OBJECT_GET_CLASS(obj)->obj_type_name, - nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); break; default: g_return_val_if_reached(FALSE); @@ -4941,6 +5202,7 @@ nm_platform_ip_route_get(NMPlatform *self, int oif_ifindex, NMPObject **out_route) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; nm_auto_nmpobj NMPObject *route = NULL; int result; char buf[NM_UTILS_INET_ADDRSTRLEN]; @@ -4977,7 +5239,7 @@ nm_platform_ip_route_get(NMPlatform *self, _LOGD("route: get IPv%c route for: %s succeeded: %s", nm_utils_addr_family_to_char(addr_family), inet_ntop(addr_family, address, buf, sizeof(buf)), - nmp_object_to_string(route, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(route, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); NM_SET_OUT(out_route, g_steal_pointer(&route)); } return result; @@ -5004,6 +5266,7 @@ _ip4_dev_route_blacklist_timeout_ms_marked(gint64 timeout_msec) static gboolean _ip4_dev_route_blacklist_check_cb(gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPlatform *self = user_data; NMPlatformPrivate *priv = NM_PLATFORM_GET_PRIVATE(self); GHashTableIter iter; @@ -5034,7 +5297,7 @@ again: continue; _LOGT("ip4-dev-route: delete %s", - nmp_object_to_string(p_obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(p_obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); nm_platform_object_delete(self, p_obj); goto again; } @@ -5097,6 +5360,7 @@ _ip4_dev_route_blacklist_notify_route(NMPlatform *self, const NMPObject *obj) static gboolean _ip4_dev_route_blacklist_gc_timeout_handle(gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPlatform *self = user_data; NMPlatformPrivate *priv = NM_PLATFORM_GET_PRIVATE(self); GHashTableIter iter; @@ -5112,7 +5376,7 @@ _ip4_dev_route_blacklist_gc_timeout_handle(gpointer user_data) while (g_hash_table_iter_next(&iter, (gpointer *) &p_obj, (gpointer *) &p_timeout_ms)) { if (now_ms > _ip4_dev_route_blacklist_timeout_ms_get(*p_timeout_ms)) { _LOGT("ip4-dev-route: cleanup %s", - nmp_object_to_string(p_obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(p_obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); g_hash_table_iter_remove(&iter); } } @@ -5172,6 +5436,7 @@ nm_platform_ip4_dev_route_blacklist_set(NMPlatform *self, int ifindex, GPtrArray *ip4_dev_route_blacklist) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; NMPlatformPrivate *priv; GHashTableIter iter; const NMPObject *p_obj; @@ -5227,14 +5492,17 @@ nm_platform_ip4_dev_route_blacklist_set(NMPlatform *self, if (nmp_object_equal(p_obj, o)) { /* un-expire and reuse the entry. */ _LOGT("ip4-dev-route: register %s (update)", - nmp_object_to_string(p_obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(p_obj, + NMP_OBJECT_TO_STRING_PUBLIC, + sbuf, + sizeof(sbuf))); *p_timeout_ms = timeout_msec_val; continue; } } _LOGT("ip4-dev-route: register %s", - nmp_object_to_string(o, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(o, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); p_timeout_ms = g_slice_new(gint64); *p_timeout_ms = timeout_msec_val; g_hash_table_replace(priv->ip4_dev_route_blacklist_hash, @@ -5256,12 +5524,13 @@ nm_platform_routing_rule_add(NMPlatform *self, NMPNlmFlags flags, const NMPlatformRoutingRule *routing_rule) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; _CHECK_SELF(self, klass, -NME_BUG); g_return_val_if_fail(routing_rule, -NME_BUG); _LOGD("routing-rule: adding or updating: %s", - nm_platform_routing_rule_to_string(routing_rule, NULL, 0)); + nm_platform_routing_rule_to_string(routing_rule, sbuf, sizeof(sbuf))); return klass->routing_rule_add(self, flags, routing_rule); } @@ -5270,13 +5539,15 @@ nm_platform_routing_rule_add(NMPlatform *self, int nm_platform_qdisc_add(NMPlatform *self, NMPNlmFlags flags, const NMPlatformQdisc *qdisc) { - int ifindex = qdisc->ifindex; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + int ifindex = qdisc->ifindex; _CHECK_SELF(self, klass, -NME_BUG); /* Note: @qdisc must not be copied or kept alive because the lifetime of qdisc.kind * is undefined. */ - _LOG3D("adding or updating a qdisc: %s", nm_platform_qdisc_to_string(qdisc, NULL, 0)); + _LOG3D("adding or updating a qdisc: %s", + nm_platform_qdisc_to_string(qdisc, sbuf, sizeof(sbuf))); return klass->qdisc_add(self, flags, qdisc); } @@ -5294,13 +5565,15 @@ nm_platform_qdisc_delete(NMPlatform *self, int ifindex, guint32 parent, gboolean int nm_platform_tfilter_add(NMPlatform *self, NMPNlmFlags flags, const NMPlatformTfilter *tfilter) { - int ifindex = tfilter->ifindex; + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + int ifindex = tfilter->ifindex; _CHECK_SELF(self, klass, -NME_BUG); /* Note: @tfilter must not be copied or kept alive because the lifetime of tfilter.kind * and tfilter.action.kind is undefined. */ - _LOG3D("adding or updating a tfilter: %s", nm_platform_tfilter_to_string(tfilter, NULL, 0)); + _LOG3D("adding or updating a tfilter: %s", + nm_platform_tfilter_to_string(tfilter, sbuf, sizeof(sbuf))); return klass->tfilter_add(self, flags, tfilter); } @@ -6251,7 +6524,6 @@ nm_platform_ip4_address_to_string(const NMPlatformIP4Address *address, char *buf "%s" /* label */ " src %s" "%s" /* a_acd_not_ready */ - "%s" /* a_assume_config_once */ "%s" /* a_force_commit */ "", s_address, @@ -6271,7 +6543,6 @@ nm_platform_ip4_address_to_string(const NMPlatformIP4Address *address, char *buf str_label, nmp_utils_ip_config_source_to_string(address->addr_source, s_source, sizeof(s_source)), address->a_acd_not_ready ? " ip4acd-not-ready" : "", - address->a_assume_config_once ? " assume-config-once" : "", address->a_force_commit ? " force-commit" : ""); g_free(str_peer); return buf; @@ -6392,7 +6663,6 @@ nm_platform_ip6_address_to_string(const NMPlatformIP6Address *address, char *buf buf, len, "%s/%d lft %s pref %s%s%s%s%s src %s" - "%s" /* a_assume_config_once */ "%s" /* a_force_commit */ "", s_address, @@ -6404,7 +6674,6 @@ nm_platform_ip6_address_to_string(const NMPlatformIP6Address *address, char *buf str_dev, _to_string_ifa_flags(address->n_ifa_flags, s_flags, sizeof(s_flags)), nmp_utils_ip_config_source_to_string(address->addr_source, s_source, sizeof(s_source)), - address->a_assume_config_once ? " assume-config-once" : "", address->a_force_commit ? " force-commit" : ""); g_free(str_peer); return buf; @@ -6508,7 +6777,6 @@ nm_platform_ip4_route_to_string(const NMPlatformIP4Route *route, char *buf, gsiz "%s" /* initcwnd */ "%s" /* initrwnd */ "%s" /* mtu */ - "%s" /* r_assume_config_once */ "%s" /* r_force_commit */ "", nm_net_aux_rtnl_rtntype_n2a_maybe_buf(nm_platform_route_type_uncoerce(route->type_coerced), @@ -6567,7 +6835,6 @@ nm_platform_ip4_route_to_string(const NMPlatformIP4Route *route, char *buf, gsiz route->lock_mtu ? "lock " : "", route->mtu) : "", - route->r_assume_config_once ? " assume-config-once" : "", route->r_force_commit ? " force-commit" : ""); return buf; } @@ -6643,7 +6910,6 @@ nm_platform_ip6_route_to_string(const NMPlatformIP6Route *route, char *buf, gsiz "%s" /* initrwnd */ "%s" /* mtu */ "%s" /* pref */ - "%s" /* r_assume_config_once */ "%s" /* r_force_commit */ "", nm_net_aux_rtnl_rtntype_n2a_maybe_buf(nm_platform_route_type_uncoerce(route->type_coerced), @@ -6706,7 +6972,6 @@ nm_platform_ip6_route_to_string(const NMPlatformIP6Route *route, char *buf, gsiz " pref %s", nm_icmpv6_router_pref_to_string(route->rt_pref, str_pref2, sizeof(str_pref2))) : "", - route->r_assume_config_once ? " assume-config-once" : "", route->r_force_commit ? " force-commit" : ""); return buf; @@ -7746,8 +8011,8 @@ nm_platform_ip4_address_pretty_sort_cmp(const NMPlatformIP4Address *a1, * subnet (and thus also the primary/secondary role) is * preserved. */ - n1 = a1->address & _nm_utils_ip4_prefix_to_netmask(a1->plen); - n2 = a2->address & _nm_utils_ip4_prefix_to_netmask(a2->plen); + n1 = nm_utils_ip4_address_clear_host_address(a1->address, a1->plen); + n2 = nm_utils_ip4_address_clear_host_address(a2->address, a2->plen); NM_CMP_DIRECT_MEMCMP(&n1, &n2, sizeof(guint32)); return 0; } @@ -7770,6 +8035,25 @@ _address_pretty_sort_get_prio_6(const struct in6_addr *addr) return 6; } +static int +_address_cmp_expiry(const NMPlatformIPAddress *a, const NMPlatformIPAddress *b) +{ + guint32 lifetime_a; + guint32 lifetime_b; + guint32 preferred_a; + guint32 preferred_b; + gint32 now = 0; + + lifetime_a = + nmp_utils_lifetime_get(a->timestamp, a->lifetime, a->preferred, &now, &preferred_a); + lifetime_b = + nmp_utils_lifetime_get(b->timestamp, b->lifetime, b->preferred, &now, &preferred_b); + + NM_CMP_DIRECT(lifetime_a, lifetime_b); + NM_CMP_DIRECT(preferred_a, preferred_b); + return 0; +} + int nm_platform_ip6_address_pretty_sort_cmp(const NMPlatformIP6Address *a1, const NMPlatformIP6Address *a2, @@ -7843,71 +8127,122 @@ nm_platform_ip4_address_hash_update(const NMPlatformIP4Address *obj, NMHashState NM_HASH_COMBINE_BOOLS(guint8, obj->use_ip4_broadcast_address, obj->a_acd_not_ready, - obj->a_assume_config_once, obj->a_force_commit)); nm_hash_update_strarr(h, obj->label); } int -nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, const NMPlatformIP4Address *b) +nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, + const NMPlatformIP4Address *b, + NMPlatformIPAddressCmpType cmp_type) { NM_CMP_SELF(a, b); + NM_CMP_FIELD(a, b, ifindex); - NM_CMP_FIELD(a, b, address); NM_CMP_FIELD(a, b, plen); - NM_CMP_FIELD(a, b, peer_address); - 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); - NM_CMP_FIELD(a, b, preferred); - NM_CMP_FIELD(a, b, n_ifa_flags); - NM_CMP_FIELD_STR(a, b, label); - NM_CMP_FIELD_UNSAFE(a, b, a_acd_not_ready); - NM_CMP_FIELD_UNSAFE(a, b, a_assume_config_once); - NM_CMP_FIELD_UNSAFE(a, b, a_force_commit); - return 0; + NM_CMP_FIELD(a, b, address); + + switch (cmp_type) { + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_ID: + /* for IPv4 addresses, you can add the same local address with differing peer-address + * (IFA_ADDRESS), provided that their net-part differs. */ + NM_CMP_DIRECT_IN4ADDR_SAME_PREFIX(a->peer_address, b->peer_address, a->plen); + return 0; + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY: + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_FULL: + NM_CMP_FIELD(a, b, peer_address); + NM_CMP_FIELD_STR(a, b, label); + if (cmp_type == NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY) { + NM_CMP_RETURN(_address_cmp_expiry((const NMPlatformIPAddress *) a, + (const NMPlatformIPAddress *) b)); + + /* Most flags are set by kernel. We only compare the ones that + * NetworkManager actively sets. + * + * NM actively only sets IFA_F_NOPREFIXROUTE (and IFA_F_MANAGETEMPADDR for IPv6), + * where nm_platform_ip_address_sync() always sets IFA_F_NOPREFIXROUTE. + * There are thus no flags to compare for IPv4. */ + + NM_CMP_DIRECT(nm_platform_ip4_broadcast_address_from_addr(a), + nm_platform_ip4_broadcast_address_from_addr(b)); + } else { + NM_CMP_FIELD(a, b, timestamp); + NM_CMP_FIELD(a, b, lifetime); + NM_CMP_FIELD(a, b, preferred); + NM_CMP_FIELD(a, b, n_ifa_flags); + NM_CMP_FIELD(a, b, addr_source); + 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_UNSAFE(a, b, a_acd_not_ready); + NM_CMP_FIELD_UNSAFE(a, b, a_force_commit); + } + return 0; + } + return nm_assert_unreachable_val(0); } void nm_platform_ip6_address_hash_update(const NMPlatformIP6Address *obj, NMHashState *h) { - nm_hash_update_vals( - h, - obj->ifindex, - obj->addr_source, - obj->timestamp, - obj->lifetime, - obj->preferred, - obj->n_ifa_flags, - obj->plen, - obj->address, - obj->peer_address, - NM_HASH_COMBINE_BOOLS(guint8, obj->a_assume_config_once, obj->a_force_commit)); + nm_hash_update_vals(h, + obj->ifindex, + obj->addr_source, + obj->timestamp, + obj->lifetime, + obj->preferred, + obj->n_ifa_flags, + obj->plen, + obj->address, + obj->peer_address, + NM_HASH_COMBINE_BOOLS(guint8, obj->a_force_commit)); } int -nm_platform_ip6_address_cmp(const NMPlatformIP6Address *a, const NMPlatformIP6Address *b) +nm_platform_ip6_address_cmp(const NMPlatformIP6Address *a, + const NMPlatformIP6Address *b, + NMPlatformIPAddressCmpType cmp_type) { const struct in6_addr *p_a, *p_b; NM_CMP_SELF(a, b); + NM_CMP_FIELD(a, b, ifindex); - NM_CMP_FIELD_MEMCMP(a, b, address); - NM_CMP_FIELD(a, b, plen); - p_a = nm_platform_ip6_address_get_peer(a); - p_b = nm_platform_ip6_address_get_peer(b); - NM_CMP_DIRECT_MEMCMP(p_a, p_b, sizeof(*p_a)); - NM_CMP_FIELD(a, b, addr_source); - NM_CMP_FIELD(a, b, timestamp); - NM_CMP_FIELD(a, b, lifetime); - NM_CMP_FIELD(a, b, preferred); - NM_CMP_FIELD(a, b, n_ifa_flags); - NM_CMP_FIELD_UNSAFE(a, b, a_assume_config_once); - NM_CMP_FIELD_UNSAFE(a, b, a_force_commit); - return 0; + NM_CMP_FIELD_IN6ADDR(a, b, address); + + switch (cmp_type) { + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_ID: + /* for IPv6 addresses, the prefix length is not part of the primary identifier. */ + return 0; + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY: + case NM_PLATFORM_IP_ADDRESS_CMP_TYPE_FULL: + NM_CMP_FIELD(a, b, plen); + p_a = nm_platform_ip6_address_get_peer(a); + p_b = nm_platform_ip6_address_get_peer(b); + NM_CMP_DIRECT_MEMCMP(p_a, p_b, sizeof(*p_a)); + if (cmp_type == NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY) { + NM_CMP_RETURN(_address_cmp_expiry((const NMPlatformIPAddress *) a, + (const NMPlatformIPAddress *) b)); + + /* Most flags are set by kernel. We only compare the ones that + * NetworkManager actively sets. + * + * NM actively only sets IFA_F_NOPREFIXROUTE and IFA_F_MANAGETEMPADDR, + * where nm_platform_ip_address_sync() always sets IFA_F_NOPREFIXROUTE. + * We thus only care about IFA_F_MANAGETEMPADDR. */ + NM_CMP_DIRECT(a->n_ifa_flags & IFA_F_MANAGETEMPADDR, + b->n_ifa_flags & IFA_F_MANAGETEMPADDR); + } else { + NM_CMP_FIELD(a, b, timestamp); + NM_CMP_FIELD(a, b, lifetime); + NM_CMP_FIELD(a, b, preferred); + NM_CMP_FIELD(a, b, n_ifa_flags); + NM_CMP_FIELD(a, b, addr_source); + NM_CMP_FIELD_UNSAFE(a, b, a_force_commit); + } + return 0; + } + return nm_assert_unreachable_val(0); } void @@ -8007,7 +8342,7 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, obj->initrwnd, obj->mtu, obj->r_rtm_flags, - NM_HASH_COMBINE_BOOLS(guint16, + NM_HASH_COMBINE_BOOLS(guint8, obj->metric_any, obj->table_any, obj->lock_window, @@ -8015,7 +8350,6 @@ nm_platform_ip4_route_hash_update(const NMPlatformIP4Route *obj, obj->lock_initcwnd, obj->lock_initrwnd, obj->lock_mtu, - obj->r_assume_config_once, obj->r_force_commit)); break; } @@ -8106,10 +8440,8 @@ nm_platform_ip4_route_cmp(const NMPlatformIP4Route *a, NM_CMP_FIELD(a, b, initcwnd); NM_CMP_FIELD(a, b, initrwnd); NM_CMP_FIELD(a, b, mtu); - if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_FULL) { - NM_CMP_FIELD_UNSAFE(a, b, r_assume_config_once); + if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_FULL) NM_CMP_FIELD_UNSAFE(a, b, r_force_commit); - } break; } return 0; @@ -8202,7 +8534,6 @@ nm_platform_ip6_route_hash_update(const NMPlatformIP6Route *obj, obj->lock_initcwnd, obj->lock_initrwnd, obj->lock_mtu, - obj->r_assume_config_once, obj->r_force_commit), obj->window, obj->cwnd, @@ -8286,10 +8617,8 @@ nm_platform_ip6_route_cmp(const NMPlatformIP6Route *a, NM_CMP_DIRECT(_route_pref_normalize(a->rt_pref), _route_pref_normalize(b->rt_pref)); else NM_CMP_FIELD(a, b, rt_pref); - if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_FULL) { - NM_CMP_FIELD_UNSAFE(a, b, r_assume_config_once); + if (cmp_type == NM_PLATFORM_IP_ROUTE_CMP_TYPE_FULL) NM_CMP_FIELD_UNSAFE(a, b, r_force_commit); - } break; } return 0; @@ -8651,9 +8980,11 @@ log_link(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: link %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_link_to_string(device, NULL, 0)); + nm_platform_link_to_string(device, sbuf, sizeof(sbuf))); } static void @@ -8664,9 +8995,11 @@ log_ip4_address(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: address 4 %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_ip4_address_to_string(address, NULL, 0)); + nm_platform_ip4_address_to_string(address, sbuf, sizeof(sbuf))); } static void @@ -8677,9 +9010,11 @@ log_ip6_address(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: address 6 %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_ip6_address_to_string(address, NULL, 0)); + nm_platform_ip6_address_to_string(address, sbuf, sizeof(sbuf))); } static void @@ -8690,9 +9025,11 @@ log_ip4_route(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: route 4 %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_ip4_route_to_string(route, NULL, 0)); + nm_platform_ip4_route_to_string(route, sbuf, sizeof(sbuf))); } static void @@ -8703,9 +9040,11 @@ log_ip6_route(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: route 6 %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_ip6_route_to_string(route, NULL, 0)); + nm_platform_ip6_route_to_string(route, sbuf, sizeof(sbuf))); } static void @@ -8716,10 +9055,12 @@ log_routing_rule(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + /* routing rules don't have an ifindex. We probably should refactor the signals that are emitted for platform changes. */ _LOG3D("signal: rt-rule %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_routing_rule_to_string(routing_rule, NULL, 0)); + nm_platform_routing_rule_to_string(routing_rule, sbuf, sizeof(sbuf))); } static void @@ -8730,9 +9071,11 @@ log_qdisc(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: qdisc %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_qdisc_to_string(qdisc, NULL, 0)); + nm_platform_qdisc_to_string(qdisc, sbuf, sizeof(sbuf))); } static void @@ -8743,9 +9086,11 @@ log_tfilter(NMPlatform *self, NMPlatformSignalChangeType change_type, gpointer user_data) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + _LOG3D("signal: tfilter %7s: %s", nm_platform_signal_change_type_to_string(change_type), - nm_platform_tfilter_to_string(tfilter, NULL, 0)); + nm_platform_tfilter_to_string(tfilter, sbuf, sizeof(sbuf))); } /*****************************************************************************/ @@ -8756,6 +9101,7 @@ nm_platform_cache_update_emit_signal(NMPlatform *self, const NMPObject *obj_old, const NMPObject *obj_new) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; gboolean visible_new; gboolean visible_old; const NMPObject *o; @@ -8818,7 +9164,7 @@ nm_platform_cache_update_emit_signal(NMPlatform *self, _LOG3t("emit signal %s %s: %s", klass->signal_type, nm_platform_signal_change_type_to_string((NMPlatformSignalChangeType) cache_op), - nmp_object_to_string(o, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(o, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); nmp_object_ref(o); g_signal_emit(self, @@ -8863,6 +9209,37 @@ nm_platform_netns_push(NMPlatform *self, NMPNetns **netns) /*****************************************************************************/ +const _NMPlatformVTableAddressUnion nm_platform_vtable_address = { + .v4 = + { + .is_ip4 = TRUE, + .obj_type = NMP_OBJECT_TYPE_IP4_ADDRESS, + .addr_family = AF_INET, + .sizeof_address = sizeof(NMPlatformIP4Address), + .address_cmp = + (int (*)(const NMPlatformIPXAddress *a, + const NMPlatformIPXAddress *b, + NMPlatformIPAddressCmpType cmp_type)) nm_platform_ip4_address_cmp, + .address_to_string = (const char *(*) (const NMPlatformIPXAddress *address, + char *buf, + gsize len)) nm_platform_ip4_address_to_string, + }, + .v6 = + { + .is_ip4 = FALSE, + .obj_type = NMP_OBJECT_TYPE_IP6_ADDRESS, + .addr_family = AF_INET6, + .sizeof_address = sizeof(NMPlatformIP6Address), + .address_cmp = + (int (*)(const NMPlatformIPXAddress *a, + const NMPlatformIPXAddress *b, + NMPlatformIPAddressCmpType cmp_type)) nm_platform_ip6_address_cmp, + .address_to_string = (const char *(*) (const NMPlatformIPXAddress *address, + char *buf, + gsize len)) nm_platform_ip6_address_to_string, + }, +}; + const _NMPlatformVTableRouteUnion nm_platform_vtable_route = { .v4 = { diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index 6f5cd524..246d6ff6 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -94,6 +94,14 @@ typedef enum { NMP_NLM_FLAG_TEST = NMP_NLM_FLAG_F_EXCL, } NMPNlmFlags; +typedef enum { + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_ID, + + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_SEMANTICALLY, + + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_FULL, +} NMPlatformIPAddressCmpType; + typedef enum { /* compare fields which kernel considers as similar routes. * It is a looser comparisong then NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID @@ -259,17 +267,17 @@ struct _NMPlatformLink { bool initialized : 1; }; -typedef enum { /*< skip >*/ - NM_PLATFORM_SIGNAL_ID_NONE, - NM_PLATFORM_SIGNAL_ID_LINK, - NM_PLATFORM_SIGNAL_ID_IP4_ADDRESS, - NM_PLATFORM_SIGNAL_ID_IP6_ADDRESS, - NM_PLATFORM_SIGNAL_ID_IP4_ROUTE, - NM_PLATFORM_SIGNAL_ID_IP6_ROUTE, - NM_PLATFORM_SIGNAL_ID_ROUTING_RULE, - NM_PLATFORM_SIGNAL_ID_QDISC, - NM_PLATFORM_SIGNAL_ID_TFILTER, - _NM_PLATFORM_SIGNAL_ID_LAST, +typedef enum { + NM_PLATFORM_SIGNAL_ID_NONE, + NM_PLATFORM_SIGNAL_ID_LINK, + NM_PLATFORM_SIGNAL_ID_IP4_ADDRESS, + NM_PLATFORM_SIGNAL_ID_IP6_ADDRESS, + NM_PLATFORM_SIGNAL_ID_IP4_ROUTE, + NM_PLATFORM_SIGNAL_ID_IP6_ROUTE, + NM_PLATFORM_SIGNAL_ID_ROUTING_RULE, + NM_PLATFORM_SIGNAL_ID_QDISC, + NM_PLATFORM_SIGNAL_ID_TFILTER, + _NM_PLATFORM_SIGNAL_ID_LAST, } NMPlatformSignalIdType; guint _nm_platform_signal_id_get(NMPlatformSignalIdType signal_type); @@ -323,8 +331,6 @@ typedef enum { /* Meta flags not honored by NMPlatform (netlink code). Instead, they can be * used by the upper layers which use NMPlatformIPRoute to track addresses that * should be configured. */ \ - /* Whether the address is should be configured once during assume. */ \ - bool a_assume_config_once : 1; \ bool a_force_commit : 1; \ \ guint8 plen; \ @@ -468,12 +474,9 @@ typedef union { * 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; \ - \ /* Meta flags not honored by NMPlatform (netlink code). Instead, they can be * used by the upper layers which use NMPlatformIPRoute to track routes that * should be configured. */ \ - /* Whether the route is should be configured once during assume. */ \ - bool r_assume_config_once : 1; \ /* Whether the route should be committed even if it was removed externally. */ \ bool r_force_commit : 1; \ \ @@ -776,10 +779,31 @@ typedef struct { #undef __NMPlatformObjWithIfindex_COMMON typedef struct { - gboolean is_ip4; + bool is_ip4; + NMPObjectType obj_type; + gint8 addr_family; + guint8 sizeof_address; + int (*address_cmp)(const NMPlatformIPXAddress *a, + const NMPlatformIPXAddress *b, + NMPlatformIPAddressCmpType cmp_type); + const char *(*address_to_string)(const NMPlatformIPXAddress *address, char *buf, gsize len); +} NMPlatformVTableAddress; + +typedef union { + struct { + NMPlatformVTableAddress v6; + NMPlatformVTableAddress v4; + }; + NMPlatformVTableAddress vx[2]; +} _NMPlatformVTableAddressUnion; + +extern const _NMPlatformVTableAddressUnion nm_platform_vtable_address; + +typedef struct { + bool is_ip4; + gint8 addr_family; + guint8 sizeof_route; NMPObjectType obj_type; - int addr_family; - gsize sizeof_route; int (*route_cmp)(const NMPlatformIPXRoute *a, const NMPlatformIPXRoute *b, NMPlatformIPRouteCmpType cmp_type); @@ -1017,6 +1041,14 @@ typedef void (*NMPlatformAsyncCallback)(GError *error, gpointer user_data); /*****************************************************************************/ +typedef struct _NMPlatformCsmeConnInfo { + guint8 ssid[32]; + guint32 channel; + NMEtherAddr addr; + guint8 sta_cipher; + guint8 auth_mode; +} NMPlatformCsmeConnInfo; + typedef enum { NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_L3MDEV, NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_UID_RANGE, @@ -1105,6 +1137,9 @@ typedef struct { guint32 mtu, gconstpointer extra_data, const NMPlatformLink **out_link); + + int (*link_change)(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data); + gboolean (*link_delete)(NMPlatform *self, int ifindex); gboolean (*link_refresh)(NMPlatform *self, int ifindex); gboolean (*link_set_netns)(NMPlatform *self, int ifindex, int netns_fd); @@ -1204,6 +1239,10 @@ typedef struct { gboolean (*wifi_set_wake_on_wlan)(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan wowl); + gboolean (*wifi_get_csme_conn_info)(NMPlatform *self, + int ifindex, + NMPlatformCsmeConnInfo *out_conn_info); + gboolean (*wifi_get_device_from_csme)(NMPlatform *self, int ifindex); guint32 (*mesh_get_channel)(NMPlatform *self, int ifindex); gboolean (*mesh_set_channel)(NMPlatform *self, int ifindex, guint32 channel); @@ -1411,7 +1450,11 @@ _nm_platform_link_get_inet6_addr_gen_mode(const NMPlatformLink *pllink) static inline gboolean nm_platform_route_type_is_nodev(guint8 type) { - return NM_IN_SET(type, 6 /* RTN_BLACKHOLE */, 7 /* RTN_UNREACHABLE */, 8 /* RTN_PROHIBIT */); + return NM_IN_SET(type, + 6 /* RTN_BLACKHOLE */, + 7 /* RTN_UNREACHABLE */, + 8 /* RTN_PROHIBIT */, + 9 /* RTN_THROW */); } /** @@ -1570,6 +1613,9 @@ int nm_platform_link_add(NMPlatform *self, gconstpointer extra_data, const NMPlatformLink **out_link); +int +nm_platform_link_change(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data); + static inline int nm_platform_link_veth_add(NMPlatform *self, const char *name, @@ -1605,6 +1651,12 @@ nm_platform_link_bridge_add(NMPlatform *self, out_link); } +static inline int +nm_platform_link_bridge_change(NMPlatform *self, int ifindex, const NMPlatformLnkBridge *props) +{ + return nm_platform_link_change(self, NM_LINK_TYPE_BRIDGE, ifindex, props); +} + static inline int nm_platform_link_bond_add(NMPlatform *self, const char *name, const NMPlatformLink **out_link) { @@ -2024,6 +2076,10 @@ void nm_platform_wifi_indicate_addressing_running(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan nm_platform_wifi_get_wake_on_wlan(NMPlatform *self, int ifindex); gboolean nm_platform_wifi_set_wake_on_wlan(NMPlatform *self, int ifindex, _NMSettingWirelessWakeOnWLan wowl); +gboolean nm_platform_wifi_get_csme_conn_info(NMPlatform *self, + int ifindex, + NMPlatformCsmeConnInfo *out_conn_info); +gboolean nm_platform_wifi_get_device_from_csme(NMPlatform *self, int ifindex); guint32 nm_platform_mesh_get_channel(NMPlatform *self, int ifindex); gboolean nm_platform_mesh_set_channel(NMPlatform *self, int ifindex, guint32 channel); @@ -2038,6 +2094,11 @@ gboolean nm_platform_wpan_set_channel(NMPlatform *self, int ifindex, guint8 page void nm_platform_ip4_address_set_addr(NMPlatformIP4Address *addr, in_addr_t address, guint8 plen); const struct in6_addr *nm_platform_ip6_address_get_peer(const NMPlatformIP6Address *addr); +const NMPObject *nm_platform_ip_address_get(NMPlatform *self, + int addr_family, + int ifindex, + gconstpointer /* (NMPlatformIPAddress *) */ needle); + const NMPlatformIP4Address *nm_platform_ip4_address_get(NMPlatform *self, int ifindex, in_addr_t address, @@ -2097,6 +2158,29 @@ gboolean nm_platform_ip4_address_delete(NMPlatform *self, gboolean nm_platform_ip6_address_delete(NMPlatform *self, int ifindex, struct in6_addr address, guint8 plen); +static inline gboolean +nm_platform_ip_address_delete(NMPlatform *self, + int addr_family, + int ifindex, + gconstpointer /* (const NMPlatformIPAddress *) */ addr) +{ + if (NM_IS_IPv4(addr_family)) { + const NMPlatformIP4Address *a = addr; + + if (ifindex <= 0) + ifindex = a->ifindex; + + return nm_platform_ip4_address_delete(self, ifindex, a->address, a->plen, a->peer_address); + } else { + const NMPlatformIP6Address *a = addr; + + if (ifindex <= 0) + ifindex = a->ifindex; + + return nm_platform_ip6_address_delete(self, ifindex, a->address, a->plen); + } +} + gboolean nm_platform_ip_address_sync(NMPlatform *self, int addr_family, int ifindex, @@ -2288,8 +2372,24 @@ int nm_platform_lnk_vlan_cmp(const NMPlatformLnkVlan *a, const NMPlatformLnkVlan int nm_platform_lnk_vrf_cmp(const NMPlatformLnkVrf *a, const NMPlatformLnkVrf *b); int nm_platform_lnk_vxlan_cmp(const NMPlatformLnkVxlan *a, const NMPlatformLnkVxlan *b); int nm_platform_lnk_wireguard_cmp(const NMPlatformLnkWireGuard *a, const NMPlatformLnkWireGuard *b); -int nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, const NMPlatformIP4Address *b); -int nm_platform_ip6_address_cmp(const NMPlatformIP6Address *a, const NMPlatformIP6Address *b); +int nm_platform_ip4_address_cmp(const NMPlatformIP4Address *a, + const NMPlatformIP4Address *b, + NMPlatformIPAddressCmpType cmp_type); +int nm_platform_ip6_address_cmp(const NMPlatformIP6Address *a, + const NMPlatformIP6Address *b, + NMPlatformIPAddressCmpType cmp_type); + +static inline int +nm_platform_ip4_address_cmp_full(const NMPlatformIP4Address *a, const NMPlatformIP4Address *b) +{ + return nm_platform_ip4_address_cmp(a, b, NM_PLATFORM_IP_ADDRESS_CMP_TYPE_FULL); +} + +static inline int +nm_platform_ip6_address_cmp_full(const NMPlatformIP6Address *a, const NMPlatformIP6Address *b) +{ + return nm_platform_ip6_address_cmp(a, b, NM_PLATFORM_IP_ADDRESS_CMP_TYPE_FULL); +} int nm_platform_ip4_address_pretty_sort_cmp(const NMPlatformIP4Address *a1, const NMPlatformIP4Address *a2); diff --git a/src/libnm-platform/nmp-base.h b/src/libnm-platform/nmp-base.h index a80fd4d3..48631688 100644 --- a/src/libnm-platform/nmp-base.h +++ b/src/libnm-platform/nmp-base.h @@ -110,7 +110,7 @@ typedef struct _NMPlatformIP6Route NMPlatformIP6Route; typedef struct _NMPlatformLink NMPlatformLink; typedef struct _NMPObject NMPObject; -typedef enum { +typedef enum _nm_packed { NMP_OBJECT_TYPE_UNKNOWN, NMP_OBJECT_TYPE_LINK, diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c index d518e6e5..6c177b4c 100644 --- a/src/libnm-platform/nmp-object.c +++ b/src/libnm-platform/nmp-object.c @@ -799,7 +799,7 @@ nmp_object_new_link(int ifindex) /*****************************************************************************/ -static void +static NMPObject * _nmp_object_stackinit_from_class(NMPObject *obj, const NMPClass *klass) { nm_assert(obj); @@ -812,25 +812,13 @@ _nmp_object_stackinit_from_class(NMPObject *obj, const NMPClass *klass) ._ref_count = NM_OBJ_REF_COUNT_STACKINIT, }, }; + return obj; } static NMPObject * _nmp_object_stackinit_from_type(NMPObject *obj, NMPObjectType obj_type) { - const NMPClass *klass; - - nm_assert(obj); - klass = nmp_class_from_type(obj_type); - nm_assert(klass); - - *obj = (NMPObject){ - .parent = - { - .klass = (const NMDedupMultiObjClass *) klass, - ._ref_count = NM_OBJ_REF_COUNT_STACKINIT, - }, - }; - return obj; + return _nmp_object_stackinit_from_class(obj, nmp_class_from_type(obj_type)); } const NMPObject * @@ -901,7 +889,7 @@ nmp_object_to_string(const NMPObject *obj, gsize buf_size) { const NMPClass *klass; - char buf2[sizeof(_nm_utils_to_string_buffer)]; + char buf2[NM_UTILS_TO_STRING_BUFFER_SIZE]; if (!nm_utils_to_string_buffer_init_null(obj, &buf, &buf_size)) return buf; @@ -992,7 +980,7 @@ _vt_cmd_obj_to_string_lnk_vlan(const NMPObject *obj, gsize buf_size) { const NMPClass *klass; - char buf2[sizeof(_nm_utils_to_string_buffer)]; + char buf2[NM_UTILS_TO_STRING_BUFFER_SIZE]; char *b; gsize l; @@ -1056,7 +1044,7 @@ _vt_cmd_obj_to_string_lnk_wireguard(const NMPObject *obj, gsize buf_size) { const NMPClass *klass; - char buf2[sizeof(_nm_utils_to_string_buffer)]; + char buf2[NM_UTILS_TO_STRING_BUFFER_SIZE]; char *b; guint i; @@ -1523,20 +1511,21 @@ nmp_object_id_cmp(const NMPObject *obj1, const NMPObject *obj2) _vt_cmd_plobj_id_cmp(link, NMPlatformLink, { NM_CMP_FIELD(obj1, obj2, ifindex); }); -_vt_cmd_plobj_id_cmp(ip4_address, NMPlatformIP4Address, { - NM_CMP_FIELD(obj1, obj2, ifindex); - NM_CMP_FIELD(obj1, obj2, plen); - NM_CMP_FIELD(obj1, obj2, address); - /* for IPv4 addresses, you can add the same local address with differing peer-address - * (IFA_ADDRESS), provided that their net-part differs. */ - NM_CMP_DIRECT_IN4ADDR_SAME_PREFIX(obj1->peer_address, obj2->peer_address, obj1->plen); -}); +static int +_vt_cmd_plobj_id_cmp_ip4_address(const NMPlatformObject *obj1, const NMPlatformObject *obj2) +{ + return nm_platform_ip4_address_cmp((const NMPlatformIP4Address *) obj1, + (const NMPlatformIP4Address *) obj2, + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_ID); +} -_vt_cmd_plobj_id_cmp(ip6_address, NMPlatformIP6Address, { - NM_CMP_FIELD(obj1, obj2, ifindex); - /* for IPv6 addresses, the prefix length is not part of the primary identifier. */ - NM_CMP_FIELD_IN6ADDR(obj1, obj2, address); -}); +static int +_vt_cmd_plobj_id_cmp_ip6_address(const NMPlatformObject *obj1, const NMPlatformObject *obj2) +{ + return nm_platform_ip6_address_cmp((const NMPlatformIP6Address *) obj1, + (const NMPlatformIP6Address *) obj2, + NM_PLATFORM_IP_ADDRESS_CMP_TYPE_ID); +} _vt_cmd_plobj_id_cmp(qdisc, NMPlatformQdisc, { NM_CMP_FIELD(obj1, obj2, ifindex); @@ -1551,24 +1540,24 @@ _vt_cmd_plobj_id_cmp(tfilter, NMPlatformTfilter, { static int _vt_cmd_plobj_id_cmp_ip4_route(const NMPlatformObject *obj1, const NMPlatformObject *obj2) { - return nm_platform_ip4_route_cmp((NMPlatformIP4Route *) obj1, - (NMPlatformIP4Route *) obj2, + return nm_platform_ip4_route_cmp((const NMPlatformIP4Route *) obj1, + (const NMPlatformIP4Route *) obj2, NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID); } static int _vt_cmd_plobj_id_cmp_ip6_route(const NMPlatformObject *obj1, const NMPlatformObject *obj2) { - return nm_platform_ip6_route_cmp((NMPlatformIP6Route *) obj1, - (NMPlatformIP6Route *) obj2, + return nm_platform_ip6_route_cmp((const NMPlatformIP6Route *) obj1, + (const NMPlatformIP6Route *) obj2, NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID); } static int _vt_cmd_plobj_id_cmp_routing_rule(const NMPlatformObject *obj1, const NMPlatformObject *obj2) { - return nm_platform_routing_rule_cmp((NMPlatformRoutingRule *) obj1, - (NMPlatformRoutingRule *) obj2, + return nm_platform_routing_rule_cmp((const NMPlatformRoutingRule *) obj1, + (const NMPlatformRoutingRule *) obj2, NM_PLATFORM_ROUTING_RULE_CMP_TYPE_ID); } @@ -3158,28 +3147,29 @@ const NMPClass _nmp_classes[NMP_OBJECT_TYPE_MAX] = { .cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip4_address, .cmd_plobj_to_string = (CmdPlobjToStringFunc) nm_platform_ip4_address_to_string, .cmd_plobj_hash_update = (CmdPlobjHashUpdateFunc) nm_platform_ip4_address_hash_update, - .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_ip4_address_cmp, + .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_ip4_address_cmp_full, + }, + [NMP_OBJECT_TYPE_IP6_ADDRESS - 1] = + { + .parent = DEDUP_MULTI_OBJ_CLASS_INIT(), + .obj_type = NMP_OBJECT_TYPE_IP6_ADDRESS, + .sizeof_data = sizeof(NMPObjectIP6Address), + .sizeof_public = sizeof(NMPlatformIP6Address), + .obj_type_name = "ip6-address", + .addr_family = AF_INET6, + .rtm_gettype = RTM_GETADDR, + .signal_type_id = NM_PLATFORM_SIGNAL_ID_IP6_ADDRESS, + .signal_type = NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, + .supported_cache_ids = _supported_cache_ids_ipx_address, + .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_address, + .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip6_address, + .cmd_plobj_id_cmp = _vt_cmd_plobj_id_cmp_ip6_address, + .cmd_plobj_id_hash_update = _vt_cmd_plobj_id_hash_update_ip6_address, + .cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip6_address, + .cmd_plobj_to_string = (CmdPlobjToStringFunc) nm_platform_ip6_address_to_string, + .cmd_plobj_hash_update = (CmdPlobjHashUpdateFunc) nm_platform_ip6_address_hash_update, + .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_ip6_address_cmp_full, }, - [NMP_OBJECT_TYPE_IP6_ADDRESS - - 1] = {.parent = DEDUP_MULTI_OBJ_CLASS_INIT(), - .obj_type = NMP_OBJECT_TYPE_IP6_ADDRESS, - .sizeof_data = sizeof(NMPObjectIP6Address), - .sizeof_public = sizeof(NMPlatformIP6Address), - .obj_type_name = "ip6-address", - .addr_family = AF_INET6, - .rtm_gettype = RTM_GETADDR, - .signal_type_id = NM_PLATFORM_SIGNAL_ID_IP6_ADDRESS, - .signal_type = NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, - .supported_cache_ids = _supported_cache_ids_ipx_address, - .cmd_obj_is_alive = _vt_cmd_obj_is_alive_ipx_address, - .cmd_plobj_id_copy = _vt_cmd_plobj_id_copy_ip6_address, - .cmd_plobj_id_cmp = _vt_cmd_plobj_id_cmp_ip6_address, - .cmd_plobj_id_hash_update = _vt_cmd_plobj_id_hash_update_ip6_address, - .cmd_plobj_to_string_id = _vt_cmd_plobj_to_string_id_ip6_address, - .cmd_plobj_to_string = (CmdPlobjToStringFunc) nm_platform_ip6_address_to_string, - .cmd_plobj_hash_update = - (CmdPlobjHashUpdateFunc) nm_platform_ip6_address_hash_update, - .cmd_plobj_cmp = (CmdPlobjCmpFunc) nm_platform_ip6_address_cmp}, [NMP_OBJECT_TYPE_IP4_ROUTE - 1] = { .parent = DEDUP_MULTI_OBJ_CLASS_INIT(), diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h index 784dcc2d..d6b88ba2 100644 --- a/src/libnm-platform/nmp-object.h +++ b/src/libnm-platform/nmp-object.h @@ -91,17 +91,17 @@ typedef struct _NMPWireGuardPeer { /*****************************************************************************/ -typedef enum { /*< skip >*/ - NMP_OBJECT_TO_STRING_ID, - NMP_OBJECT_TO_STRING_PUBLIC, - NMP_OBJECT_TO_STRING_ALL, +typedef enum { + NMP_OBJECT_TO_STRING_ID, + NMP_OBJECT_TO_STRING_PUBLIC, + NMP_OBJECT_TO_STRING_ALL, } NMPObjectToStringMode; -typedef enum { /*< skip >*/ - NMP_CACHE_OPS_UNCHANGED = NM_PLATFORM_SIGNAL_NONE, - NMP_CACHE_OPS_ADDED = NM_PLATFORM_SIGNAL_ADDED, - NMP_CACHE_OPS_UPDATED = NM_PLATFORM_SIGNAL_CHANGED, - NMP_CACHE_OPS_REMOVED = NM_PLATFORM_SIGNAL_REMOVED, +typedef enum { + NMP_CACHE_OPS_UNCHANGED = NM_PLATFORM_SIGNAL_NONE, + NMP_CACHE_OPS_ADDED = NM_PLATFORM_SIGNAL_ADDED, + NMP_CACHE_OPS_UPDATED = NM_PLATFORM_SIGNAL_CHANGED, + NMP_CACHE_OPS_REMOVED = NM_PLATFORM_SIGNAL_REMOVED, } NMPCacheOpsType; /* The NMPCacheIdType are the different index types. @@ -1097,21 +1097,6 @@ nm_platform_lookup_object_by_addr_family(NMPlatform *platform, /*****************************************************************************/ -static inline gboolean -nmp_object_get_assume_config_once(const NMPObject *obj) -{ - switch (NMP_OBJECT_GET_TYPE(obj)) { - case NMP_OBJECT_TYPE_IP4_ADDRESS: - case NMP_OBJECT_TYPE_IP6_ADDRESS: - return NMP_OBJECT_CAST_IP_ADDRESS(obj)->a_assume_config_once; - case NMP_OBJECT_TYPE_IP4_ROUTE: - case NMP_OBJECT_TYPE_IP6_ROUTE: - return NMP_OBJECT_CAST_IP_ROUTE(obj)->r_assume_config_once; - default: - return nm_assert_unreachable_val(FALSE); - } -} - static inline gboolean nmp_object_get_force_commit(const NMPObject *obj) { diff --git a/src/libnm-platform/nmp-route-manager.c b/src/libnm-platform/nmp-route-manager.c index c31c9806..842301b1 100644 --- a/src/libnm-platform/nmp-route-manager.c +++ b/src/libnm-platform/nmp-route-manager.c @@ -397,14 +397,17 @@ nmp_route_manager_track(NMPRouteManager *self, _track_data_assert(track_data, TRUE); if (changed) { - _LOGD("track [" NM_HASH_OBFUSCATE_PTR_FMT ",%s%u] %s \"%s\"", - NM_HASH_OBFUSCATE_PTR(track_data->user_tag), - (track_data->track_priority_val == 0 - ? "" - : (track_data->track_priority_present ? "+" : "-")), - (guint) track_data->track_priority_val, - NMP_OBJECT_GET_CLASS(track_data->obj)->obj_type_name, - nmp_object_to_string(track_data->obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; + + _LOGD( + "track [" NM_HASH_OBFUSCATE_PTR_FMT ",%s%u] %s \"%s\"", + NM_HASH_OBFUSCATE_PTR(track_data->user_tag), + (track_data->track_priority_val == 0 + ? "" + : (track_data->track_priority_present ? "+" : "-")), + (guint) track_data->track_priority_val, + NMP_OBJECT_GET_CLASS(track_data->obj)->obj_type_name, + nmp_object_to_string(track_data->obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); } return changed || changed_untrack; @@ -416,6 +419,7 @@ _track_data_untrack(NMPRouteManager *self, gboolean remove_user_tag_data, gboolean make_owned_by_us) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; TrackObjData *obj_data; nm_assert(NMP_IS_ROUTE_MANAGER(self)); @@ -426,7 +430,7 @@ _track_data_untrack(NMPRouteManager *self, _LOGD("untrack [" NM_HASH_OBFUSCATE_PTR_FMT "] %s \"%s\"", NM_HASH_OBFUSCATE_PTR(track_data->user_tag), NMP_OBJECT_GET_CLASS(track_data->obj)->obj_type_name, - nmp_object_to_string(track_data->obj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(track_data->obj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); #if NM_MORE_ASSERTS { @@ -552,6 +556,7 @@ nmp_route_manager_untrack_all(NMPRouteManager *self, void nmp_route_manager_sync(NMPRouteManager *self, NMPObjectType obj_type, gboolean keep_deleted) { + char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE]; const NMDedupMultiHeadEntry *pl_head_entry; NMDedupMultiIter pl_iter; const NMPObject *plobj; @@ -608,7 +613,7 @@ nmp_route_manager_sync(NMPRouteManager *self, NMPObjectType obj_type, gboolean k if (keep_deleted) { _LOGD("forget/leak object added by us: %s \"%s\"", NMP_OBJECT_GET_CLASS(plobj)->obj_type_name, - nmp_object_to_string(plobj, NMP_OBJECT_TO_STRING_PUBLIC, NULL, 0)); + nmp_object_to_string(plobj, NMP_OBJECT_TO_STRING_PUBLIC, sbuf, sizeof(sbuf))); continue; } diff --git a/src/libnm-platform/tests/test-nm-platform.c b/src/libnm-platform/tests/test-nm-platform.c index d4de0dd5..9ac69bde 100644 --- a/src/libnm-platform/tests/test-nm-platform.c +++ b/src/libnm-platform/tests/test-nm-platform.c @@ -131,11 +131,13 @@ test_nmp_link_mode_all_advertised_modes_bits(void) for (i = 0; i < (int) G_N_ELEMENTS(_nmp_link_mode_all_advertised_modes); i++) { if (flags[i] != _nmp_link_mode_all_advertised_modes[i]) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("_nmp_link_mode_all_advertised_modes[%d] should be 0x%0x but is 0x%0x " "(according to the bits in _nmp_link_mode_all_advertised_modes_bits)", i, flags[i], _nmp_link_mode_all_advertised_modes[i]); + NM_PRAGMA_WARNING_REENABLE } } } diff --git a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c index 3906384b..475b8a39 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c @@ -15,6 +15,8 @@ #include #include +#include "linux-headers/nl80211-vnd-intel.h" + #include "libnm-log-core/nm-logging.h" #include "libnm-platform/nm-netlink.h" #include "nm-wifi-utils-private.h" @@ -384,8 +386,10 @@ wifi_nl80211_find_freq(NMWifiUtils *data, const guint32 *freqs) int i; int j; - for (i = 0; i < self->num_freqs; i++) { - for (j = 0; freqs[j] != 0; j++) { + /* It's important to check the values in the order of @freqs, because + * that array might be sorted to contain preferred frequencies first. */ + for (j = 0; freqs[j] != 0; j++) { + for (i = 0; i < self->num_freqs; i++) { if (self->freqs[i] == freqs[j]) return freqs[j]; } @@ -597,7 +601,7 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg) struct nlattr *nl_freq; int rem_freq; int rem_band; - int freq_idx; + guint num_alloc; #ifdef NL80211_FREQUENCY_ATTR_NO_IR G_STATIC_ASSERT_EXPR(NL80211_FREQUENCY_ATTR_PASSIVE_SCAN == NL80211_FREQUENCY_ATTR_NO_IR @@ -651,8 +655,10 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg) } } - /* Find number of supported frequencies */ + /* Read supported frequencies */ + num_alloc = 32; info->num_freqs = 0; + info->freqs = g_new(guint32, num_alloc); nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) { if (nla_parse_nested_arr(tb_band, nl_band, NULL) < 0) @@ -665,38 +671,28 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg) if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ]) continue; - info->num_freqs++; - } - } - - /* Read supported frequencies */ - info->freqs = g_malloc0(sizeof(guint32) * info->num_freqs); - - freq_idx = 0; - nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) { - if (nla_parse_nested_arr(tb_band, nl_band, NULL) < 0) - return NL_SKIP; - - nla_for_each_nested (nl_freq, tb_band[NL80211_BAND_ATTR_FREQS], rem_freq) { - if (nla_parse_nested_arr(tb_freq, nl_freq, freq_policy) < 0) - continue; - - if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ]) + if (tb_freq[NL80211_FREQUENCY_ATTR_DISABLED]) continue; - info->freqs[freq_idx] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_FREQ]); + if (info->num_freqs >= num_alloc) { + num_alloc *= 2; + info->freqs = g_renew(guint32, info->freqs, num_alloc); + } + info->freqs[info->num_freqs] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_FREQ]); info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_VALID; - if (info->freqs[freq_idx] > 2400 && info->freqs[freq_idx] < 2500) + if (info->freqs[info->num_freqs] > 2400 && info->freqs[info->num_freqs] < 2500) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ; - if (info->freqs[freq_idx] > 4900 && info->freqs[freq_idx] < 6000) + if (info->freqs[info->num_freqs] > 4900 && info->freqs[info->num_freqs] < 6000) info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ; - freq_idx++; + info->num_freqs++; } } + info->freqs = g_renew(guint32, info->freqs, info->num_freqs); + /* Read security/encryption support */ if (tb[NL80211_ATTR_CIPHER_SUITES]) { guint32 *ciphers = nla_data(tb[NL80211_ATTR_CIPHER_SUITES]); @@ -815,6 +811,111 @@ nla_put_failure: g_return_val_if_reached(FALSE); } +struct nl80211_csme_conn_info { + NMWifiUtilsNl80211 *self; + NMPlatformCsmeConnInfo *conn_info; +}; + +static int +nl80211_csme_conn_event_handler(struct nl_msg *msg, void *arg) +{ + struct nl80211_csme_conn_info *info = arg; + NMPlatformCsmeConnInfo *out_conn_info = info->conn_info; + NMWifiUtilsNl80211 *self = info->self; + struct genlmsghdr *gnlh = (void *) nlmsg_data(nlmsg_hdr(msg)); + struct nlattr *tb[NL80211_ATTR_MAX + 1]; + struct nlattr *data; + struct nlattr *attrs[NUM_IWL_MVM_VENDOR_ATTR]; + int err; + + static const struct nla_policy iwl_vendor_policy[NUM_IWL_MVM_VENDOR_ATTR] = { + [IWL_MVM_VENDOR_ATTR_AUTH_MODE] = {.type = NLA_U32}, + [IWL_MVM_VENDOR_ATTR_SSID] = {.type = NLA_UNSPEC, .maxlen = NM_IW_ESSID_MAX_SIZE}, + [IWL_MVM_VENDOR_ATTR_STA_CIPHER] = {.type = NLA_U32}, + [IWL_MVM_VENDOR_ATTR_CHANNEL_NUM] = {.type = NLA_U8}, + [IWL_MVM_VENDOR_ATTR_ADDR] = {.type = NLA_UNSPEC, .minlen = ETH_ALEN, .maxlen = ETH_ALEN}, + }; + + nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL); + data = tb[NL80211_ATTR_VENDOR_DATA]; + + *out_conn_info = (NMPlatformCsmeConnInfo){}; + + err = nla_parse_nested(attrs, MAX_IWL_MVM_VENDOR_ATTR, data, iwl_vendor_policy); + if (err) { + _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO Failed to parse CSME connection info: %s", + nm_strerror(err)); + return -EINVAL; + } + + if (attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]) + out_conn_info->auth_mode = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_AUTH_MODE]); + + if (attrs[IWL_MVM_VENDOR_ATTR_SSID]) + memcpy(out_conn_info->ssid, + nla_data(attrs[IWL_MVM_VENDOR_ATTR_SSID]), + nla_len(attrs[IWL_MVM_VENDOR_ATTR_SSID])); + + if (attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]) + out_conn_info->sta_cipher = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_STA_CIPHER]); + + if (attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]) + out_conn_info->channel = nla_get_u8(attrs[IWL_MVM_VENDOR_ATTR_CHANNEL_NUM]); + + if (attrs[IWL_MVM_VENDOR_ATTR_ADDR]) + memcpy(&out_conn_info->addr, + nla_data(attrs[IWL_MVM_VENDOR_ATTR_ADDR]), + sizeof(out_conn_info->addr)); + + return NL_SKIP; +} + +static gboolean +wifi_nl80211_intel_vnd_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) +{ + NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; + nm_auto_nlmsg struct nl_msg *msg = NULL; + int err; + struct nl80211_csme_conn_info conn_info = { + .self = self, + .conn_info = out_conn_info, + }; + + msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); + NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); + NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO); + + err = nl80211_send_and_recv(self, msg, nl80211_csme_conn_event_handler, &conn_info); + if (err < 0) + _LOGD("IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO request failed: %s", nm_strerror(err)); + + return err >= 0; + +nla_put_failure: + g_return_val_if_reached(FALSE); +} + +static gboolean +wifi_nl80211_intel_vnd_get_device_from_csme(NMWifiUtils *data) +{ + NMWifiUtilsNl80211 *self = (NMWifiUtilsNl80211 *) data; + nm_auto_nlmsg struct nl_msg *msg = NULL; + int err; + + msg = nl80211_alloc_msg(self, NL80211_CMD_VENDOR, 0); + NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_ID, INTEL_OUI); + NLA_PUT_U32(msg, NL80211_ATTR_VENDOR_SUBCMD, IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP); + + err = nl80211_send_and_recv(self, msg, NULL, NULL); + if (err < 0) + _LOGD("IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP request failed: %s", nm_strerror(err)); + + return err >= 0; + +nla_put_failure: + g_return_val_if_reached(FALSE); +} + static void nm_wifi_utils_nl80211_init(NMWifiUtilsNl80211 *self) {} @@ -839,6 +940,8 @@ nm_wifi_utils_nl80211_class_init(NMWifiUtilsNl80211Class *klass) wifi_utils_class->get_mesh_channel = wifi_nl80211_get_mesh_channel; wifi_utils_class->set_mesh_channel = wifi_nl80211_set_mesh_channel; wifi_utils_class->set_mesh_ssid = wifi_nl80211_set_mesh_ssid; + wifi_utils_class->get_csme_conn_info = wifi_nl80211_intel_vnd_get_csme_conn_info; + wifi_utils_class->get_device_from_csme = wifi_nl80211_intel_vnd_get_device_from_csme; } NMWifiUtils * diff --git a/src/libnm-platform/wifi/nm-wifi-utils-private.h b/src/libnm-platform/wifi/nm-wifi-utils-private.h index 7461b65e..7fe157f2 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-private.h +++ b/src/libnm-platform/wifi/nm-wifi-utils-private.h @@ -7,6 +7,7 @@ #define __WIFI_UTILS_PRIVATE_H__ #include "nm-wifi-utils.h" +#include "libnm-platform/nm-platform.h" typedef struct { GObjectClass parent; @@ -53,6 +54,10 @@ typedef struct { gboolean (*set_mesh_ssid)(NMWifiUtils *data, const guint8 *ssid, gsize len); gboolean (*indicate_addressing_running)(NMWifiUtils *data, gboolean running); + + gboolean (*get_csme_conn_info)(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info); + + gboolean (*get_device_from_csme)(NMWifiUtils *data); } NMWifiUtilsClass; struct NMWifiUtils { diff --git a/src/libnm-platform/wifi/nm-wifi-utils-wext.c b/src/libnm-platform/wifi/nm-wifi-utils-wext.c index 8d0e6ed0..678d71fe 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils-wext.c +++ b/src/libnm-platform/wifi/nm-wifi-utils-wext.c @@ -255,8 +255,10 @@ wifi_wext_find_freq(NMWifiUtils *data, const guint32 *freqs) guint i; guint j; - for (i = 0; i < wext->num_freqs; i++) { - for (j = 0; freqs[j] != 0; j++) { + /* It's important to check the values in the order of @freqs, because + * that array might be sorted to contain preferred frequencies first. */ + for (j = 0; freqs[j] != 0; j++) { + for (i = 0; i < wext->num_freqs; i++) { if (wext->freqs[i] == freqs[j]) return freqs[j]; } diff --git a/src/libnm-platform/wifi/nm-wifi-utils.c b/src/libnm-platform/wifi/nm-wifi-utils.c index 8bdd65c2..08a8ec4f 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.c +++ b/src/libnm-platform/wifi/nm-wifi-utils.c @@ -60,6 +60,7 @@ _NM80211Mode nm_wifi_utils_get_mode(NMWifiUtils *data) { g_return_val_if_fail(data != NULL, _NM_802_11_MODE_UNKNOWN); + return NM_WIFI_UTILS_GET_CLASS(data)->get_mode(data); } @@ -118,6 +119,7 @@ guint32 nm_wifi_utils_get_freq(NMWifiUtils *data) { g_return_val_if_fail(data != NULL, 0); + return NM_WIFI_UTILS_GET_CLASS(data)->get_freq(data); } @@ -126,6 +128,7 @@ nm_wifi_utils_find_freq(NMWifiUtils *data, const guint32 *freqs) { g_return_val_if_fail(data != NULL, 0); g_return_val_if_fail(freqs != NULL, 0); + return NM_WIFI_UTILS_GET_CLASS(data)->find_freq(data, freqs); } @@ -154,6 +157,28 @@ nm_wifi_utils_is_wifi(int dirfd, const char *ifname) return FALSE; } +gboolean +nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, NMPlatformCsmeConnInfo *out_conn_info) +{ + NMWifiUtilsClass *klass; + + g_return_val_if_fail(data != NULL, FALSE); + + klass = NM_WIFI_UTILS_GET_CLASS(data); + return klass->get_csme_conn_info ? klass->get_csme_conn_info(data, out_conn_info) : FALSE; +} + +gboolean +nm_wifi_utils_get_device_from_csme(NMWifiUtils *data) +{ + NMWifiUtilsClass *klass; + + g_return_val_if_fail(data != NULL, FALSE); + + klass = NM_WIFI_UTILS_GET_CLASS(data); + return klass->get_device_from_csme ? klass->get_device_from_csme(data) : FALSE; +} + /* OLPC Mesh-only functions */ guint32 diff --git a/src/libnm-platform/wifi/nm-wifi-utils.h b/src/libnm-platform/wifi/nm-wifi-utils.h index be33b90c..0d30c1a1 100644 --- a/src/libnm-platform/wifi/nm-wifi-utils.h +++ b/src/libnm-platform/wifi/nm-wifi-utils.h @@ -63,6 +63,12 @@ _NMSettingWirelessWakeOnWLan nm_wifi_utils_get_wake_on_wlan(NMWifiUtils *data); gboolean nm_wifi_utils_set_wake_on_wlan(NMWifiUtils *data, _NMSettingWirelessWakeOnWLan wowl); +struct _NMPlatformCsmeConnInfo; +gboolean nm_wifi_utils_get_csme_conn_info(NMWifiUtils *data, + struct _NMPlatformCsmeConnInfo *out_conn_info); + +gboolean nm_wifi_utils_get_device_from_csme(NMWifiUtils *data); + /* OLPC Mesh-only functions */ guint32 nm_wifi_utils_get_mesh_channel(NMWifiUtils *data); diff --git a/src/libnm-std-aux/nm-std-aux.h b/src/libnm-std-aux/nm-std-aux.h index b79b1c65..c44bcc72 100644 --- a/src/libnm-std-aux/nm-std-aux.h +++ b/src/libnm-std-aux/nm-std-aux.h @@ -487,6 +487,22 @@ nm_streq0(const char *s1, const char *s2) return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0); } +/* + * Very similar to g_str_has_prefix() with the obvious meaning. + * Differences: + * 1) suffix is enforced to be a C string literal + * (it is thus more restricted, but you'll know it at compile time). + * 2) it accepts str==NULL + * (it is thus more forgiving than g_str_has_prefix()) + * 3) it can get the job done with one strncmp() (with + * the length argument being a compile time constant, and compiler optimizing + * strncmp() call). + * Compare to g_str_has_prefix() which requires one call into glib, then + * one strlen() and one strncmp() call. + * + * If it compiles (re:1), NM_STR_HAS_PREFIX() can fully replace g_str_has_prefix(). + * The other way is not necessarily possible due to 2). + */ #define NM_STR_HAS_PREFIX(str, prefix) \ ({ \ const char *const _str_has_prefix = (str); \ @@ -496,6 +512,22 @@ nm_streq0(const char *s1, const char *s2) _str_has_prefix && (strncmp(_str_has_prefix, "" prefix "", NM_STRLEN(prefix)) == 0); \ }) +/* + * Very similar to g_str_has_suffix() with the obvious meaning. + * Differences: + * 1) suffix is enforced to be a C string literal + * (it is thus more restricted, but you'll know it at compile time). + * 2) it accepts str==NULL + * (it is thus more forgiving than g_str_has_suffix()) + * 3) it can get the job done with one strlen() and one memcpy() call (with + * the length argument being a compile time constant, and compiler optimizing + * memcpy() call). + * Compare to g_str_has_suffix() which requires one call into glib, then + * two strlen() and one strcmp() call. + * + * If it compiles (re:1), NM_STR_HAS_SUFFIX() can fully replace g_str_has_suffix(). + * The other way is not necessarily possible due to 2). + */ #define NM_STR_HAS_SUFFIX(str, suffix) \ ({ \ const char *const _str_has_suffix = (str); \ @@ -746,7 +778,7 @@ nm_streq0(const char *s1, const char *s2) /*****************************************************************************/ -#define _NM_IN_SET_OP(x, idx) (_x == (x)) +#define _NM_IN_SET_OP(x, idx) ((int) (_x == (x))) #define _NM_IN_SET(op, type, x, ...) \ ({ \ type _x = (x); \ @@ -782,7 +814,7 @@ _NM_IN_STRSET_EVAL_op_streq(const char *x1, const char *x) return x && nm_streq(x1, x); } -#define _NM_IN_STRSET_EVAL_OP_NULL(x, idx) (((const char *) NULL) == (x)) +#define _NM_IN_STRSET_EVAL_OP_NULL(x, idx) ((int) (((const char *) NULL) == (x))) #define _NM_IN_STRSET_EVAL_OP_STREQ(x, idx) _NM_IN_STRSET_EVAL_op_streq(_x1, x) #define _NM_IN_STRSET_EVAL(op, eval_op, x1, ...) \ ({ \ diff --git a/src/libnm-systemd-core/meson.build b/src/libnm-systemd-core/meson.build index 1fa94486..80b95c42 100644 --- a/src/libnm-systemd-core/meson.build +++ b/src/libnm-systemd-core/meson.build @@ -10,6 +10,7 @@ libnm_systemd_core = static_library( 'src/libsystemd-network/dhcp-packet.c', 'src/libsystemd-network/dhcp6-network.c', 'src/libsystemd-network/dhcp6-option.c', + 'src/libsystemd-network/dhcp6-protocol.c', 'src/libsystemd-network/lldp-neighbor.c', 'src/libsystemd-network/lldp-network.c', 'src/libsystemd-network/network-common.c', diff --git a/src/libnm-systemd-core/nm-sd-utils-dhcp.c b/src/libnm-systemd-core/nm-sd-utils-dhcp.c index 7fe889fd..13c75055 100644 --- a/src/libnm-systemd-core/nm-sd-utils-dhcp.c +++ b/src/libnm-systemd-core/nm-sd-utils-dhcp.c @@ -13,8 +13,7 @@ int nm_sd_dhcp_lease_get_private_options(sd_dhcp_lease *lease, nm_sd_dhcp_option **out_options) { - struct sd_dhcp_raw_option *raw_option; - int cnt = 0; + int cnt = 0; g_return_val_if_fail(lease, -EINVAL); g_return_val_if_fail(out_options, -EINVAL); diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.c b/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.c index 74aa19de..f2d94214 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.c +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.c @@ -10,20 +10,27 @@ #include "sd-id128.h" #include "dhcp-identifier.h" -#include "dhcp6-protocol.h" #include "netif-util.h" #include "siphash24.h" #include "sparse-endian.h" #include "stat-util.h" -#include "stdio-util.h" +#include "string-table.h" #include "udev-util.h" -#include "virt.h" #define HASH_KEY SD_ID128_MAKE(80,11,8c,c2,fe,4a,03,ee,3e,d6,0c,6f,36,39,14,09) #define APPLICATION_ID SD_ID128_MAKE(a5,0a,d1,12,bf,60,45,77,a2,fb,74,1a,b1,95,5b,03) #define USEC_2000 ((usec_t) 946684800000000) /* 2000-01-01 00:00:00 UTC */ -int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len, bool strict) { +static const char * const duid_type_table[_DUID_TYPE_MAX] = { + [DUID_TYPE_LLT] = "DUID-LLT", + [DUID_TYPE_EN] = "DUID-EN/Vendor", + [DUID_TYPE_LL] = "DUID-LL", + [DUID_TYPE_UUID] = "UUID", +}; + +DEFINE_STRING_TABLE_LOOKUP_TO_STRING(duid_type, DUIDType); + +int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict) { struct duid d; assert_cc(sizeof(d.raw) >= MAX_DUID_LEN); @@ -60,107 +67,141 @@ int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len, bool strict) { } #if 0 /* NM_IGNORED */ -int dhcp_identifier_set_duid_llt(struct duid *duid, usec_t t, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len) { +static int dhcp_identifier_set_duid_llt(const uint8_t *addr, size_t addr_len, uint16_t arp_type, usec_t t, struct duid *ret_duid, size_t *ret_len) { uint16_t time_from_2000y; - assert(duid); - assert(len); assert(addr); + assert(ret_duid); + assert(ret_len); + + if (addr_len == 0) + return -EOPNOTSUPP; if (arp_type == ARPHRD_ETHER) assert_return(addr_len == ETH_ALEN, -EINVAL); else if (arp_type == ARPHRD_INFINIBAND) assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); else - return -EINVAL; + return -EOPNOTSUPP; if (t < USEC_2000) time_from_2000y = 0; else time_from_2000y = (uint16_t) (((t - USEC_2000) / USEC_PER_SEC) & 0xffffffff); - unaligned_write_be16(&duid->type, DUID_TYPE_LLT); - unaligned_write_be16(&duid->llt.htype, arp_type); - unaligned_write_be32(&duid->llt.time, time_from_2000y); - memcpy(duid->llt.haddr, addr, addr_len); + unaligned_write_be16(&ret_duid->type, DUID_TYPE_LLT); + unaligned_write_be16(&ret_duid->llt.htype, arp_type); + unaligned_write_be32(&ret_duid->llt.time, time_from_2000y); + memcpy(ret_duid->llt.haddr, addr, addr_len); - *len = sizeof(duid->type) + sizeof(duid->llt.htype) + sizeof(duid->llt.time) + addr_len; + *ret_len = offsetof(struct duid, llt.haddr) + addr_len; return 0; } -int dhcp_identifier_set_duid_ll(struct duid *duid, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len) { - assert(duid); - assert(len); +static int dhcp_identifier_set_duid_ll(const uint8_t *addr, size_t addr_len, uint16_t arp_type, struct duid *ret_duid, size_t *ret_len) { assert(addr); + assert(ret_duid); + assert(ret_len); + + if (addr_len == 0) + return -EOPNOTSUPP; if (arp_type == ARPHRD_ETHER) assert_return(addr_len == ETH_ALEN, -EINVAL); else if (arp_type == ARPHRD_INFINIBAND) assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); else - return -EINVAL; + return -EOPNOTSUPP; - unaligned_write_be16(&duid->type, DUID_TYPE_LL); - unaligned_write_be16(&duid->ll.htype, arp_type); - memcpy(duid->ll.haddr, addr, addr_len); + unaligned_write_be16(&ret_duid->type, DUID_TYPE_LL); + unaligned_write_be16(&ret_duid->ll.htype, arp_type); + memcpy(ret_duid->ll.haddr, addr, addr_len); - *len = sizeof(duid->type) + sizeof(duid->ll.htype) + addr_len; + *ret_len = offsetof(struct duid, ll.haddr) + addr_len; return 0; } #endif /* NM_IGNORED */ -int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len) { +int dhcp_identifier_set_duid_en(bool test_mode, struct duid *ret_duid, size_t *ret_len) { sd_id128_t machine_id; uint64_t hash; int r; - assert(duid); - assert(len); + assert(ret_duid); + assert(ret_len); - r = sd_id128_get_machine(&machine_id); - if (r < 0) { -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (!test_mode) { + r = sd_id128_get_machine(&machine_id); + if (r < 0) + return r; + } else + /* For tests, especially for fuzzers, reproducibility is important. + * Hence, use a static and constant machine ID. + * See 9216fddc5a8ac2742e6cfa7660f95c20ca4f2193. */ machine_id = SD_ID128_MAKE(01, 02, 03, 04, 05, 06, 07, 08, 09, 0a, 0b, 0c, 0d, 0e, 0f, 10); -#else - return r; -#endif - } - unaligned_write_be16(&duid->type, DUID_TYPE_EN); - unaligned_write_be32(&duid->en.pen, SYSTEMD_PEN); - - *len = sizeof(duid->type) + sizeof(duid->en); + unaligned_write_be16(&ret_duid->type, DUID_TYPE_EN); + unaligned_write_be32(&ret_duid->en.pen, SYSTEMD_PEN); /* a bit of snake-oil perhaps, but no need to expose the machine-id * directly; duid->en.id might not be aligned, so we need to copy */ hash = htole64(siphash24(&machine_id, sizeof(machine_id), HASH_KEY.bytes)); - memcpy(duid->en.id, &hash, sizeof(duid->en.id)); + memcpy(ret_duid->en.id, &hash, sizeof(ret_duid->en.id)); + + *ret_len = offsetof(struct duid, en.id) + sizeof(ret_duid->en.id); + + if (test_mode) + assert_se(memcmp(ret_duid, (const uint8_t[]) { 0x00, 0x02, 0x00, 0x00, 0xab, 0x11, 0x61, 0x77, 0x40, 0xde, 0x13, 0x42, 0xc3, 0xa2 }, *ret_len) == 0); return 0; } #if 0 /* NM_IGNORED */ -int dhcp_identifier_set_duid_uuid(struct duid *duid, size_t *len) { +static int dhcp_identifier_set_duid_uuid(struct duid *ret_duid, size_t *ret_len) { sd_id128_t machine_id; int r; - assert(duid); - assert(len); + assert(ret_duid); + assert(ret_len); r = sd_id128_get_machine_app_specific(APPLICATION_ID, &machine_id); if (r < 0) return r; - unaligned_write_be16(&duid->type, DUID_TYPE_UUID); - memcpy(&duid->raw.data, &machine_id, sizeof(machine_id)); + unaligned_write_be16(&ret_duid->type, DUID_TYPE_UUID); + memcpy(&ret_duid->uuid.uuid, &machine_id, sizeof(machine_id)); - *len = sizeof(duid->type) + sizeof(machine_id); + *ret_len = offsetof(struct duid, uuid.uuid) + sizeof(machine_id); return 0; } -#endif + +int dhcp_identifier_set_duid( + DUIDType duid_type, + const uint8_t *addr, + size_t addr_len, + uint16_t arp_type, + usec_t llt_time, + bool test_mode, + struct duid *ret_duid, + size_t *ret_len) { + + switch (duid_type) { + case DUID_TYPE_LLT: + return dhcp_identifier_set_duid_llt(addr, addr_len, arp_type, llt_time, ret_duid, ret_len); + case DUID_TYPE_EN: + return dhcp_identifier_set_duid_en(test_mode, ret_duid, ret_len); + case DUID_TYPE_LL: + return dhcp_identifier_set_duid_ll(addr, addr_len, arp_type, ret_duid, ret_len); + case DUID_TYPE_UUID: + return dhcp_identifier_set_duid_uuid(ret_duid, ret_len); + default: + return -EINVAL; + } +} +#endif /* NM_IGNORED */ int dhcp_identifier_set_iaid( int ifindex, @@ -168,7 +209,7 @@ int dhcp_identifier_set_iaid( size_t mac_len, bool legacy_unstable_byteorder, bool use_mac, - void *_id) { + void *ret) { #if 0 /* NM_IGNORED */ /* name is a pointer to memory in the sd_device struct, so must @@ -221,7 +262,7 @@ int dhcp_identifier_set_iaid( * behavior. */ id32 = be32toh(id32); - unaligned_write_ne32(_id, id32); + unaligned_write_ne32(ret, id32); return 0; #else /* NM_IGNORED */ /* for NetworkManager, we don't use this function and we should never call here. diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.h index 6c24af03..697ba3bf 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp-identifier.h @@ -54,9 +54,23 @@ struct duid { }; } _packed_; -int dhcp_validate_duid_len(uint16_t duid_type, size_t duid_len, bool strict); -int dhcp_identifier_set_duid_llt(struct duid *duid, usec_t t, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len); -int dhcp_identifier_set_duid_ll(struct duid *duid, const uint8_t *addr, size_t addr_len, uint16_t arp_type, size_t *len); -int dhcp_identifier_set_duid_en(struct duid *duid, size_t *len); -int dhcp_identifier_set_duid_uuid(struct duid *duid, size_t *len); -int dhcp_identifier_set_iaid(int ifindex, const uint8_t *mac, size_t mac_len, bool legacy_unstable_byteorder, bool use_mac, void *_id); +int dhcp_validate_duid_len(DUIDType duid_type, size_t duid_len, bool strict); +int dhcp_identifier_set_duid_en(bool test_mode, struct duid *ret_duid, size_t *ret_len); +int dhcp_identifier_set_duid( + DUIDType duid_type, + const uint8_t *addr, + size_t addr_len, + uint16_t arp_type, + usec_t llt_time, + bool test_mode, + struct duid *ret_duid, + size_t *ret_len); +int dhcp_identifier_set_iaid( + int ifindex, + const uint8_t *mac, + size_t mac_len, + bool legacy_unstable_byteorder, + bool use_mac, + void *ret); + +const char *duid_type_to_string(DUIDType t) _const_; diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp-lease-internal.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp-lease-internal.h index 992ac9f3..c67e9511 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp-lease-internal.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp-lease-internal.h @@ -16,8 +16,6 @@ struct sd_dhcp_route { struct in_addr dst_addr; struct in_addr gw_addr; unsigned char dst_prefixlen; - - uint8_t option; }; struct sd_dhcp_raw_option { @@ -52,8 +50,10 @@ struct sd_dhcp_lease { DHCPServerData servers[_SD_DHCP_LEASE_SERVER_TYPE_MAX]; - struct sd_dhcp_route *static_route; - size_t static_route_size; + struct sd_dhcp_route *static_routes; + size_t n_static_routes; + struct sd_dhcp_route *classless_routes; + size_t n_classless_routes; uint16_t mtu; /* 0 if unset */ diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp-option.c b/src/libnm-systemd-core/src/libsystemd-network/dhcp-option.c index 1710f696..712f6097 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp-option.c +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp-option.c @@ -60,7 +60,6 @@ static int option_append(uint8_t options[], size_t size, size_t *offset, case SD_DHCP_OPTION_USER_CLASS: { size_t total = 0; - char **s; if (strv_isempty((char **) optval)) return -EINVAL; diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp-protocol.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp-protocol.h index 11f4201a..dd54bcf6 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp-protocol.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp-protocol.h @@ -73,15 +73,24 @@ enum { }; enum { - DHCP_DISCOVER = 1, - DHCP_OFFER = 2, - DHCP_REQUEST = 3, - DHCP_DECLINE = 4, - DHCP_ACK = 5, - DHCP_NAK = 6, - DHCP_RELEASE = 7, - DHCP_INFORM = 8, - DHCP_FORCERENEW = 9, + DHCP_DISCOVER = 1, /* [RFC2132] */ + DHCP_OFFER = 2, /* [RFC2132] */ + DHCP_REQUEST = 3, /* [RFC2132] */ + DHCP_DECLINE = 4, /* [RFC2132] */ + DHCP_ACK = 5, /* [RFC2132] */ + DHCP_NAK = 6, /* [RFC2132] */ + DHCP_RELEASE = 7, /* [RFC2132] */ + DHCP_INFORM = 8, /* [RFC2132] */ + DHCP_FORCERENEW = 9, /* [RFC3203] */ + DHCPLEASEQUERY = 10, /* [RFC4388] */ + DHCPLEASEUNASSIGNED = 11, /* [RFC4388] */ + DHCPLEASEUNKNOWN = 12, /* [RFC4388] */ + DHCPLEASEACTIVE = 13, /* [RFC4388] */ + DHCPBULKLEASEQUERY = 14, /* [RFC6926] */ + DHCPLEASEQUERYDONE = 15, /* [RFC6926] */ + DHCPACTIVELEASEQUERY = 16, /* [RFC7724] */ + DHCPLEASEQUERYSTATUS = 17, /* [RFC7724] */ + DHCPTLS = 18, /* [RFC7724] */ }; enum { diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h index f9434098..0d7813f6 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-internal.h @@ -11,138 +11,83 @@ #include "sd-event.h" #include "sd-dhcp6-client.h" +#include "dhcp-identifier.h" +#include "dhcp6-option.h" #include "dhcp6-protocol.h" +#include "ether-addr-util.h" #include "hashmap.h" -#include "list.h" #include "macro.h" #include "network-common.h" +#include "ordered-set.h" #include "sparse-endian.h" +#include "time-util.h" -typedef struct sd_dhcp6_option { +/* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */ +typedef enum DHCP6RequestIA { + DHCP6_REQUEST_IA_NA = 1 << 0, + DHCP6_REQUEST_IA_TA = 1 << 1, /* currently not used */ + DHCP6_REQUEST_IA_PD = 1 << 2, +} DHCP6RequestIA; + +struct sd_dhcp6_client { unsigned n_ref; - uint32_t enterprise_identifier; - uint16_t option; - void *data; - size_t length; -} sd_dhcp6_option; - -extern const struct hash_ops dhcp6_option_hash_ops; - -/* Common option header */ -typedef struct DHCP6Option { - be16_t code; - be16_t len; - uint8_t data[]; -} _packed_ DHCP6Option; - -/* Address option */ -struct iaaddr { - struct in6_addr address; - be32_t lifetime_preferred; - be32_t lifetime_valid; -} _packed_; - -/* Prefix Delegation Prefix option */ -struct iapdprefix { - be32_t lifetime_preferred; - be32_t lifetime_valid; - uint8_t prefixlen; - struct in6_addr address; -} _packed_; - -typedef struct DHCP6Address DHCP6Address; - -struct DHCP6Address { - LIST_FIELDS(DHCP6Address, addresses); - - union { - struct iaaddr iaaddr; - struct iapdprefix iapdprefix; - }; + int ifindex; + char *ifname; + + struct in6_addr local_address; + struct hw_addr_data hw_addr; + uint16_t arp_type; + + sd_event *event; + sd_event_source *receive_message; + sd_event_source *timeout_resend; + sd_event_source *timeout_expire; + sd_event_source *timeout_t1; + sd_event_source *timeout_t2; + int event_priority; + int fd; + + DHCP6State state; + bool information_request; + usec_t information_request_time_usec; + usec_t information_refresh_time_usec; + be32_t transaction_id; + usec_t transaction_start; + usec_t retransmit_time; + uint8_t retransmit_count; + + bool iaid_set; + DHCP6IA ia_na; + DHCP6IA ia_pd; + DHCP6RequestIA request_ia; + struct duid duid; + size_t duid_len; + be16_t *req_opts; + size_t req_opts_len; + char *fqdn; + char *mudurl; + char **user_class; + char **vendor_class; + OrderedHashmap *extra_options; + OrderedSet *vendor_options; + + struct sd_dhcp6_lease *lease; + + sd_dhcp6_client_callback_t callback; + void *userdata; + + /* Ignore ifindex when generating iaid. See dhcp_identifier_set_iaid(). */ + bool test_mode; }; -/* Non-temporary Address option */ -struct ia_na { - be32_t id; - be32_t lifetime_t1; - be32_t lifetime_t2; -} _packed_; - -/* Prefix Delegation option */ -struct ia_pd { - be32_t id; - be32_t lifetime_t1; - be32_t lifetime_t2; -} _packed_; - -/* Temporary Address option */ -struct ia_ta { - be32_t id; -} _packed_; - -typedef struct DHCP6IA { - uint16_t type; - union { - struct ia_na ia_na; - struct ia_pd ia_pd; - struct ia_ta ia_ta; - }; - - LIST_HEAD(DHCP6Address, addresses); -} DHCP6IA; - -typedef struct sd_dhcp6_client sd_dhcp6_client; - -bool dhcp6_option_can_request(uint16_t option); -int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code, - size_t optlen, const void *optval); -int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia); -int dhcp6_option_append_pd(uint8_t **buf, size_t *buflen, const DHCP6IA *pd, const DHCP6Address *hint_pd_prefix); -int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn); -int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class); -int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const *user_class); -int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options); - -int dhcp6_option_parse( - const uint8_t *buf, - size_t buflen, - size_t *offset, - uint16_t *ret_option_code, - size_t *ret_option_data_len, - const uint8_t **ret_option_data); -int dhcp6_option_parse_status(const uint8_t *data, size_t data_len, char **ret_status_message); -int dhcp6_option_parse_ia( - sd_dhcp6_client *client, - be32_t iaid, - uint16_t option_code, - size_t option_data_len, - const uint8_t *option_data, - DHCP6IA *ret); -int dhcp6_option_parse_addresses( - const uint8_t *optval, - size_t optlen, - struct in6_addr **addrs, - size_t *count); -int dhcp6_option_parse_domainname_list(const uint8_t *optval, size_t optlen, char ***ret); -int dhcp6_option_parse_domainname(const uint8_t *optval, size_t optlen, char **ret); - int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *address); int dhcp6_network_send_udp_socket(int s, struct in6_addr *address, const void *packet, size_t len); -int client_parse_message( - sd_dhcp6_client *client, - DHCP6Message *message, - size_t len, - sd_dhcp6_lease *lease); - -const char *dhcp6_message_type_to_string(int s) _const_; -int dhcp6_message_type_from_string(const char *s) _pure_; -const char *dhcp6_message_status_to_string(int s) _const_; -int dhcp6_message_status_from_string(const char *s) _pure_; - +int dhcp6_client_send_message(sd_dhcp6_client *client); void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode); +int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id); #define log_dhcp6_client_errno(client, error, fmt, ...) \ log_interface_prefix_full_errno( \ diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h index 8ae2ecd6..1f10dccb 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-lease-internal.h @@ -5,11 +5,13 @@ Copyright © 2014-2015 Intel Corporation. All rights reserved. ***/ -#include +#include #include "sd-dhcp6-lease.h" -#include "dhcp6-internal.h" +#include "dhcp6-option.h" +#include "macro.h" +#include "time-util.h" struct sd_dhcp6_lease { unsigned n_ref; @@ -21,10 +23,13 @@ struct sd_dhcp6_lease { uint8_t preference; bool rapid_commit; triple_timestamp timestamp; + usec_t lifetime_t1; + usec_t lifetime_t2; + usec_t lifetime_valid; struct in6_addr server_address; - DHCP6IA ia; - DHCP6IA pd; + DHCP6IA *ia_na; /* Identity association non-temporary addresses */ + DHCP6IA *ia_pd; /* Identity association prefix delegation */ DHCP6Address *addr_iter; DHCP6Address *prefix_iter; @@ -40,17 +45,15 @@ struct sd_dhcp6_lease { char *fqdn; }; -int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire); -DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia); - +int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid); int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len); int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len); int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len); int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len); int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference); -int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference); +int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *ret); int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease); -int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit); +int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *ret); int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen); int dhcp6_lease_add_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen); @@ -59,3 +62,10 @@ int dhcp6_lease_add_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t op int dhcp6_lease_set_fqdn(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen); int dhcp6_lease_new(sd_dhcp6_lease **ret); +int dhcp6_lease_new_from_message( + sd_dhcp6_client *client, + const DHCP6Message *message, + size_t len, + const triple_timestamp *timestamp, + const struct in6_addr *server_address, + sd_dhcp6_lease **ret); diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c index 237771e6..03d56371 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.c @@ -11,14 +11,12 @@ #include "sd-dhcp6-client.h" #include "alloc-util.h" -#include "dhcp-identifier.h" #include "dhcp6-internal.h" -#include "dhcp6-lease-internal.h" +#include "dhcp6-option.h" #include "dhcp6-protocol.h" #include "dns-domain.h" #include "escape.h" #include "memory-util.h" -#include "sparse-endian.h" #include "strv.h" #include "unaligned.h" @@ -76,8 +74,8 @@ bool dhcp6_option_can_request(uint16_t option) { return false; case SD_DHCP6_OPTION_CLIENT_FQDN: case SD_DHCP6_OPTION_PANA_AGENT: - case SD_DHCP6_OPTION_NEW_POSIX_TIMEZONE: - case SD_DHCP6_OPTION_NEW_TZDB_TIMEZONE: + case SD_DHCP6_OPTION_POSIX_TIMEZONE: + case SD_DHCP6_OPTION_TZDB_TIMEZONE: return true; case SD_DHCP6_OPTION_ERO: case SD_DHCP6_OPTION_LQ_QUERY: @@ -214,19 +212,15 @@ bool dhcp6_option_can_request(uint16_t option) { } static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode, size_t optlen) { - DHCP6Option *option; - assert_return(buf, -EINVAL); assert_return(*buf, -EINVAL); assert_return(buflen, -EINVAL); - option = (DHCP6Option*) *buf; - if (optlen > 0xffff || *buflen < optlen + offsetof(DHCP6Option, data)) return -ENOBUFS; - option->code = htobe16(optcode); - option->len = htobe16(optlen); + unaligned_write_be16(*buf + offsetof(DHCP6Option, code), optcode); + unaligned_write_be16(*buf + offsetof(DHCP6Option, len), optlen); *buf += offsetof(DHCP6Option, data); *buflen -= offsetof(DHCP6Option, data); @@ -244,15 +238,13 @@ int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code, if (r < 0) return r; - memcpy_safe(*buf, optval, optlen); - - *buf += optlen; + *buf = mempcpy_safe(*buf, optval, optlen); *buflen -= optlen; return 0; } -int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options) { +int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedSet *vendor_options) { sd_dhcp6_option *options; int r; @@ -261,7 +253,7 @@ int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHash assert(buflen); assert(vendor_options); - ORDERED_HASHMAP_FOREACH(options, vendor_options) { + ORDERED_SET_FOREACH(options, vendor_options) { _cleanup_free_ uint8_t *p = NULL; size_t total; @@ -284,79 +276,31 @@ int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHash return 0; } -int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia) { - size_t ia_buflen, ia_addrlen = 0; - struct ia_na ia_na; - struct ia_ta ia_ta; - DHCP6Address *addr; - uint8_t *ia_hdr; - uint16_t len; - void *p; +static int option_append_ia_address(uint8_t **buf, size_t *buflen, const struct iaaddr *address) { + struct iaaddr a; int r; - assert_return(buf, -EINVAL); - assert_return(*buf, -EINVAL); - assert_return(buflen, -EINVAL); - assert_return(ia, -EINVAL); - - /* client should not send set T1 and T2. See, RFC 8415, and issue #18090. */ - - switch (ia->type) { - case SD_DHCP6_OPTION_IA_NA: - len = DHCP6_OPTION_IA_NA_LEN; - ia_na = (struct ia_na) { - .id = ia->ia_na.id, - }; - p = &ia_na; - break; - - case SD_DHCP6_OPTION_IA_TA: - len = DHCP6_OPTION_IA_TA_LEN; - ia_ta = (struct ia_ta) { - .id = ia->ia_ta.id, - }; - p = &ia_ta; - break; - - default: - return -EINVAL; - } - - if (*buflen < offsetof(DHCP6Option, data) + len) - return -ENOBUFS; - - ia_hdr = *buf; - ia_buflen = *buflen; - - *buf += offsetof(DHCP6Option, data); - *buflen -= offsetof(DHCP6Option, data); - - memcpy(*buf, p, len); - - *buf += len; - *buflen -= len; - - LIST_FOREACH(addresses, addr, ia->addresses) { - struct iaaddr a = { - .address = addr->iaaddr.address, - }; - - r = option_append_hdr(buf, buflen, SD_DHCP6_OPTION_IAADDR, sizeof(struct iaaddr)); - if (r < 0) - return r; + assert(buf); + assert(*buf); + assert(buflen); + assert(address); - memcpy(*buf, &a, sizeof(struct iaaddr)); + /* Do not append T1 and T2. */ + a = (struct iaaddr) { + .address = address->address, + }; - *buf += sizeof(struct iaaddr); - *buflen -= sizeof(struct iaaddr); + r = option_append_hdr(buf, buflen, SD_DHCP6_OPTION_IAADDR, sizeof(struct iaaddr)); + if (r < 0) + return r; - ia_addrlen += offsetof(DHCP6Option, data) + sizeof(struct iaaddr); - } + *buf = mempcpy(*buf, &a, sizeof(struct iaaddr)); + *buflen -= sizeof(struct iaaddr); - return option_append_hdr(&ia_hdr, &ia_buflen, ia->type, len + ia_addrlen); + return offsetof(DHCP6Option, data) + sizeof(struct iaaddr); } -static int option_append_pd_prefix(uint8_t **buf, size_t *buflen, const DHCP6Address *prefix) { +static int option_append_pd_prefix(uint8_t **buf, size_t *buflen, const struct iapdprefix *prefix) { struct iapdprefix p; int r; @@ -365,79 +309,84 @@ static int option_append_pd_prefix(uint8_t **buf, size_t *buflen, const DHCP6Add assert(buflen); assert(prefix); - if (prefix->iapdprefix.prefixlen == 0) + if (prefix->prefixlen == 0) return -EINVAL; /* Do not append T1 and T2. */ - p = (struct iapdprefix) { - .prefixlen = prefix->iapdprefix.prefixlen, - .address = prefix->iapdprefix.address, + .prefixlen = prefix->prefixlen, + .address = prefix->address, }; r = option_append_hdr(buf, buflen, SD_DHCP6_OPTION_IA_PD_PREFIX, sizeof(struct iapdprefix)); if (r < 0) return r; - memcpy(*buf, &p, sizeof(struct iapdprefix)); - - *buf += sizeof(struct iapdprefix); + *buf = mempcpy(*buf, &p, sizeof(struct iapdprefix)); *buflen -= sizeof(struct iapdprefix); return offsetof(DHCP6Option, data) + sizeof(struct iapdprefix); } -int dhcp6_option_append_pd(uint8_t **buf, size_t *buflen, const DHCP6IA *pd, const DHCP6Address *hint_pd_prefix) { - struct ia_pd ia_pd; - size_t len, pd_buflen; - uint8_t *pd_hdr; +int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia) { + struct ia_header header; + size_t ia_buflen; + uint8_t *ia_hdr; + uint16_t len; int r; assert_return(buf, -EINVAL); assert_return(*buf, -EINVAL); assert_return(buflen, -EINVAL); - assert_return(pd, -EINVAL); - assert_return(pd->type == SD_DHCP6_OPTION_IA_PD, -EINVAL); + assert_return(ia, -EINVAL); - /* Do not set T1 and T2. */ - ia_pd = (struct ia_pd) { - .id = pd->ia_pd.id, - }; - len = sizeof(struct ia_pd); + /* client should not send set T1 and T2. See, RFC 8415, and issue #18090. */ + + switch (ia->type) { + case SD_DHCP6_OPTION_IA_NA: + case SD_DHCP6_OPTION_IA_PD: + len = sizeof(struct ia_header); + header = (struct ia_header) { + .id = ia->header.id, + }; + break; + + case SD_DHCP6_OPTION_IA_TA: + len = sizeof(header.id); /* IA_TA does not have lifetime. */ + header = (struct ia_header) { + .id = ia->header.id, + }; + break; + + default: + assert_not_reached(); + } if (*buflen < offsetof(DHCP6Option, data) + len) return -ENOBUFS; - pd_hdr = *buf; - pd_buflen = *buflen; + ia_hdr = *buf; + ia_buflen = *buflen; /* The header will be written at the end of this function. */ *buf += offsetof(DHCP6Option, data); *buflen -= offsetof(DHCP6Option, data); - memcpy(*buf, &ia_pd, len); - - *buf += sizeof(struct ia_pd); - *buflen -= sizeof(struct ia_pd); - - DHCP6Address *prefix; - LIST_FOREACH(addresses, prefix, pd->addresses) { - r = option_append_pd_prefix(buf, buflen, prefix); - if (r < 0) - return r; - - len += r; - } + *buf = mempcpy(*buf, &header, len); + *buflen -= len; - if (hint_pd_prefix && hint_pd_prefix->iapdprefix.prefixlen > 0) { - r = option_append_pd_prefix(buf, buflen, hint_pd_prefix); + LIST_FOREACH(addresses, addr, ia->addresses) { + if (ia->type == SD_DHCP6_OPTION_IA_PD) + r = option_append_pd_prefix(buf, buflen, &addr->iapdprefix); + else + r = option_append_ia_address(buf, buflen, &addr->iaaddr); if (r < 0) return r; len += r; } - return option_append_hdr(&pd_hdr, &pd_buflen, pd->type, len); + return option_append_hdr(&ia_hdr, &ia_buflen, ia->type, len); } int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) { @@ -470,7 +419,6 @@ int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) { int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class) { _cleanup_free_ uint8_t *p = NULL; size_t total = 0, offset = 0; - char * const *s; assert(buf); assert(*buf); @@ -503,7 +451,6 @@ int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const _cleanup_free_ uint8_t *p = NULL; uint32_t enterprise_identifier; size_t total, offset; - char * const *s; assert(buf); assert(*buf); @@ -550,7 +497,6 @@ int dhcp6_option_parse( size_t *ret_option_data_len, const uint8_t **ret_option_data) { - const DHCP6Option *option; size_t len; assert(buf); @@ -565,16 +511,15 @@ int dhcp6_option_parse( if (*offset >= buflen - offsetof(DHCP6Option, data)) return -EBADMSG; - option = (const DHCP6Option*) (buf + *offset); - len = be16toh(option->len); + len = unaligned_read_be16(buf + *offset + offsetof(DHCP6Option, len)); if (len > buflen - offsetof(DHCP6Option, data) - *offset) return -EBADMSG; - *offset += offsetof(DHCP6Option, data) + len; - *ret_option_code = be16toh(option->code); + *ret_option_code = unaligned_read_be16(buf + *offset + offsetof(DHCP6Option, code)); *ret_option_data_len = len; - *ret_option_data = option->data; + *ret_option_data = buf + *offset + offsetof(DHCP6Option, data); + *offset += offsetof(DHCP6Option, data) + len; return 0; } @@ -603,9 +548,9 @@ int dhcp6_option_parse_status(const uint8_t *data, size_t data_len, char **ret_s static int dhcp6_option_parse_ia_options(sd_dhcp6_client *client, const uint8_t *buf, size_t buflen) { int r; - assert(buf); + assert(buf || buflen == 0); - for(size_t offset = 0; offset < buflen;) { + for (size_t offset = 0; offset < buflen;) { const uint8_t *data; size_t data_len; uint16_t code; @@ -614,22 +559,22 @@ static int dhcp6_option_parse_ia_options(sd_dhcp6_client *client, const uint8_t if (r < 0) return r; - switch(code) { + switch (code) { case SD_DHCP6_OPTION_STATUS_CODE: { _cleanup_free_ char *msg = NULL; r = dhcp6_option_parse_status(data, data_len, &msg); if (r == -ENOMEM) return r; - if (r < 0) - /* Let's log but ignore the invalid status option. */ - log_dhcp6_client_errno(client, r, - "Received an IA address or PD prefix option with an invalid status sub option, ignoring: %m"); - else if (r > 0) + if (r > 0) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Received an IA address or PD prefix option with non-zero status: %s%s%s", strempty(msg), isempty(msg) ? "" : ": ", dhcp6_message_status_to_string(r)); + if (r < 0) + /* Let's log but ignore the invalid status option. */ + log_dhcp6_client_errno(client, r, + "Received an IA address or PD prefix option with an invalid status sub option, ignoring: %m"); break; } default: @@ -640,19 +585,29 @@ static int dhcp6_option_parse_ia_options(sd_dhcp6_client *client, const uint8_t return 0; } -static int dhcp6_option_parse_ia_address(sd_dhcp6_client *client, const uint8_t *data, size_t len, DHCP6Address **ret) { +static int dhcp6_option_parse_ia_address(sd_dhcp6_client *client, DHCP6IA *ia, const uint8_t *data, size_t len) { + _cleanup_free_ DHCP6Address *a = NULL; uint32_t lt_valid, lt_pref; - DHCP6Address *a; int r; - assert(data); - assert(ret); + assert(ia); + assert(data || len == 0); + + if (!IN_SET(ia->type, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA)) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received an IA address sub-option in an invalid option, ignoring."); if (len < sizeof(struct iaaddr)) return -EBADMSG; - lt_valid = be32toh(((const struct iaaddr*) data)->lifetime_valid); - lt_pref = be32toh(((const struct iaaddr*) data)->lifetime_preferred); + a = new(DHCP6Address, 1); + if (!a) + return -ENOMEM; + + memcpy(&a->iaaddr, data, sizeof(struct iaaddr)); + + lt_valid = be32toh(a->iaaddr.lifetime_valid); + lt_pref = be32toh(a->iaaddr.lifetime_preferred); if (lt_valid == 0) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), @@ -669,27 +624,33 @@ static int dhcp6_option_parse_ia_address(sd_dhcp6_client *client, const uint8_t return r; } - a = new(DHCP6Address, 1); - if (!a) - return -ENOMEM; - - LIST_INIT(addresses, a); - memcpy(&a->iaaddr, data, sizeof(struct iaaddr)); - - *ret = a; + LIST_PREPEND(addresses, ia->addresses, TAKE_PTR(a)); return 0; } -static int dhcp6_option_parse_ia_pdprefix(sd_dhcp6_client *client, const uint8_t *data, size_t len, DHCP6Address **ret) { +static int dhcp6_option_parse_ia_pdprefix(sd_dhcp6_client *client, DHCP6IA *ia, const uint8_t *data, size_t len) { + _cleanup_free_ DHCP6Address *a = NULL; uint32_t lt_valid, lt_pref; - DHCP6Address *a; int r; + assert(ia); + assert(data || len == 0); + + if (ia->type != SD_DHCP6_OPTION_IA_PD) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received an PD prefix sub-option in an invalid option, ignoring"); + if (len < sizeof(struct iapdprefix)) - return -ENOMSG; + return -EBADMSG; + + a = new(DHCP6Address, 1); + if (!a) + return -ENOMEM; + + memcpy(&a->iapdprefix, data, sizeof(struct iapdprefix)); - lt_valid = be32toh(((const struct iapdprefix*) data)->lifetime_valid); - lt_pref = be32toh(((const struct iapdprefix*) data)->lifetime_preferred); + lt_valid = be32toh(a->iapdprefix.lifetime_valid); + lt_pref = be32toh(a->iapdprefix.lifetime_preferred); if (lt_valid == 0) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), @@ -706,14 +667,7 @@ static int dhcp6_option_parse_ia_pdprefix(sd_dhcp6_client *client, const uint8_t return r; } - a = new(DHCP6Address, 1); - if (!a) - return -ENOMEM; - - LIST_INIT(addresses, a); - memcpy(&a->iapdprefix, data, sizeof(struct iapdprefix)); - - *ret = a; + LIST_PREPEND(addresses, ia->addresses, TAKE_PTR(a)); return 0; } @@ -723,16 +677,15 @@ int dhcp6_option_parse_ia( uint16_t option_code, size_t option_data_len, const uint8_t *option_data, - DHCP6IA *ret) { + DHCP6IA **ret) { - _cleanup_(dhcp6_lease_free_ia) DHCP6IA ia = {}; - uint32_t lt_t1, lt_t2, lt_min = UINT32_MAX; - be32_t received_iaid; - size_t offset; + _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL; + uint32_t lt_t1, lt_t2; + size_t header_len; int r; assert(IN_SET(option_code, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA, SD_DHCP6_OPTION_IA_PD)); - assert(option_data); + assert(option_data || option_data_len == 0); assert(ret); /* This will return the following: @@ -745,56 +698,51 @@ int dhcp6_option_parse_ia( switch (option_code) { case SD_DHCP6_OPTION_IA_NA: - - if (option_data_len < DHCP6_OPTION_IA_NA_LEN) - return -EBADMSG; - - offset = DHCP6_OPTION_IA_NA_LEN; - - received_iaid = ((const struct ia_na*) option_data)->id; - lt_t1 = be32toh(((const struct ia_na*) option_data)->lifetime_t1); - lt_t2 = be32toh(((const struct ia_na*) option_data)->lifetime_t2); - break; - case SD_DHCP6_OPTION_IA_PD: - - if (option_data_len < DHCP6_OPTION_IA_PD_LEN) - return -EBADMSG; - - offset = DHCP6_OPTION_IA_PD_LEN; - - received_iaid = ((const struct ia_pd*) option_data)->id; - lt_t1 = be32toh(((const struct ia_pd*) option_data)->lifetime_t1); - lt_t2 = be32toh(((const struct ia_pd*) option_data)->lifetime_t2); + header_len = sizeof(struct ia_header); break; case SD_DHCP6_OPTION_IA_TA: - if (option_data_len < DHCP6_OPTION_IA_TA_LEN) - return -ENOMSG; - - offset = DHCP6_OPTION_IA_TA_LEN; - - received_iaid = ((const struct ia_ta*) option_data)->id; - lt_t1 = lt_t2 = 0; /* No lifetime for IA_TA. */ + header_len = sizeof(be32_t); /* IA_TA does not have lifetime. */ break; default: assert_not_reached(); } + if (option_data_len < header_len) + return -EBADMSG; + + ia = new(DHCP6IA, 1); + if (!ia) + return -ENOMEM; + + *ia = (DHCP6IA) { + .type = option_code, + }; + memcpy(&ia->header, option_data, header_len); + /* According to RFC8415, IAs which do not match the client's IAID should be ignored, * but not necessary to ignore or refuse the whole message. */ - if (received_iaid != iaid) + if (ia->header.id != iaid) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENOANO), "Received an IA option with a different IAID " "from the one chosen by the client, ignoring."); + /* It is not necessary to check if the lifetime_t2 is zero here, as in that case it will be updated later. */ + lt_t1 = be32toh(ia->header.lifetime_t1); + lt_t2 = be32toh(ia->header.lifetime_t2); + if (lt_t1 > lt_t2) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Received an IA option with T1 %"PRIu32"sec > T2 %"PRIu32"sec, ignoring.", lt_t1, lt_t2); + if (lt_t1 == 0 && lt_t2 > 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received an IA option with zero T1 and non-zero T2 (%"PRIu32"sec), ignoring.", + lt_t2); - for (; offset < option_data_len;) { + for (size_t offset = header_len; offset < option_data_len;) { const uint8_t *subdata; size_t subdata_len; uint16_t subopt; @@ -805,41 +753,19 @@ int dhcp6_option_parse_ia( switch (subopt) { case SD_DHCP6_OPTION_IAADDR: { - DHCP6Address *a; - - if (!IN_SET(option_code, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_TA)) { - log_dhcp6_client(client, "Received an IA_PD option with an IA address, ignoring."); - continue; - } - - r = dhcp6_option_parse_ia_address(client, subdata, subdata_len, &a); + r = dhcp6_option_parse_ia_address(client, ia, subdata, subdata_len); if (r == -ENOMEM) return r; - if (r < 0) - /* Ignore the sub-option on non-critical errors. */ - continue; - lt_min = MIN(lt_min, be32toh(a->iaaddr.lifetime_valid)); - LIST_PREPEND(addresses, ia.addresses, a); + /* Ignore non-critical errors in the sub-option. */ break; } case SD_DHCP6_OPTION_IA_PD_PREFIX: { - DHCP6Address *a; - - if (option_code != SD_DHCP6_OPTION_IA_PD) { - log_dhcp6_client(client, "Received an IA_NA or IA_TA option with an PD prefix, ignoring"); - continue; - } - - r = dhcp6_option_parse_ia_pdprefix(client, subdata, subdata_len, &a); + r = dhcp6_option_parse_ia_pdprefix(client, ia, subdata, subdata_len); if (r == -ENOMEM) return r; - if (r < 0) - /* Ignore the sub-option on non-critical errors. */ - continue; - lt_min = MIN(lt_min, be32toh(a->iapdprefix.lifetime_valid)); - LIST_PREPEND(addresses, ia.addresses, a); + /* Ignore non-critical errors in the sub-option. */ break; } case SD_DHCP6_OPTION_STATUS_CODE: { @@ -848,14 +774,14 @@ int dhcp6_option_parse_ia( r = dhcp6_option_parse_status(subdata, subdata_len, &msg); if (r == -ENOMEM) return r; - if (r < 0) - log_dhcp6_client_errno(client, r, - "Received an IA option with an invalid status sub option, ignoring: %m"); - else if (r > 0) + if (r > 0) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Received an IA option with non-zero status: %s%s%s", strempty(msg), isempty(msg) ? "" : ": ", dhcp6_message_status_to_string(r)); + if (r < 0) + log_dhcp6_client_errno(client, r, + "Received an IA option with an invalid status sub option, ignoring: %m"); break; } default: @@ -863,50 +789,11 @@ int dhcp6_option_parse_ia( } } - if (!ia.addresses) + if (!ia->addresses) return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(ENODATA), "Received an IA option without valid IA addresses or PD prefixes, ignoring."); - if (IN_SET(option_code, SD_DHCP6_OPTION_IA_NA, SD_DHCP6_OPTION_IA_PD) && - lt_t1 == 0 && lt_t2 == 0 && lt_min != UINT32_MAX) { - lt_t1 = lt_min / 2; - lt_t2 = lt_min / 10 * 8; - - log_dhcp6_client(client, "Received an IA option with both T1 and T2 equal to zero. " - "Adjusting them based on the minimum valid lifetime of IA addresses or PD prefixes: " - "T1=%"PRIu32"sec, T2=%"PRIu32"sec", lt_t1, lt_t2); - } - - switch(option_code) { - case SD_DHCP6_OPTION_IA_NA: - *ret = (DHCP6IA) { - .type = option_code, - .ia_na.id = iaid, - .ia_na.lifetime_t1 = htobe32(lt_t1), - .ia_na.lifetime_t2 = htobe32(lt_t2), - .addresses = TAKE_PTR(ia.addresses), - }; - break; - case SD_DHCP6_OPTION_IA_TA: - *ret = (DHCP6IA) { - .type = option_code, - .ia_ta.id = iaid, - .addresses = TAKE_PTR(ia.addresses), - }; - break; - case SD_DHCP6_OPTION_IA_PD: - *ret = (DHCP6IA) { - .type = option_code, - .ia_pd.id = iaid, - .ia_pd.lifetime_t1 = htobe32(lt_t1), - .ia_pd.lifetime_t2 = htobe32(lt_t2), - .addresses = TAKE_PTR(ia.addresses), - }; - break; - default: - assert_not_reached(); - } - + *ret = TAKE_PTR(ia); return 0; } diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h new file mode 100644 index 00000000..80aba7f3 --- /dev/null +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-option.h @@ -0,0 +1,104 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include "sd-dhcp6-client.h" + +#include "hash-funcs.h" +#include "list.h" +#include "macro.h" +#include "ordered-set.h" +#include "sparse-endian.h" + +typedef struct sd_dhcp6_option { + unsigned n_ref; + + uint32_t enterprise_identifier; + uint16_t option; + void *data; + size_t length; +} sd_dhcp6_option; + +extern const struct hash_ops dhcp6_option_hash_ops; + +/* Common option header */ +typedef struct DHCP6Option { + be16_t code; + be16_t len; + uint8_t data[]; +} _packed_ DHCP6Option; + +/* Address option */ +struct iaaddr { + struct in6_addr address; + be32_t lifetime_preferred; + be32_t lifetime_valid; +} _packed_; + +/* Prefix Delegation Prefix option */ +struct iapdprefix { + be32_t lifetime_preferred; + be32_t lifetime_valid; + uint8_t prefixlen; + struct in6_addr address; +} _packed_; + +typedef struct DHCP6Address DHCP6Address; + +struct DHCP6Address { + LIST_FIELDS(DHCP6Address, addresses); + + union { + struct iaaddr iaaddr; + struct iapdprefix iapdprefix; + }; +}; + +struct ia_header { + be32_t id; + be32_t lifetime_t1; + be32_t lifetime_t2; +} _packed_; + +typedef struct DHCP6IA { + uint16_t type; + struct ia_header header; + + LIST_HEAD(DHCP6Address, addresses); +} DHCP6IA; + +void dhcp6_ia_clear_addresses(DHCP6IA *ia); +DHCP6IA *dhcp6_ia_free(DHCP6IA *ia); +DEFINE_TRIVIAL_CLEANUP_FUNC(DHCP6IA*, dhcp6_ia_free); + +bool dhcp6_option_can_request(uint16_t option); + +int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code, + size_t optlen, const void *optval); +int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, const DHCP6IA *ia); +int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn); +int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class); +int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const *user_class); +int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedSet *vendor_options); + +int dhcp6_option_parse( + const uint8_t *buf, + size_t buflen, + size_t *offset, + uint16_t *ret_option_code, + size_t *ret_option_data_len, + const uint8_t **ret_option_data); +int dhcp6_option_parse_status(const uint8_t *data, size_t data_len, char **ret_status_message); +int dhcp6_option_parse_ia( + sd_dhcp6_client *client, + be32_t iaid, + uint16_t option_code, + size_t option_data_len, + const uint8_t *option_data, + DHCP6IA **ret); +int dhcp6_option_parse_addresses( + const uint8_t *optval, + size_t optlen, + struct in6_addr **addrs, + size_t *count); +int dhcp6_option_parse_domainname_list(const uint8_t *optval, size_t optlen, char ***ret); +int dhcp6_option_parse_domainname(const uint8_t *optval, size_t optlen, char **ret); diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c new file mode 100644 index 00000000..e19faa51 --- /dev/null +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.c @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "nm-sd-adapt-core.h" + +#include "dhcp6-protocol.h" +#include "string-table.h" + +static const char * const dhcp6_state_table[_DHCP6_STATE_MAX] = { + [DHCP6_STATE_STOPPED] = "stopped", + [DHCP6_STATE_INFORMATION_REQUEST] = "information-request", + [DHCP6_STATE_SOLICITATION] = "solicitation", + [DHCP6_STATE_REQUEST] = "request", + [DHCP6_STATE_BOUND] = "bound", + [DHCP6_STATE_RENEW] = "renew", + [DHCP6_STATE_REBIND] = "rebind", +}; + +DEFINE_STRING_TABLE_LOOKUP_TO_STRING(dhcp6_state, DHCP6State); + +static const char * const dhcp6_message_type_table[_DHCP6_MESSAGE_TYPE_MAX] = { + [DHCP6_MESSAGE_SOLICIT] = "Solicit", + [DHCP6_MESSAGE_ADVERTISE] = "Advertise", + [DHCP6_MESSAGE_REQUEST] = "Request", + [DHCP6_MESSAGE_CONFIRM] = "Confirm", + [DHCP6_MESSAGE_RENEW] = "Renew", + [DHCP6_MESSAGE_REBIND] = "Rebind", + [DHCP6_MESSAGE_REPLY] = "Reply", + [DHCP6_MESSAGE_RELEASE] = "Release", + [DHCP6_MESSAGE_DECLINE] = "Decline", + [DHCP6_MESSAGE_RECONFIGURE] = "Reconfigure", + [DHCP6_MESSAGE_INFORMATION_REQUEST] = "Information Request", + [DHCP6_MESSAGE_RELAY_FORWARD] = "Relay Forward", + [DHCP6_MESSAGE_RELAY_REPLY] = "Relay Reply", + [DHCP6_MESSAGE_LEASE_QUERY] = "Lease Query", + [DHCP6_MESSAGE_LEASE_QUERY_REPLY] = "Lease Query Reply", + [DHCP6_MESSAGE_LEASE_QUERY_DONE] = "Lease Query Done", + [DHCP6_MESSAGE_LEASE_QUERY_DATA] = "Lease Query Data", + [DHCP6_MESSAGE_RECONFIGURE_REQUEST] = "Reconfigure Request", + [DHCP6_MESSAGE_RECONFIGURE_REPLY] = "Reconfigure Reply", + [DHCP6_MESSAGE_DHCPV4_QUERY] = "DHCPv4 Query", + [DHCP6_MESSAGE_DHCPV4_RESPONSE] = "DHCPv4 Response", + [DHCP6_MESSAGE_ACTIVE_LEASE_QUERY] = "Active Lease Query", + [DHCP6_MESSAGE_START_TLS] = "Start TLS", + [DHCP6_MESSAGE_BINDING_UPDATE] = "Binding Update", + [DHCP6_MESSAGE_BINDING_REPLY] = "Binding Reply", + [DHCP6_MESSAGE_POOL_REQUEST] = "Pool Request", + [DHCP6_MESSAGE_POOL_RESPONSE] = "Pool Response", + [DHCP6_MESSAGE_UPDATE_REQUEST] = "Update Request", + [DHCP6_MESSAGE_UPDATE_REQUEST_ALL] = "Update Request All", + [DHCP6_MESSAGE_UPDATE_DONE] = "Update Done", + [DHCP6_MESSAGE_CONNECT] = "Connect", + [DHCP6_MESSAGE_CONNECT_REPLY] = "Connect Reply", + [DHCP6_MESSAGE_DISCONNECT] = "Disconnect", + [DHCP6_MESSAGE_STATE] = "State", + [DHCP6_MESSAGE_CONTACT] = "Contact", +}; + +DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, DHCP6MessageType); + +static const char * const dhcp6_message_status_table[_DHCP6_STATUS_MAX] = { + [DHCP6_STATUS_SUCCESS] = "Success", + [DHCP6_STATUS_UNSPEC_FAIL] = "Unspecified failure", + [DHCP6_STATUS_NO_ADDRS_AVAIL] = "No addresses available", + [DHCP6_STATUS_NO_BINDING] = "Binding unavailable", + [DHCP6_STATUS_NOT_ON_LINK] = "Not on link", + [DHCP6_STATUS_USE_MULTICAST] = "Use multicast", + [DHCP6_STATUS_NO_PREFIX_AVAIL] = "No prefix available", + [DHCP6_STATUS_UNKNOWN_QUERY_TYPE] = "Unknown query type", + [DHCP6_STATUS_MALFORMED_QUERY] = "Malformed query", + [DHCP6_STATUS_NOT_CONFIGURED] = "Not configured", + [DHCP6_STATUS_NOT_ALLOWED] = "Not allowed", + [DHCP6_STATUS_QUERY_TERMINATED] = "Query terminated", + [DHCP6_STATUS_DATA_MISSING] = "Data missing", + [DHCP6_STATUS_CATCHUP_COMPLETE] = "Catch up complete", + [DHCP6_STATUS_NOT_SUPPORTED] = "Not supported", + [DHCP6_STATUS_TLS_CONNECTION_REFUSED] = "TLS connection refused", + [DHCP6_STATUS_ADDRESS_IN_USE] = "Address in use", + [DHCP6_STATUS_CONFIGURATION_CONFLICT] = "Configuration conflict", + [DHCP6_STATUS_MISSING_BINDING_INFORMATION] = "Missing binding information", + [DHCP6_STATUS_OUTDATED_BINDING_INFORMATION] = "Outdated binding information", + [DHCP6_STATUS_SERVER_SHUTTING_DOWN] = "Server shutting down", + [DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED] = "DNS update not supported", + [DHCP6_STATUS_EXCESSIVE_TIME_SKEW] = "Excessive time skew", +}; + +DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, DHCP6Status); diff --git a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h index 5d2af439..f4e47857 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h +++ b/src/libnm-systemd-core/src/libsystemd-network/dhcp6-protocol.h @@ -28,8 +28,8 @@ typedef struct DHCP6Message DHCP6Message; #define DHCP6_MIN_OPTIONS_SIZE \ 1280 - sizeof(struct ip6_hdr) - sizeof(struct udphdr) -#define IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT \ - { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ +#define IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT \ + { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 } } } enum { @@ -100,13 +100,15 @@ typedef enum DHCP6MessageType { DHCP6_MESSAGE_STATE = 34, /* RFC 8156 */ DHCP6_MESSAGE_CONTACT = 35, /* RFC 8156 */ _DHCP6_MESSAGE_TYPE_MAX, - _DHCP6_MESSAGE_TYPE_INVALID = -EINVAL, + _DHCP6_MESSAGE_TYPE_INVALID = -EINVAL, } DHCP6MessageType; typedef enum DHCP6NTPSubOption { DHCP6_NTP_SUBOPTION_SRV_ADDR = 1, DHCP6_NTP_SUBOPTION_MC_ADDR = 2, DHCP6_NTP_SUBOPTION_SRV_FQDN = 3, + _DHCP6_NTP_SUBOPTION_MAX, + _DHCP6_NTP_SUBOPTION_INVALID = -EINVAL, } DHCP6NTPSubOption; /* @@ -138,7 +140,7 @@ typedef enum DHCP6Status { DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED = 21, DHCP6_STATUS_EXCESSIVE_TIME_SKEW = 22, _DHCP6_STATUS_MAX, - _DHCP6_STATUS_INVALID = -EINVAL, + _DHCP6_STATUS_INVALID = -EINVAL, } DHCP6Status; typedef enum DHCP6FQDNFlag { @@ -146,3 +148,9 @@ typedef enum DHCP6FQDNFlag { DHCP6_FQDN_FLAG_O = 1 << 1, DHCP6_FQDN_FLAG_N = 1 << 2, } DHCP6FQDNFlag; + +const char *dhcp6_state_to_string(DHCP6State s) _const_; +const char *dhcp6_message_type_to_string(DHCP6MessageType s) _const_; +DHCP6MessageType dhcp6_message_type_from_string(const char *s) _pure_; +const char *dhcp6_message_status_to_string(DHCP6Status s) _const_; +DHCP6Status dhcp6_message_status_from_string(const char *s) _pure_; diff --git a/src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c b/src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c index b4d7c327..f56929ad 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c +++ b/src/libnm-systemd-core/src/libsystemd-network/lldp-neighbor.c @@ -335,9 +335,9 @@ void lldp_neighbor_start_ttl(sd_lldp_neighbor *n) { usec_t base; /* Use the packet's timestamp if there is one known */ - base = triple_timestamp_by_clock(&n->timestamp, clock_boottime_or_monotonic()); - if (base <= 0 || base == USEC_INFINITY) - base = now(clock_boottime_or_monotonic()); /* Otherwise, take the current time */ + base = triple_timestamp_by_clock(&n->timestamp, CLOCK_BOOTTIME); + if (!timestamp_is_set(base)) + base = now(CLOCK_BOOTTIME); /* Otherwise, take the current time */ n->until = usec_add(base, n->ttl * USEC_PER_SEC); } else diff --git a/src/libnm-systemd-core/src/libsystemd-network/network-internal.h b/src/libnm-systemd-core/src/libsystemd-network/network-internal.h index 895a00d0..5aa225e9 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/network-internal.h +++ b/src/libnm-systemd-core/src/libsystemd-network/network-internal.h @@ -21,7 +21,7 @@ int deserialize_in6_addrs(struct in6_addr **addresses, const char *string); struct sd_dhcp_route; struct sd_dhcp_lease; -void serialize_dhcp_routes(FILE *f, const char *key, sd_dhcp_route **routes, size_t size); +void serialize_dhcp_routes(FILE *f, const char *key, struct sd_dhcp_route **routes, size_t size); int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, const char *string); /* It is not necessary to add deserialize_dhcp_option(). Use unhexmem() instead. */ diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-client.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-client.c index 1600f806..d56978ad 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-client.c @@ -147,11 +147,11 @@ static const uint8_t default_req_opts_anonymize[] = { SD_DHCP_OPTION_ROUTER, /* 3 */ SD_DHCP_OPTION_DOMAIN_NAME_SERVER, /* 6 */ SD_DHCP_OPTION_DOMAIN_NAME, /* 15 */ - SD_DHCP_OPTION_ROUTER_DISCOVER, /* 31 */ + SD_DHCP_OPTION_ROUTER_DISCOVERY, /* 31 */ SD_DHCP_OPTION_STATIC_ROUTE, /* 33 */ SD_DHCP_OPTION_VENDOR_SPECIFIC, /* 43 */ - SD_DHCP_OPTION_NETBIOS_NAMESERVER, /* 44 */ - SD_DHCP_OPTION_NETBIOS_NODETYPE, /* 46 */ + SD_DHCP_OPTION_NETBIOS_NAME_SERVER, /* 44 */ + SD_DHCP_OPTION_NETBIOS_NODE_TYPE, /* 46 */ SD_DHCP_OPTION_NETBIOS_SCOPE, /* 47 */ SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, /* 121 */ SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE, /* 249 */ @@ -249,7 +249,7 @@ int sd_dhcp_client_set_request_option(sd_dhcp_client *client, uint8_t option) { assert_return(client, -EINVAL); assert_return(IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED), -EBUSY); - switch(option) { + switch (option) { case SD_DHCP_OPTION_PAD: case SD_DHCP_OPTION_OVERLOAD: @@ -454,7 +454,7 @@ static int dhcp_client_set_iaid_duid_internal( bool iaid_append, bool iaid_set, uint32_t iaid, - uint16_t duid_type, + DUIDType duid_type, const void *duid, size_t duid_len, usec_t llt_time) { @@ -493,37 +493,20 @@ static int dhcp_client_set_iaid_duid_internal( client->client_id.ns.duid.type = htobe16(duid_type); memcpy(&client->client_id.ns.duid.raw.data, duid, duid_len); len = sizeof(client->client_id.ns.duid.type) + duid_len; - } else - switch (duid_type) { - case DUID_TYPE_LLT: - if (client->mac_addr_len == 0) - return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LLT, MAC address is not set."); - r = dhcp_identifier_set_duid_llt(&client->client_id.ns.duid, llt_time, client->mac_addr, client->mac_addr_len, client->arp_type, &len); - if (r < 0) - return log_dhcp_client_errno(client, r, "Failed to set DUID-LLT: %m"); - break; - case DUID_TYPE_EN: - r = dhcp_identifier_set_duid_en(&client->client_id.ns.duid, &len); - if (r < 0) - return log_dhcp_client_errno(client, r, "Failed to set DUID-EN: %m"); - break; - case DUID_TYPE_LL: - if (client->mac_addr_len == 0) - return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LL, MAC address is not set."); - - r = dhcp_identifier_set_duid_ll(&client->client_id.ns.duid, client->mac_addr, client->mac_addr_len, client->arp_type, &len); - if (r < 0) - return log_dhcp_client_errno(client, r, "Failed to set DUID-LL: %m"); - break; - case DUID_TYPE_UUID: - r = dhcp_identifier_set_duid_uuid(&client->client_id.ns.duid, &len); - if (r < 0) - return log_dhcp_client_errno(client, r, "Failed to set DUID-UUID: %m"); - break; - default: - return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Invalid DUID type"); - } + } else { + r = dhcp_identifier_set_duid(duid_type, client->mac_addr, client->mac_addr_len, + client->arp_type, llt_time, client->test_mode, + &client->client_id.ns.duid, &len); + if (r == -EOPNOTSUPP) + return log_dhcp_client_errno(client, r, + "Failed to set %s. MAC address is not set or " + "interface type is not supported.", + duid_type_to_string(duid_type)); + if (r < 0) + return log_dhcp_client_errno(client, r, "Failed to set %s: %m", + duid_type_to_string(duid_type)); + } client->client_id_len = sizeof(client->client_id.type) + len + (iaid_append ? sizeof(client->client_id.ns.iaid) : 0); @@ -617,7 +600,6 @@ int sd_dhcp_client_set_user_class( sd_dhcp_client *client, char * const *user_class) { - char * const *p; char **s = NULL; assert_return(client, -EINVAL); @@ -844,7 +826,7 @@ static int client_message_init( /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers refuse to issue an DHCP lease if 'secs' is set to zero */ - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); + r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now); if (r < 0) return r; assert(time_now >= client->start_time); @@ -881,7 +863,7 @@ static int client_message_init( if (r < 0) return r; - r = dhcp_identifier_set_duid_en(&client->client_id.ns.duid, &duid_len); + r = dhcp_identifier_set_duid_en(client->test_mode, &client->client_id.ns.duid, &duid_len); if (r < 0) return r; @@ -1269,7 +1251,7 @@ static int client_timeout_resend( assert(client); assert(client->event); - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); + r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now); if (r < 0) goto error; @@ -1317,7 +1299,7 @@ static int client_timeout_resend( } r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, next_timeout, 10 * USEC_PER_MSEC, client_timeout_resend, client, client->event_priority, "dhcp4-resend-timer", true); @@ -1417,12 +1399,12 @@ static int client_initialize_time_events(sd_dhcp_client *client) { assert(client->event); if (client->start_delay > 0) { - assert_se(sd_event_now(client->event, clock_boottime_or_monotonic(), &usec) >= 0); + assert_se(sd_event_now(client->event, CLOCK_BOOTTIME, &usec) >= 0); usec += client->start_delay; } r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, usec, 0, client_timeout_resend, client, client->event_priority, "dhcp4-resend-timer", true); @@ -1463,7 +1445,7 @@ static int client_start_delayed(sd_dhcp_client *client) { client->fd = r; if (IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_INIT_REBOOT)) - client->start_time = now(clock_boottime_or_monotonic()); + client->start_time = now(CLOCK_BOOTTIME); return client_initialize_events(client, client_receive_message_raw); } @@ -1707,7 +1689,7 @@ static int client_set_lease_timeouts(sd_dhcp_client *client) { return 0; } - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); + r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now); if (r < 0) return r; assert(client->request_sent <= time_now); @@ -1740,7 +1722,7 @@ static int client_set_lease_timeouts(sd_dhcp_client *client) { /* arm lifetime timeout */ r = event_reset_time(client->event, &client->timeout_expire, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, client->expire_time, 10 * USEC_PER_MSEC, client_timeout_expire, client, client->event_priority, "dhcp4-lifetime", true); @@ -1756,7 +1738,7 @@ static int client_set_lease_timeouts(sd_dhcp_client *client) { /* arm T2 timeout */ r = event_reset_time(client->event, &client->timeout_t2, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, client->t2_time, 10 * USEC_PER_MSEC, client_timeout_t2, client, client->event_priority, "dhcp4-t2-timeout", true); @@ -1772,7 +1754,7 @@ static int client_set_lease_timeouts(sd_dhcp_client *client) { /* arm T1 timeout */ r = event_reset_time(client->event, &client->timeout_t1, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, client->t1_time, 10 * USEC_PER_MSEC, client_timeout_t1, client, client->event_priority, "dhcp4-t1-timer", true); @@ -1807,7 +1789,7 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, i client->attempt = 0; r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, 0, 0, client_timeout_resend, client, client->event_priority, "dhcp4-resend-timer", true); diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-lease.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-lease.c index 7a250534..5f83fa66 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp-lease.c @@ -217,25 +217,38 @@ int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *addr) { * The returned routes array must be freed by the caller. * Route objects have the same lifetime of the lease and must not be freed. */ -int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, sd_dhcp_route ***routes) { - sd_dhcp_route **ret; - unsigned i; +static int dhcp_lease_get_routes(sd_dhcp_route *routes, size_t n_routes, sd_dhcp_route ***ret) { + assert(routes || n_routes == 0); - assert_return(lease, -EINVAL); - assert_return(routes, -EINVAL); - - if (lease->static_route_size <= 0) + if (n_routes <= 0) return -ENODATA; - ret = new(sd_dhcp_route *, lease->static_route_size); - if (!ret) - return -ENOMEM; + if (ret) { + sd_dhcp_route **buf; + + buf = new(sd_dhcp_route*, n_routes); + if (!buf) + return -ENOMEM; + + for (size_t i = 0; i < n_routes; i++) + buf[i] = &routes[i]; + + *ret = buf; + } - for (i = 0; i < lease->static_route_size; i++) - ret[i] = &lease->static_route[i]; + return (int) n_routes; +} + +int sd_dhcp_lease_get_static_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret) { + assert_return(lease, -EINVAL); + + return dhcp_lease_get_routes(lease->static_routes, lease->n_static_routes, ret); +} + +int sd_dhcp_lease_get_classless_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret) { + assert_return(lease, -EINVAL); - *routes = ret; - return (int) lease->static_route_size; + return dhcp_lease_get_routes(lease->classless_routes, lease->n_classless_routes, ret); } int sd_dhcp_lease_get_search_domains(sd_dhcp_lease *lease, char ***domains) { @@ -314,7 +327,8 @@ static sd_dhcp_lease *dhcp_lease_free(sd_dhcp_lease *lease) { for (sd_dhcp_lease_server_type_t i = 0; i < _SD_DHCP_LEASE_SERVER_TYPE_MAX; i++) free(lease->servers[i].addr); - free(lease->static_route); + free(lease->static_routes); + free(lease->classless_routes); free(lease->client_id); free(lease->vendor_specific); strv_free(lease->search_domains); @@ -469,96 +483,88 @@ static int lease_parse_sip_server(const uint8_t *option, size_t len, struct in_a return lease_parse_in_addrs(option + 1, len - 1, ret, n_ret); } -static int lease_parse_routes( - const uint8_t *option, size_t len, - struct sd_dhcp_route **routes, size_t *routes_size) { - - struct in_addr addr; +static int lease_parse_static_routes(sd_dhcp_lease *lease, const uint8_t *option, size_t len) { + int r; + assert(lease); assert(option || len <= 0); - assert(routes); - assert(routes_size); - - if (len <= 0) - return 0; if (len % 8 != 0) return -EINVAL; - if (!GREEDY_REALLOC(*routes, *routes_size + (len / 8))) - return -ENOMEM; - while (len >= 8) { - struct sd_dhcp_route *route = *routes + *routes_size; - int r; + struct in_addr dst, gw; + uint8_t prefixlen; - route->option = SD_DHCP_OPTION_STATIC_ROUTE; - r = in4_addr_default_prefixlen((struct in_addr*) option, &route->dst_prefixlen); + assert_se(lease_parse_be32(option, 4, &dst.s_addr) >= 0); + option += 4; + + assert_se(lease_parse_be32(option, 4, &gw.s_addr) >= 0); + option += 4; + + len -= 8; + + r = in4_addr_default_prefixlen(&dst, &prefixlen); if (r < 0) { - log_debug("Failed to determine destination prefix length from class based IP, ignoring"); + log_debug("sd-dhcp-lease: cannot determine class of received static route, ignoring."); continue; } - assert_se(lease_parse_be32(option, 4, &addr.s_addr) >= 0); - route->dst_addr = inet_makeaddr(inet_netof(addr), 0); - option += 4; + (void) in4_addr_mask(&dst, prefixlen); - assert_se(lease_parse_be32(option, 4, &route->gw_addr.s_addr) >= 0); - option += 4; + if (!GREEDY_REALLOC(lease->static_routes, lease->n_static_routes + 1)) + return -ENOMEM; - len -= 8; - (*routes_size)++; + lease->static_routes[lease->n_static_routes++] = (struct sd_dhcp_route) { + .dst_addr = dst, + .gw_addr = gw, + .dst_prefixlen = prefixlen, + }; } return 0; } /* parses RFC3442 Classless Static Route Option */ -static int lease_parse_classless_routes( - const uint8_t *option, size_t len, - struct sd_dhcp_route **routes, size_t *routes_size) { - +static int lease_parse_classless_routes(sd_dhcp_lease *lease, const uint8_t *option, size_t len) { + assert(lease); assert(option || len <= 0); - assert(routes); - assert(routes_size); - if (len <= 0) - return 0; - - /* option format: (subnet-mask-width significant-subnet-octets gateway-ip)* */ + /* option format: (subnet-mask-width significant-subnet-octets gateway-ip) */ while (len > 0) { - uint8_t dst_octets; - struct sd_dhcp_route *route; - - if (!GREEDY_REALLOC(*routes, *routes_size + 1)) - return -ENOMEM; - - route = *routes + *routes_size; - route->option = SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE; + uint8_t prefixlen, dst_octets; + struct in_addr dst = {}, gw; - dst_octets = (*option == 0 ? 0 : ((*option - 1) / 8) + 1); - route->dst_prefixlen = *option; + prefixlen = *option; option++; len--; + dst_octets = DIV_ROUND_UP(prefixlen, 8); + /* can't have more than 4 octets in IPv4 */ if (dst_octets > 4 || len < dst_octets) return -EINVAL; - route->dst_addr.s_addr = 0; - memcpy(&route->dst_addr.s_addr, option, dst_octets); + memcpy(&dst, option, dst_octets); option += dst_octets; len -= dst_octets; if (len < 4) return -EINVAL; - assert_se(lease_parse_be32(option, 4, &route->gw_addr.s_addr) >= 0); + assert_se(lease_parse_be32(option, 4, &gw.s_addr) >= 0); option += 4; len -= 4; - (*routes_size)++; + if (!GREEDY_REALLOC(lease->classless_routes, lease->n_classless_routes + 1)) + return -ENOMEM; + + lease->classless_routes[lease->n_classless_routes++] = (struct sd_dhcp_route) { + .dst_addr = dst, + .gw_addr = gw, + .dst_prefixlen = prefixlen, + }; } return 0; @@ -625,7 +631,7 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void assert(lease); - switch(code) { + switch (code) { case SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME: r = lease_parse_u32(option, len, &lease->lifetime, 1); @@ -700,12 +706,12 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void break; case SD_DHCP_OPTION_STATIC_ROUTE: - r = lease_parse_routes(option, len, &lease->static_route, &lease->static_route_size); + r = lease_parse_static_routes(lease, option, len); if (r < 0) log_debug_errno(r, "Failed to parse static routes, ignoring: %m"); break; - case SD_DHCP_OPTION_INTERFACE_MTU: + case SD_DHCP_OPTION_MTU_INTERFACE: r = lease_parse_u16(option, len, &lease->mtu, 68); if (r < 0) log_debug_errno(r, "Failed to parse MTU, ignoring: %m"); @@ -725,7 +731,7 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void break; - case SD_DHCP_OPTION_DOMAIN_SEARCH_LIST: + case SD_DHCP_OPTION_DOMAIN_SEARCH: r = dhcp_lease_parse_search_domains(option, len, &lease->search_domains); if (r < 0) log_debug_errno(r, "Failed to parse Domain Search List, ignoring: %m"); @@ -746,28 +752,25 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void log_debug_errno(r, "Failed to parse root path, ignoring: %m"); break; - case SD_DHCP_OPTION_RENEWAL_T1_TIME: + case SD_DHCP_OPTION_RENEWAL_TIME: r = lease_parse_u32(option, len, &lease->t1, 1); if (r < 0) log_debug_errno(r, "Failed to parse T1 time, ignoring: %m"); break; - case SD_DHCP_OPTION_REBINDING_T2_TIME: + case SD_DHCP_OPTION_REBINDING_TIME: r = lease_parse_u32(option, len, &lease->t2, 1); if (r < 0) log_debug_errno(r, "Failed to parse T2 time, ignoring: %m"); break; case SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE: - r = lease_parse_classless_routes( - option, len, - &lease->static_route, - &lease->static_route_size); + r = lease_parse_classless_routes(lease, option, len); if (r < 0) log_debug_errno(r, "Failed to parse classless routes, ignoring: %m"); break; - case SD_DHCP_OPTION_NEW_TZDB_TIMEZONE: { + case SD_DHCP_OPTION_TZDB_TIMEZONE: { _cleanup_free_ char *tz = NULL; r = lease_parse_string(option, len, &tz); @@ -909,19 +912,21 @@ int dhcp_lease_parse_search_domains(const uint8_t *option, size_t len, char ***d pos = next_chunk; } - *domains = TAKE_PTR(names); + strv_free_and_replace(*domains, names); return cnt; } int dhcp_lease_insert_private_option(sd_dhcp_lease *lease, uint8_t tag, const void *data, uint8_t len) { - struct sd_dhcp_raw_option *cur, *option; + struct sd_dhcp_raw_option *option, *before = NULL; assert(lease); LIST_FOREACH(options, cur, lease->private_options) { - if (tag < cur->tag) + if (tag < cur->tag) { + before = cur; break; + } if (tag == cur->tag) { log_debug("Ignoring duplicate option, tagged %i.", tag); return 0; @@ -940,7 +945,7 @@ int dhcp_lease_insert_private_option(sd_dhcp_lease *lease, uint8_t tag, const vo return -ENOMEM; } - LIST_INSERT_BEFORE(options, lease->private_options, cur, option); + LIST_INSERT_BEFORE(options, lease->private_options, before, option); return 0; } @@ -960,7 +965,6 @@ int dhcp_lease_new(sd_dhcp_lease **ret) { int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { _cleanup_(unlink_and_freep) char *temp_path = NULL; _cleanup_fclose_ FILE *f = NULL; - struct sd_dhcp_raw_option *option; struct in_addr address; const struct in_addr *addresses; const void *client_id, *data; @@ -969,7 +973,7 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { const char *string; uint16_t mtu; _cleanup_free_ sd_dhcp_route **routes = NULL; - char **search_domains = NULL; + char **search_domains; uint32_t t1, t2, lifetime; int r; @@ -1068,9 +1072,14 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { if (r >= 0) fprintf(f, "ROOT_PATH=%s\n", string); - r = sd_dhcp_lease_get_routes(lease, &routes); + r = sd_dhcp_lease_get_static_routes(lease, &routes); + if (r > 0) + serialize_dhcp_routes(f, "STATIC_ROUTES", routes, r); + + routes = mfree(routes); + r = sd_dhcp_lease_get_classless_routes(lease, &routes); if (r > 0) - serialize_dhcp_routes(f, "ROUTES", routes, r); + serialize_dhcp_routes(f, "CLASSLESS_ROUTES", routes, r); r = sd_dhcp_lease_get_timezone(lease, &string); if (r >= 0) @@ -1118,6 +1127,18 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { return 0; } +static char **private_options_free(char **options) { + if (!options) + return NULL; + + for (unsigned i = 0; i < SD_DHCP_OPTION_PRIVATE_LAST - SD_DHCP_OPTION_PRIVATE_BASE + 1; i++) + free(options[i]); + + return mfree(options); +} + +DEFINE_TRIVIAL_CLEANUP_FUNC(char**, private_options_free); + int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { _cleanup_(sd_dhcp_lease_unrefp) sd_dhcp_lease *lease = NULL; _cleanup_free_ char @@ -1134,14 +1155,15 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { *smtp = NULL, *lpr = NULL, *mtu = NULL, - *routes = NULL, + *static_routes = NULL, + *classless_routes = NULL, *domains = NULL, *client_id_hex = NULL, *vendor_specific_hex = NULL, *lifetime = NULL, *t1 = NULL, - *t2 = NULL, - *options[SD_DHCP_OPTION_PRIVATE_LAST - SD_DHCP_OPTION_PRIVATE_BASE + 1] = {}; + *t2 = NULL; + _cleanup_(private_options_freep) char **options = NULL; int r, i; @@ -1152,6 +1174,10 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { if (r < 0) return r; + options = new0(char*, SD_DHCP_OPTION_PRIVATE_LAST - SD_DHCP_OPTION_PRIVATE_BASE + 1); + if (!options) + return -ENOMEM; + r = parse_env_file(NULL, lease_file, "ADDRESS", &address, "ROUTER", &router, @@ -1170,7 +1196,8 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { "HOSTNAME", &lease->hostname, "DOMAIN_SEARCH_LIST", &domains, "ROOT_PATH", &lease->root_path, - "ROUTES", &routes, + "STATIC_ROUTES", &static_routes, + "CLASSLESS_ROUTES", &classless_routes, "CLIENTID", &client_id_hex, "TIMEZONE", &lease->timezone, "VENDOR_SPECIFIC", &vendor_specific_hex, @@ -1317,13 +1344,22 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { lease->search_domains = TAKE_PTR(a); } - if (routes) { + if (static_routes) { r = deserialize_dhcp_routes( - &lease->static_route, - &lease->static_route_size, - routes); + &lease->static_routes, + &lease->n_static_routes, + static_routes); if (r < 0) - log_debug_errno(r, "Failed to parse DHCP routes %s, ignoring: %m", routes); + log_debug_errno(r, "Failed to parse DHCP static routes %s, ignoring: %m", static_routes); + } + + if (classless_routes) { + r = deserialize_dhcp_routes( + &lease->classless_routes, + &lease->n_classless_routes, + classless_routes); + if (r < 0) + log_debug_errno(r, "Failed to parse DHCP classless routes %s, ignoring: %m", classless_routes); } if (lifetime) { @@ -1470,9 +1506,3 @@ int sd_dhcp_route_get_gateway(sd_dhcp_route *route, struct in_addr *gateway) { *gateway = route->gw_addr; return 0; } - -int sd_dhcp_route_get_option(sd_dhcp_route *route) { - assert_return(route, -EINVAL); - - return route->option; -} diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c index 0c2206ff..4394ef49 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-client.c @@ -20,7 +20,6 @@ #include "dhcp-identifier.h" #include "dhcp6-internal.h" #include "dhcp6-lease-internal.h" -#include "dhcp6-protocol.h" #include "dns-domain.h" #include "event-util.h" #include "fd-util.h" @@ -28,74 +27,11 @@ #include "hostname-util.h" #include "in-addr-util.h" #include "io-util.h" -#include "network-common.h" #include "random-util.h" #include "socket-util.h" -#include "string-table.h" #include "strv.h" -#include "util.h" #include "web-util.h" -#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN - -#define IRT_DEFAULT (1 * USEC_PER_DAY) -#define IRT_MINIMUM (600 * USEC_PER_SEC) - -/* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */ -typedef enum DHCP6RequestIA { - DHCP6_REQUEST_IA_NA = 1 << 0, - DHCP6_REQUEST_IA_TA = 1 << 1, /* currently not used */ - DHCP6_REQUEST_IA_PD = 1 << 2, -} DHCP6RequestIA; - -struct sd_dhcp6_client { - unsigned n_ref; - - DHCP6State state; - sd_event *event; - int event_priority; - int ifindex; - char *ifname; - DHCP6Address hint_pd_prefix; - struct in6_addr local_address; - uint8_t mac_addr[MAX_MAC_ADDR_LEN]; - size_t mac_addr_len; - uint16_t arp_type; - DHCP6IA ia_na; - DHCP6IA ia_pd; - sd_event_source *timeout_t1; - sd_event_source *timeout_t2; - DHCP6RequestIA request_ia; - be32_t transaction_id; - usec_t transaction_start; - struct sd_dhcp6_lease *lease; - int fd; - bool information_request; - bool iaid_set; - be16_t *req_opts; - size_t req_opts_len; - char *fqdn; - char *mudurl; - char **user_class; - char **vendor_class; - sd_event_source *receive_message; - usec_t retransmit_time; - uint8_t retransmit_count; - sd_event_source *timeout_resend; - sd_event_source *timeout_resend_expire; - sd_dhcp6_client_callback_t callback; - void *userdata; - struct duid duid; - size_t duid_len; - usec_t information_request_time_usec; - usec_t information_refresh_time_usec; - OrderedHashmap *extra_options; - OrderedHashmap *vendor_options; - - /* Ignore ifindex when generating iaid. See dhcp_identifier_set_iaid(). */ - bool test_mode; -}; - static const uint16_t default_req_opts[] = { SD_DHCP6_OPTION_DNS_SERVERS, SD_DHCP6_OPTION_DOMAIN_LIST, @@ -103,78 +39,10 @@ static const uint16_t default_req_opts[] = { SD_DHCP6_OPTION_SNTP_SERVERS, }; -const char * dhcp6_message_type_table[_DHCP6_MESSAGE_TYPE_MAX] = { - [DHCP6_MESSAGE_SOLICIT] = "Solicit", - [DHCP6_MESSAGE_ADVERTISE] = "Advertise", - [DHCP6_MESSAGE_REQUEST] = "Request", - [DHCP6_MESSAGE_CONFIRM] = "Confirm", - [DHCP6_MESSAGE_RENEW] = "Renew", - [DHCP6_MESSAGE_REBIND] = "Rebind", - [DHCP6_MESSAGE_REPLY] = "Reply", - [DHCP6_MESSAGE_RELEASE] = "Release", - [DHCP6_MESSAGE_DECLINE] = "Decline", - [DHCP6_MESSAGE_RECONFIGURE] = "Reconfigure", - [DHCP6_MESSAGE_INFORMATION_REQUEST] = "Information Request", - [DHCP6_MESSAGE_RELAY_FORWARD] = "Relay Forward", - [DHCP6_MESSAGE_RELAY_REPLY] = "Relay Reply", - [DHCP6_MESSAGE_LEASE_QUERY] = "Lease Query", - [DHCP6_MESSAGE_LEASE_QUERY_REPLY] = "Lease Query Reply", - [DHCP6_MESSAGE_LEASE_QUERY_DONE] = "Lease Query Done", - [DHCP6_MESSAGE_LEASE_QUERY_DATA] = "Lease Query Data", - [DHCP6_MESSAGE_RECONFIGURE_REQUEST] = "Reconfigure Request", - [DHCP6_MESSAGE_RECONFIGURE_REPLY] = "Reconfigure Reply", - [DHCP6_MESSAGE_DHCPV4_QUERY] = "DHCPv4 Query", - [DHCP6_MESSAGE_DHCPV4_RESPONSE] = "DHCPv4 Response", - [DHCP6_MESSAGE_ACTIVE_LEASE_QUERY] = "Active Lease Query", - [DHCP6_MESSAGE_START_TLS] = "Start TLS", - [DHCP6_MESSAGE_BINDING_UPDATE] = "Binding Update", - [DHCP6_MESSAGE_BINDING_REPLY] = "Binding Reply", - [DHCP6_MESSAGE_POOL_REQUEST] = "Pool Request", - [DHCP6_MESSAGE_POOL_RESPONSE] = "Pool Response", - [DHCP6_MESSAGE_UPDATE_REQUEST] = "Update Request", - [DHCP6_MESSAGE_UPDATE_REQUEST_ALL] = "Update Request All", - [DHCP6_MESSAGE_UPDATE_DONE] = "Update Done", - [DHCP6_MESSAGE_CONNECT] = "Connect", - [DHCP6_MESSAGE_CONNECT_REPLY] = "Connect Reply", - [DHCP6_MESSAGE_DISCONNECT] = "Disconnect", - [DHCP6_MESSAGE_STATE] = "State", - [DHCP6_MESSAGE_CONTACT] = "Contact", -}; - -DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, int); - -const char * dhcp6_message_status_table[_DHCP6_STATUS_MAX] = { - [DHCP6_STATUS_SUCCESS] = "Success", - [DHCP6_STATUS_UNSPEC_FAIL] = "Unspecified failure", - [DHCP6_STATUS_NO_ADDRS_AVAIL] = "No addresses available", - [DHCP6_STATUS_NO_BINDING] = "Binding unavailable", - [DHCP6_STATUS_NOT_ON_LINK] = "Not on link", - [DHCP6_STATUS_USE_MULTICAST] = "Use multicast", - [DHCP6_STATUS_NO_PREFIX_AVAIL] = "No prefix available", - [DHCP6_STATUS_UNKNOWN_QUERY_TYPE] = "Unknown query type", - [DHCP6_STATUS_MALFORMED_QUERY] = "Malformed query", - [DHCP6_STATUS_NOT_CONFIGURED] = "Not configured", - [DHCP6_STATUS_NOT_ALLOWED] = "Not allowed", - [DHCP6_STATUS_QUERY_TERMINATED] = "Query terminated", - [DHCP6_STATUS_DATA_MISSING] = "Data missing", - [DHCP6_STATUS_CATCHUP_COMPLETE] = "Catch up complete", - [DHCP6_STATUS_NOT_SUPPORTED] = "Not supported", - [DHCP6_STATUS_TLS_CONNECTION_REFUSED] = "TLS connection refused", - [DHCP6_STATUS_ADDRESS_IN_USE] = "Address in use", - [DHCP6_STATUS_CONFIGURATION_CONFLICT] = "Configuration conflict", - [DHCP6_STATUS_MISSING_BINDING_INFORMATION] = "Missing binding information", - [DHCP6_STATUS_OUTDATED_BINDING_INFORMATION] = "Outdated binding information", - [DHCP6_STATUS_SERVER_SHUTTING_DOWN] = "Server shutting down", - [DHCP6_STATUS_DNS_UPDATE_NOT_SUPPORTED] = "DNS update not supported", - [DHCP6_STATUS_EXCESSIVE_TIME_SKEW] = "Excessive time skew", -}; - -DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, int); - #define DHCP6_CLIENT_DONT_DESTROY(client) \ _cleanup_(sd_dhcp6_client_unrefp) _unused_ sd_dhcp6_client *_dont_destroy_##client = sd_dhcp6_client_ref(client) -static int client_start(sd_dhcp6_client *client, DHCP6State state); +static int client_start_transaction(sd_dhcp6_client *client, DHCP6State state); int sd_dhcp6_client_set_callback( sd_dhcp6_client *client, @@ -191,8 +59,8 @@ int sd_dhcp6_client_set_callback( int sd_dhcp6_client_set_ifindex(sd_dhcp6_client *client, int ifindex) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); assert_return(ifindex > 0, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); client->ifindex = ifindex; return 0; @@ -228,9 +96,9 @@ int sd_dhcp6_client_set_local_address( const struct in6_addr *local_address) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); assert_return(local_address, -EINVAL); assert_return(in6_addr_is_link_local(local_address) > 0, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); client->local_address = *local_address; @@ -239,13 +107,16 @@ int sd_dhcp6_client_set_local_address( int sd_dhcp6_client_set_mac( sd_dhcp6_client *client, - const uint8_t *addr, size_t addr_len, + const uint8_t *addr, + size_t addr_len, uint16_t arp_type) { assert_return(client, -EINVAL); assert_return(addr, -EINVAL); - assert_return(addr_len <= MAX_MAC_ADDR_LEN, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(addr_len <= sizeof(client->hw_addr.bytes), -EINVAL); + + /* Unlike the other setters, it is OK to set a new MAC address while the client is running, + * as the MAC address is used only when setting DUID or IAID. */ if (arp_type == ARPHRD_ETHER) assert_return(addr_len == ETH_ALEN, -EINVAL); @@ -253,12 +124,12 @@ int sd_dhcp6_client_set_mac( assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); else { client->arp_type = ARPHRD_NONE; - client->mac_addr_len = 0; + client->hw_addr.length = 0; return 0; } - memcpy(&client->mac_addr, addr, addr_len); - client->mac_addr_len = addr_len; + memcpy(client->hw_addr.bytes, addr, addr_len); + client->hw_addr.length = addr_len; client->arp_type = arp_type; return 0; @@ -267,25 +138,47 @@ int sd_dhcp6_client_set_mac( int sd_dhcp6_client_set_prefix_delegation_hint( sd_dhcp6_client *client, uint8_t prefixlen, - const struct in6_addr *pd_address) { + const struct in6_addr *pd_prefix) { + + _cleanup_free_ DHCP6Address *prefix = NULL; assert_return(client, -EINVAL); - assert_return(pd_address, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); + + if (!pd_prefix) { + /* clear previous assignments. */ + dhcp6_ia_clear_addresses(&client->ia_pd); + return 0; + } - client->hint_pd_prefix.iapdprefix.address = *pd_address; - client->hint_pd_prefix.iapdprefix.prefixlen = prefixlen; + assert_return(prefixlen > 0 && prefixlen <= 128, -EINVAL); - return 0; + prefix = new(DHCP6Address, 1); + if (!prefix) + return -ENOMEM; + + *prefix = (DHCP6Address) { + .iapdprefix.address = *pd_prefix, + .iapdprefix.prefixlen = prefixlen, + }; + + LIST_PREPEND(addresses, client->ia_pd.addresses, TAKE_PTR(prefix)); + return 1; } int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option *v) { int r; assert_return(client, -EINVAL); - assert_return(v, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); - r = ordered_hashmap_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v, v); + if (!v) { + /* Clear the previous assignments. */ + ordered_set_clear(client->vendor_options); + return 0; + } + + r = ordered_set_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v); if (r < 0) return r; @@ -295,10 +188,12 @@ int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option * } static int client_ensure_duid(sd_dhcp6_client *client) { + assert(client); + if (client->duid_len != 0) return 0; - return dhcp_identifier_set_duid_en(&client->duid, &client->duid_len); + return dhcp_identifier_set_duid_en(client->test_mode, &client->duid, &client->duid_len); } /** @@ -308,15 +203,15 @@ static int client_ensure_duid(sd_dhcp6_client *client) { */ static int dhcp6_client_set_duid_internal( sd_dhcp6_client *client, - uint16_t duid_type, + DUIDType duid_type, const void *duid, size_t duid_len, usec_t llt_time) { int r; assert_return(client, -EINVAL); - assert_return(duid_len == 0 || duid != NULL, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); + assert_return(duid_len == 0 || duid, -EINVAL); if (duid) { r = dhcp_validate_duid_len(duid_type, duid_len, true); @@ -331,41 +226,23 @@ static int dhcp6_client_set_duid_internal( client->duid.type = htobe16(duid_type); memcpy(&client->duid.raw.data, duid, duid_len); client->duid_len = sizeof(client->duid.type) + duid_len; - } else -#if 0 /* NM_IGNORED */ - switch (duid_type) { - case DUID_TYPE_LLT: - if (client->mac_addr_len == 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LLT, MAC address is not set."); - - r = dhcp_identifier_set_duid_llt(&client->duid, llt_time, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len); - if (r < 0) - return log_dhcp6_client_errno(client, r, "Failed to set DUID-LLT: %m"); - break; - case DUID_TYPE_EN: - r = dhcp_identifier_set_duid_en(&client->duid, &client->duid_len); - if (r < 0) - return log_dhcp6_client_errno(client, r, "Failed to set DUID-EN: %m"); - break; - case DUID_TYPE_LL: - if (client->mac_addr_len == 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LL, MAC address is not set."); - r = dhcp_identifier_set_duid_ll(&client->duid, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len); - if (r < 0) - return log_dhcp6_client_errno(client, r, "Failed to set DUID-LL: %m"); - break; - case DUID_TYPE_UUID: - r = dhcp_identifier_set_duid_uuid(&client->duid, &client->duid_len); - if (r < 0) - return log_dhcp6_client_errno(client, r, "Failed to set DUID-UUID: %m"); - break; - default: - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "Invalid DUID type"); - } + } else { +#if 0 /* NM_IGNORED */ + r = dhcp_identifier_set_duid(duid_type, client->hw_addr.bytes, client->hw_addr.length, + client->arp_type, llt_time, client->test_mode, &client->duid, &client->duid_len); + if (r == -EOPNOTSUPP) + return log_dhcp6_client_errno(client, r, + "Failed to set %s. MAC address is not set or " + "interface type is not supported.", + duid_type_to_string(duid_type)); + if (r < 0) + return log_dhcp6_client_errno(client, r, "Failed to set %s: %m", + duid_type_to_string(duid_type)); #else /* NM_IGNORED */ g_return_val_if_reached (-EINVAL); #endif /* NM_IGNORED */ + } return 0; } @@ -384,14 +261,6 @@ int sd_dhcp6_client_set_duid_llt( return dhcp6_client_set_duid_internal(client, DUID_TYPE_LLT, NULL, 0, llt_time); } -static const char* const dhcp6_duid_type_table[_DUID_TYPE_MAX] = { - [DUID_TYPE_LLT] = "DUID-LLT", - [DUID_TYPE_EN] = "DUID-EN/Vendor", - [DUID_TYPE_LL] = "DUID-LL", - [DUID_TYPE_UUID] = "UUID", -}; -DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(dhcp6_duid_type, DUIDType); - int sd_dhcp6_client_duid_as_string( sd_dhcp6_client *client, char **duid) { @@ -403,7 +272,7 @@ int sd_dhcp6_client_duid_as_string( assert_return(client->duid_len > 0, -ENODATA); assert_return(duid, -EINVAL); - v = dhcp6_duid_type_to_string(be16toh(client->duid.type)); + v = duid_type_to_string(be16toh(client->duid.type)); if (v) { s = strdup(v); if (!s) @@ -429,19 +298,36 @@ int sd_dhcp6_client_duid_as_string( int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid) { assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); - client->ia_na.ia_na.id = htobe32(iaid); - client->ia_pd.ia_pd.id = htobe32(iaid); + client->ia_na.header.id = htobe32(iaid); + client->ia_pd.header.id = htobe32(iaid); client->iaid_set = true; return 0; } -void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode) { +static int client_ensure_iaid(sd_dhcp6_client *client) { + int r; + uint32_t iaid; + assert(client); - client->test_mode = test_mode; + if (client->iaid_set) + return 0; + + r = dhcp_identifier_set_iaid(client->ifindex, client->hw_addr.bytes, client->hw_addr.length, + /* legacy_unstable_byteorder = */ true, + /* use_mac = */ client->test_mode, + &iaid); + if (r < 0) + return r; + + client->ia_na.header.id = iaid; + client->ia_pd.header.id = iaid; + client->iaid_set = true; + + return 0; } int sd_dhcp6_client_get_iaid(sd_dhcp6_client *client, uint32_t *iaid) { @@ -451,16 +337,23 @@ int sd_dhcp6_client_get_iaid(sd_dhcp6_client *client, uint32_t *iaid) { if (!client->iaid_set) return -ENODATA; - *iaid = be32toh(client->ia_na.ia_na.id); + *iaid = be32toh(client->ia_na.header.id); return 0; } +void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode) { + assert(client); + + client->test_mode = test_mode; +} + int sd_dhcp6_client_set_fqdn( sd_dhcp6_client *client, const char *fqdn) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); /* Make sure FQDN qualifies as DNS and as Linux hostname */ if (fqdn && @@ -472,7 +365,7 @@ int sd_dhcp6_client_set_fqdn( int sd_dhcp6_client_set_information_request(sd_dhcp6_client *client, int enabled) { assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); client->information_request = enabled; @@ -492,7 +385,7 @@ int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client, uint16_t option) size_t t; assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); if (!dhcp6_option_can_request(option)) return -EINVAL; @@ -511,7 +404,7 @@ int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client, uint16_t option) int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mudurl) { assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); assert_return(mudurl, -EINVAL); assert_return(strlen(mudurl) <= UINT8_MAX, -EINVAL); assert_return(http_url_is_valid(mudurl), -EINVAL); @@ -520,11 +413,10 @@ int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mud } int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const *user_class) { - char * const *p; char **s; assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); assert_return(!strv_isempty(user_class), -EINVAL); STRV_FOREACH(p, user_class) { @@ -542,11 +434,10 @@ int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const } int sd_dhcp6_client_set_request_vendor_class(sd_dhcp6_client *client, char * const *vendor_class) { - char * const *p; char **s; assert_return(client, -EINVAL); - assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); assert_return(!strv_isempty(vendor_class), -EINVAL); STRV_FOREACH(p, vendor_class) { @@ -574,6 +465,7 @@ int sd_dhcp6_client_get_prefix_delegation(sd_dhcp6_client *client, int *delegati int sd_dhcp6_client_set_prefix_delegation(sd_dhcp6_client *client, int delegation) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_PD, delegation); @@ -591,16 +483,20 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client, int *request) { int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); SET_FLAG(client->request_ia, DHCP6_REQUEST_IA_NA, request); return 0; } -int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) { - assert_return(client, -EINVAL); +int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) { + assert(client); + assert(client->test_mode); - client->transaction_id = transaction_id; + /* This is for tests or fuzzers. */ + + client->transaction_id = transaction_id & htobe32(0x00ffffff); return 0; } @@ -631,6 +527,18 @@ int sd_dhcp6_client_add_option(sd_dhcp6_client *client, sd_dhcp6_option *v) { return 0; } +static void client_set_state(sd_dhcp6_client *client, DHCP6State state) { + assert(client); + + if (client->state == state) + return; + + log_dhcp6_client(client, "State changed: %s -> %s", + dhcp6_state_to_string(client->state), dhcp6_state_to_string(state)); + + client->state = state; +} + static void client_notify(sd_dhcp6_client *client, int event) { assert(client); @@ -638,52 +546,122 @@ static void client_notify(sd_dhcp6_client *client, int event) { client->callback(client, event, client->userdata); } -static int client_reset(sd_dhcp6_client *client) { - assert(client); +static void client_stop(sd_dhcp6_client *client, int error) { + DHCP6_CLIENT_DONT_DESTROY(client); - client->lease = sd_dhcp6_lease_unref(client->lease); + assert(client); - client->receive_message = - sd_event_source_unref(client->receive_message); + client_notify(client, error); - client->transaction_id = 0; - client->transaction_start = 0; + client->lease = sd_dhcp6_lease_unref(client->lease); - client->retransmit_time = 0; - client->retransmit_count = 0; + /* Reset IRT here. Otherwise, we cannot restart the client in the information requesting mode, + * even though the lease is freed below. */ + client->information_request_time_usec = 0; + client->information_refresh_time_usec = 0; + (void) event_source_disable(client->receive_message); (void) event_source_disable(client->timeout_resend); - (void) event_source_disable(client->timeout_resend_expire); + (void) event_source_disable(client->timeout_expire); (void) event_source_disable(client->timeout_t1); (void) event_source_disable(client->timeout_t2); - client->state = DHCP6_STATE_STOPPED; - - return 0; + client_set_state(client, DHCP6_STATE_STOPPED); } -static void client_stop(sd_dhcp6_client *client, int error) { - DHCP6_CLIENT_DONT_DESTROY(client); +static int client_append_common_options_in_managed_mode( + sd_dhcp6_client *client, + uint8_t **opt, + size_t *optlen, + const DHCP6IA *ia_na, + const DHCP6IA *ia_pd) { + + int r; assert(client); + assert(IN_SET(client->state, + DHCP6_STATE_SOLICITATION, + DHCP6_STATE_REQUEST, + DHCP6_STATE_RENEW, + DHCP6_STATE_REBIND)); + assert(opt); + assert(optlen); + + if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && ia_na) { + r = dhcp6_option_append_ia(opt, optlen, ia_na); + if (r < 0) + return r; + } - client_notify(client, error); + if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && ia_pd) { + r = dhcp6_option_append_ia(opt, optlen, ia_pd); + if (r < 0) + return r; + } + + if (client->fqdn) { + r = dhcp6_option_append_fqdn(opt, optlen, client->fqdn); + if (r < 0) + return r; + } + + if (client->user_class) { + r = dhcp6_option_append_user_class(opt, optlen, client->user_class); + if (r < 0) + return r; + } + + if (client->vendor_class) { + r = dhcp6_option_append_vendor_class(opt, optlen, client->vendor_class); + if (r < 0) + return r; + } - client_reset(client); + if (!ordered_set_isempty(client->vendor_options)) { + r = dhcp6_option_append_vendor_option(opt, optlen, client->vendor_options); + if (r < 0) + return r; + } + + return 0; +} + +static DHCP6MessageType client_message_type_from_state(sd_dhcp6_client *client) { + assert(client); + + switch (client->state) { + case DHCP6_STATE_INFORMATION_REQUEST: + return DHCP6_MESSAGE_INFORMATION_REQUEST; + case DHCP6_STATE_SOLICITATION: + return DHCP6_MESSAGE_SOLICIT; + case DHCP6_STATE_REQUEST: + return DHCP6_MESSAGE_REQUEST; + case DHCP6_STATE_RENEW: + return DHCP6_MESSAGE_RENEW; + case DHCP6_STATE_REBIND: + return DHCP6_MESSAGE_REBIND; + default: + assert_not_reached(); + } } -static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { +int dhcp6_client_send_message(sd_dhcp6_client *client) { _cleanup_free_ DHCP6Message *message = NULL; struct in6_addr all_servers = IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT; struct sd_dhcp6_option *j; size_t len, optlen = 512; uint8_t *opt; - int r; - usec_t elapsed_usec; + usec_t elapsed_usec, time_now; be16_t elapsed_time; + int r; assert(client); + assert(client->event); + + r = sd_event_now(client->event, CLOCK_BOOTTIME, &time_now); + if (r < 0) + return r; len = sizeof(DHCP6Message) + optlen; @@ -694,194 +672,56 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { opt = (uint8_t *)(message + 1); message->transaction_id = client->transaction_id; + message->type = client_message_type_from_state(client); - switch(client->state) { + switch (client->state) { case DHCP6_STATE_INFORMATION_REQUEST: - message->type = DHCP6_MESSAGE_INFORMATION_REQUEST; - - if (client->mudurl) { - r = dhcp6_option_append(&opt, &optlen, - SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl), - client->mudurl); - if (r < 0) - return r; - } - break; case DHCP6_STATE_SOLICITATION: - message->type = DHCP6_MESSAGE_SOLICIT; - - r = dhcp6_option_append(&opt, &optlen, - SD_DHCP6_OPTION_RAPID_COMMIT, 0, NULL); + r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_RAPID_COMMIT, 0, NULL); if (r < 0) return r; - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA)) { - r = dhcp6_option_append_ia(&opt, &optlen, - &client->ia_na); - if (r < 0) - return r; - } - - if (client->fqdn) { - r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn); - if (r < 0) - return r; - } - - if (client->mudurl) { - r = dhcp6_option_append(&opt, &optlen, - SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl), - client->mudurl); - if (r < 0) - return r; - } - - if (client->user_class) { - r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class); - if (r < 0) - return r; - } - - if (client->vendor_class) { - r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class); - if (r < 0) - return r; - } - - if (!ordered_hashmap_isempty(client->vendor_options)) { - r = dhcp6_option_append_vendor_option(&opt, &optlen, - client->vendor_options); - if (r < 0) - return r; - } - - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD)) { - r = dhcp6_option_append_pd(&opt, &optlen, &client->ia_pd, &client->hint_pd_prefix); - if (r < 0) - return r; - } - + r = client_append_common_options_in_managed_mode(client, &opt, &optlen, + &client->ia_na, &client->ia_pd); + if (r < 0) + return r; break; case DHCP6_STATE_REQUEST: case DHCP6_STATE_RENEW: - if (client->state == DHCP6_STATE_REQUEST) - message->type = DHCP6_MESSAGE_REQUEST; - else - message->type = DHCP6_MESSAGE_RENEW; - r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_SERVERID, client->lease->serverid_len, client->lease->serverid); if (r < 0) return r; - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) { - r = dhcp6_option_append_ia(&opt, &optlen, - &client->lease->ia); - if (r < 0) - return r; - } - - if (client->fqdn) { - r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn); - if (r < 0) - return r; - } - - if (client->mudurl) { - r = dhcp6_option_append(&opt, &optlen, - SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl), - client->mudurl); - if (r < 0) - return r; - } - - if (client->user_class) { - r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class); - if (r < 0) - return r; - } - - if (client->vendor_class) { - r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class); - if (r < 0) - return r; - } - - if (!ordered_hashmap_isempty(client->vendor_options)) { - r = dhcp6_option_append_vendor_option(&opt, &optlen, client->vendor_options); - if (r < 0) - return r; - } - - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) { - r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL); - if (r < 0) - return r; - } - - break; - + _fallthrough_; case DHCP6_STATE_REBIND: - message->type = DHCP6_MESSAGE_REBIND; - - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA)) { - r = dhcp6_option_append_ia(&opt, &optlen, &client->lease->ia); - if (r < 0) - return r; - } - - if (client->fqdn) { - r = dhcp6_option_append_fqdn(&opt, &optlen, client->fqdn); - if (r < 0) - return r; - } - - if (client->mudurl) { - r = dhcp6_option_append(&opt, &optlen, - SD_DHCP6_OPTION_MUD_URL_V6, strlen(client->mudurl), - client->mudurl); - if (r < 0) - return r; - } - - if (client->user_class) { - r = dhcp6_option_append_user_class(&opt, &optlen, client->user_class); - if (r < 0) - return r; - } - - if (client->vendor_class) { - r = dhcp6_option_append_vendor_class(&opt, &optlen, client->vendor_class); - if (r < 0) - return r; - } - - if (!ordered_hashmap_isempty(client->vendor_options)) { - r = dhcp6_option_append_vendor_option(&opt, &optlen, client->vendor_options); - if (r < 0) - return r; - } - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) { - r = dhcp6_option_append_pd(&opt, &optlen, &client->lease->pd, NULL); - if (r < 0) - return r; - } + assert(client->lease); + r = client_append_common_options_in_managed_mode(client, &opt, &optlen, + client->lease->ia_na, client->lease->ia_pd); + if (r < 0) + return r; break; case DHCP6_STATE_STOPPED: case DHCP6_STATE_BOUND: - return -EINVAL; default: assert_not_reached(); } + if (client->mudurl) { + r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_MUD_URL_V6, + strlen(client->mudurl), client->mudurl); + if (r < 0) + return r; + } + r = dhcp6_option_append(&opt, &optlen, SD_DHCP6_OPTION_ORO, client->req_opts_len * sizeof(be16_t), client->req_opts); @@ -894,6 +734,12 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { if (r < 0) return r; + ORDERED_HASHMAP_FOREACH(j, client->extra_options) { + r = dhcp6_option_append(&opt, &optlen, j->option, j->length, j->data); + if (r < 0) + return r; + } + /* RFC 8415 Section 21.9. * A client MUST include an Elapsed Time option in messages to indicate how long the client has * been trying to complete a DHCP message exchange. */ @@ -903,12 +749,6 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { if (r < 0) return r; - ORDERED_HASHMAP_FOREACH(j, client->extra_options) { - r = dhcp6_option_append(&opt, &optlen, j->option, j->length, j->data); - if (r < 0) - return r; - } - r = dhcp6_network_send_udp_socket(client->fd, &all_servers, message, len - optlen); if (r < 0) @@ -920,100 +760,43 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) { return 0; } -static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) { - sd_dhcp6_client *client = userdata; +static usec_t client_timeout_compute_random(usec_t val) { + return usec_sub_unsigned(val, random_u64_range(val / 10)); +} - assert(s); - assert(client); - assert(client->lease); +static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userdata) { + sd_dhcp6_client *client = ASSERT_PTR(userdata); + usec_t init_retransmit_time, max_retransmit_time; + int r; - (void) event_source_disable(client->timeout_t2); + assert(client->event); - log_dhcp6_client(client, "Timeout T2"); + switch (client->state) { + case DHCP6_STATE_INFORMATION_REQUEST: + init_retransmit_time = DHCP6_INF_TIMEOUT; + max_retransmit_time = DHCP6_INF_MAX_RT; + break; - client_start(client, DHCP6_STATE_REBIND); + case DHCP6_STATE_SOLICITATION: - return 0; -} + if (client->retransmit_count > 0 && client->lease) { + (void) client_start_transaction(client, DHCP6_STATE_REQUEST); + return 0; + } -static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata) { - sd_dhcp6_client *client = userdata; + init_retransmit_time = DHCP6_SOL_TIMEOUT; + max_retransmit_time = DHCP6_SOL_MAX_RT; + break; - assert(s); - assert(client); - assert(client->lease); - - (void) event_source_disable(client->timeout_t1); - - log_dhcp6_client(client, "Timeout T1"); - - client_start(client, DHCP6_STATE_RENEW); - - return 0; -} - -static int client_timeout_resend_expire(sd_event_source *s, uint64_t usec, void *userdata) { - sd_dhcp6_client *client = userdata; - DHCP6_CLIENT_DONT_DESTROY(client); - DHCP6State state; - - assert(s); - assert(client); - assert(client->event); - - state = client->state; - - client_stop(client, SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE); - - /* RFC 3315, section 18.1.4., says that "...the client may choose to - use a Solicit message to locate a new DHCP server..." */ - if (state == DHCP6_STATE_REBIND) - client_start(client, DHCP6_STATE_SOLICITATION); - - return 0; -} - -static usec_t client_timeout_compute_random(usec_t val) { - return val - (random_u32() % USEC_PER_SEC) * val / 10 / USEC_PER_SEC; -} - -static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userdata) { - int r = 0; - sd_dhcp6_client *client = userdata; - usec_t time_now, init_retransmit_time = 0, max_retransmit_time = 0; - usec_t max_retransmit_duration = 0; - uint8_t max_retransmit_count = 0; - - assert(s); - assert(client); - assert(client->event); - - (void) event_source_disable(client->timeout_resend); - - switch (client->state) { - case DHCP6_STATE_INFORMATION_REQUEST: - init_retransmit_time = DHCP6_INF_TIMEOUT; - max_retransmit_time = DHCP6_INF_MAX_RT; - - break; - - case DHCP6_STATE_SOLICITATION: + case DHCP6_STATE_REQUEST: - if (client->retransmit_count > 0 && client->lease) { - client_start(client, DHCP6_STATE_REQUEST); + if (client->retransmit_count >= DHCP6_REQ_MAX_RC) { + client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX); return 0; } - init_retransmit_time = DHCP6_SOL_TIMEOUT; - max_retransmit_time = DHCP6_SOL_MAX_RT; - - break; - - case DHCP6_STATE_REQUEST: init_retransmit_time = DHCP6_REQ_TIMEOUT; max_retransmit_time = DHCP6_REQ_MAX_RT; - max_retransmit_count = DHCP6_REQ_MAX_RC; - break; case DHCP6_STATE_RENEW: @@ -1023,422 +806,365 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda /* RFC 3315, section 18.1.3. says max retransmit duration will be the remaining time until T2. Instead of setting MRD, wait for T2 to trigger with the same end result */ - break; case DHCP6_STATE_REBIND: init_retransmit_time = DHCP6_REB_TIMEOUT; max_retransmit_time = DHCP6_REB_MAX_RT; - if (event_source_is_enabled(client->timeout_resend_expire) <= 0) { - uint32_t expire = 0; - - r = dhcp6_lease_ia_rebind_expire(&client->lease->ia, &expire); - if (r < 0) { - client_stop(client, r); - return 0; - } - max_retransmit_duration = expire * USEC_PER_SEC; - } - + /* Also, instead of setting MRD, the expire timer is already set in client_enter_bound_state(). */ break; case DHCP6_STATE_STOPPED: case DHCP6_STATE_BOUND: - return 0; default: assert_not_reached(); } - if (max_retransmit_count > 0 && - client->retransmit_count >= max_retransmit_count) { - client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX); - return 0; - } - - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); - if (r < 0) - goto error; - - r = client_send_message(client, time_now); + r = dhcp6_client_send_message(client); if (r >= 0) client->retransmit_count++; if (client->retransmit_time == 0) { - client->retransmit_time = - client_timeout_compute_random(init_retransmit_time); + client->retransmit_time = client_timeout_compute_random(init_retransmit_time); if (client->state == DHCP6_STATE_SOLICITATION) client->retransmit_time += init_retransmit_time / 10; - } else { - assert(max_retransmit_time > 0); - if (client->retransmit_time > max_retransmit_time / 2) - client->retransmit_time = client_timeout_compute_random(max_retransmit_time); - else - client->retransmit_time += client_timeout_compute_random(client->retransmit_time); - } + } else if (client->retransmit_time > max_retransmit_time / 2) + client->retransmit_time = client_timeout_compute_random(max_retransmit_time); + else + client->retransmit_time += client_timeout_compute_random(client->retransmit_time); log_dhcp6_client(client, "Next retransmission in %s", FORMAT_TIMESPAN(client->retransmit_time, USEC_PER_SEC)); - r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), - time_now + client->retransmit_time, 10 * USEC_PER_MSEC, - client_timeout_resend, client, - client->event_priority, "dhcp6-resend-timer", true); - if (r < 0) - goto error; - - if (max_retransmit_duration > 0 && event_source_is_enabled(client->timeout_resend_expire) <= 0) { - - log_dhcp6_client(client, "Max retransmission duration %"PRIu64" secs", - max_retransmit_duration / USEC_PER_SEC); - - r = event_reset_time(client->event, &client->timeout_resend_expire, - clock_boottime_or_monotonic(), - time_now + max_retransmit_duration, USEC_PER_SEC, - client_timeout_resend_expire, client, - client->event_priority, "dhcp6-resend-expire-timer", true); - if (r < 0) - goto error; - } - -error: + r = event_reset_time_relative(client->event, &client->timeout_resend, + CLOCK_BOOTTIME, + client->retransmit_time, 10 * USEC_PER_MSEC, + client_timeout_resend, client, + client->event_priority, "dhcp6-resend-timer", true); if (r < 0) client_stop(client, r); return 0; } -static int client_ensure_iaid(sd_dhcp6_client *client) { +static int client_start_transaction(sd_dhcp6_client *client, DHCP6State state) { int r; - uint32_t iaid; assert(client); + assert(client->event); - if (client->iaid_set) - return 0; - - r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr, client->mac_addr_len, - /* legacy_unstable_byteorder = */ true, - /* use_mac = */ client->test_mode, - &iaid); - if (r < 0) - return r; - - client->ia_na.ia_na.id = iaid; - client->ia_pd.ia_pd.id = iaid; - client->iaid_set = true; - - return 0; -} - -int client_parse_message( - sd_dhcp6_client *client, - DHCP6Message *message, - size_t len, - sd_dhcp6_lease *lease) { - - uint32_t lt_t1 = UINT32_MAX, lt_t2 = UINT32_MAX; - usec_t irt = IRT_DEFAULT; - int r; - - assert(client); - assert(message); - assert(len >= sizeof(DHCP6Message)); - assert(lease); + switch (state) { + case DHCP6_STATE_INFORMATION_REQUEST: + case DHCP6_STATE_SOLICITATION: + assert(client->state == DHCP6_STATE_STOPPED); + break; + case DHCP6_STATE_REQUEST: + assert(client->state == DHCP6_STATE_SOLICITATION); + break; + case DHCP6_STATE_RENEW: + assert(client->state == DHCP6_STATE_BOUND); + break; + case DHCP6_STATE_REBIND: + assert(IN_SET(client->state, DHCP6_STATE_BOUND, DHCP6_STATE_RENEW)); + break; + case DHCP6_STATE_STOPPED: + case DHCP6_STATE_BOUND: + default: + assert_not_reached(); + } - len -= sizeof(DHCP6Message); - for (size_t offset = 0; offset < len;) { - uint16_t optcode; - size_t optlen; - const uint8_t *optval; + client_set_state(client, state); - r = dhcp6_option_parse(message->options, len, &offset, &optcode, &optlen, &optval); - if (r < 0) - return r; + client->retransmit_time = 0; + client->retransmit_count = 0; + client->transaction_id = random_u32() & htobe32(0x00ffffff); - switch (optcode) { - case SD_DHCP6_OPTION_CLIENTID: - if (dhcp6_lease_get_clientid(lease, NULL, NULL) >= 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple client IDs", - dhcp6_message_type_to_string(message->type)); + r = sd_event_now(client->event, CLOCK_BOOTTIME, &client->transaction_start); + if (r < 0) + goto error; - r = dhcp6_lease_set_clientid(lease, optval, optlen); - if (r < 0) - return r; + r = event_reset_time(client->event, &client->timeout_resend, + CLOCK_BOOTTIME, + 0, 0, + client_timeout_resend, client, + client->event_priority, "dhcp6-resend-timeout", true); + if (r < 0) + goto error; - break; + r = sd_event_source_set_enabled(client->receive_message, SD_EVENT_ON); + if (r < 0) + goto error; - case SD_DHCP6_OPTION_SERVERID: - if (dhcp6_lease_get_serverid(lease, NULL, NULL) >= 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple server IDs", - dhcp6_message_type_to_string(message->type)); + return 0; - r = dhcp6_lease_set_serverid(lease, optval, optlen); - if (r < 0) - return r; +error: + client_stop(client, r); + return r; +} - break; +static int client_timeout_expire(sd_event_source *s, uint64_t usec, void *userdata) { + sd_dhcp6_client *client = ASSERT_PTR(userdata); + DHCP6_CLIENT_DONT_DESTROY(client); + DHCP6State state; - case SD_DHCP6_OPTION_PREFERENCE: - if (optlen != 1) - return -EINVAL; + (void) event_source_disable(client->timeout_expire); + (void) event_source_disable(client->timeout_t2); + (void) event_source_disable(client->timeout_t1); - r = dhcp6_lease_set_preference(lease, optval[0]); - if (r < 0) - return r; + state = client->state; - break; + client_stop(client, SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE); - case SD_DHCP6_OPTION_STATUS_CODE: { - _cleanup_free_ char *msg = NULL; + /* RFC 3315, section 18.1.4., says that "...the client may choose to + use a Solicit message to locate a new DHCP server..." */ + if (state == DHCP6_STATE_REBIND) + (void) client_start_transaction(client, DHCP6_STATE_SOLICITATION); - r = dhcp6_option_parse_status(optval, optlen, &msg); - if (r < 0) - return r; - - if (r > 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), - "Received %s message with non-zero status: %s%s%s", - dhcp6_message_type_to_string(message->type), - strempty(msg), isempty(msg) ? "" : ": ", - dhcp6_message_status_to_string(r)); - break; - } - case SD_DHCP6_OPTION_IA_NA: { - _cleanup_(dhcp6_lease_free_ia) DHCP6IA ia = {}; + return 0; +} - if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { - log_dhcp6_client(client, "Ignoring IA NA option in information requesting mode."); - break; - } +static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) { + sd_dhcp6_client *client = ASSERT_PTR(userdata); - r = dhcp6_option_parse_ia(client, client->ia_pd.ia_na.id, optcode, optlen, optval, &ia); - if (r == -ENOMEM) - return r; - if (r < 0) - continue; + (void) event_source_disable(client->timeout_t2); + (void) event_source_disable(client->timeout_t1); - if (lease->ia.addresses) { - log_dhcp6_client(client, "Received duplicate matching IA_NA option, ignoring."); - continue; - } + log_dhcp6_client(client, "Timeout T2"); - lease->ia = ia; - ia = (DHCP6IA) {}; + (void) client_start_transaction(client, DHCP6_STATE_REBIND); - lt_t1 = MIN(lt_t1, be32toh(lease->ia.ia_na.lifetime_t1)); - lt_t2 = MIN(lt_t2, be32toh(lease->ia.ia_na.lifetime_t2)); + return 0; +} - break; - } - case SD_DHCP6_OPTION_IA_PD: { - _cleanup_(dhcp6_lease_free_ia) DHCP6IA ia = {}; +static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata) { + sd_dhcp6_client *client = ASSERT_PTR(userdata); - if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { - log_dhcp6_client(client, "Ignoring IA PD option in information requesting mode."); - break; - } + (void) event_source_disable(client->timeout_t1); - r = dhcp6_option_parse_ia(client, client->ia_pd.ia_pd.id, optcode, optlen, optval, &ia); - if (r == -ENOMEM) - return r; - if (r < 0) - continue; + log_dhcp6_client(client, "Timeout T1"); - if (lease->pd.addresses) { - log_dhcp6_client(client, "Received duplicate matching IA_PD option, ignoring."); - continue; - } + (void) client_start_transaction(client, DHCP6_STATE_RENEW); - lease->pd = ia; - ia = (DHCP6IA) {}; + return 0; +} - lt_t1 = MIN(lt_t1, be32toh(lease->pd.ia_pd.lifetime_t1)); - lt_t2 = MIN(lt_t2, be32toh(lease->pd.ia_pd.lifetime_t2)); +static int client_enter_bound_state(sd_dhcp6_client *client) { + usec_t lifetime_t1, lifetime_t2, lifetime_valid; + int r; - break; - } - case SD_DHCP6_OPTION_RAPID_COMMIT: - r = dhcp6_lease_set_rapid_commit(lease); - if (r < 0) - return r; + assert(client); + assert(client->lease); + assert(IN_SET(client->state, + DHCP6_STATE_SOLICITATION, + DHCP6_STATE_REQUEST, + DHCP6_STATE_RENEW, + DHCP6_STATE_REBIND)); - break; + (void) event_source_disable(client->receive_message); + (void) event_source_disable(client->timeout_resend); - case SD_DHCP6_OPTION_DNS_SERVERS: - r = dhcp6_lease_add_dns(lease, optval, optlen); - if (r < 0) - log_dhcp6_client_errno(client, r, "Failed to parse DNS server option, ignoring: %m"); + r = dhcp6_lease_get_lifetime(client->lease, &lifetime_t1, &lifetime_t2, &lifetime_valid); + if (r < 0) + goto error; - break; + lifetime_t2 = client_timeout_compute_random(lifetime_t2); + lifetime_t1 = client_timeout_compute_random(MIN(lifetime_t1, lifetime_t2)); - case SD_DHCP6_OPTION_DOMAIN_LIST: - r = dhcp6_lease_add_domains(lease, optval, optlen); - if (r < 0) - log_dhcp6_client_errno(client, r, "Failed to parse domain list option, ignoring: %m"); + if (lifetime_t1 == USEC_INFINITY) { + log_dhcp6_client(client, "Infinite T1"); + event_source_disable(client->timeout_t1); + } else { + log_dhcp6_client(client, "T1 expires in %s", FORMAT_TIMESPAN(lifetime_t1, USEC_PER_SEC)); + r = event_reset_time_relative(client->event, &client->timeout_t1, + CLOCK_BOOTTIME, + lifetime_t1, 10 * USEC_PER_SEC, + client_timeout_t1, client, + client->event_priority, "dhcp6-t1-timeout", true); + if (r < 0) + goto error; + } - break; + if (lifetime_t2 == USEC_INFINITY) { + log_dhcp6_client(client, "Infinite T2"); + event_source_disable(client->timeout_t2); + } else { + log_dhcp6_client(client, "T2 expires in %s", FORMAT_TIMESPAN(lifetime_t2, USEC_PER_SEC)); + r = event_reset_time_relative(client->event, &client->timeout_t2, + CLOCK_BOOTTIME, + lifetime_t2, 10 * USEC_PER_SEC, + client_timeout_t2, client, + client->event_priority, "dhcp6-t2-timeout", true); + if (r < 0) + goto error; + } - case SD_DHCP6_OPTION_NTP_SERVER: - r = dhcp6_lease_add_ntp(lease, optval, optlen); - if (r < 0) - log_dhcp6_client_errno(client, r, "Failed to parse NTP server option, ignoring: %m"); + if (lifetime_valid == USEC_INFINITY) { + log_dhcp6_client(client, "Infinite valid lifetime"); + event_source_disable(client->timeout_expire); + } else { + log_dhcp6_client(client, "Valid lifetime expires in %s", FORMAT_TIMESPAN(lifetime_valid, USEC_PER_SEC)); - break; + r = event_reset_time_relative(client->event, &client->timeout_expire, + CLOCK_BOOTTIME, + lifetime_valid, USEC_PER_SEC, + client_timeout_expire, client, + client->event_priority, "dhcp6-lease-expire", true); + if (r < 0) + goto error; + } - case SD_DHCP6_OPTION_SNTP_SERVERS: - r = dhcp6_lease_add_sntp(lease, optval, optlen); - if (r < 0) - log_dhcp6_client_errno(client, r, "Failed to parse SNTP server option, ignoring: %m"); + client_set_state(client, DHCP6_STATE_BOUND); + client_notify(client, SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE); + return 0; - break; +error: + client_stop(client, r); + return r; +} - case SD_DHCP6_OPTION_CLIENT_FQDN: - r = dhcp6_lease_set_fqdn(lease, optval, optlen); - if (r < 0) - log_dhcp6_client_errno(client, r, "Failed to parse FQDN option, ignoring: %m"); +static int log_invalid_message_type(sd_dhcp6_client *client, const DHCP6Message *message) { + const char *type_str; - break; + assert(client); + assert(message); - case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME: - if (optlen != 4) - return -EINVAL; + type_str = dhcp6_message_type_to_string(message->type); + if (type_str) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received unexpected %s message, ignoring.", type_str); + else + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received unsupported message type %u, ignoring.", message->type); +} - irt = unaligned_read_be32((be32_t *) optval) * USEC_PER_SEC; - break; - } - } +static int client_process_information( + sd_dhcp6_client *client, + DHCP6Message *message, + size_t len, + const triple_timestamp *timestamp, + const struct in6_addr *server_address) { - uint8_t *clientid; - size_t clientid_len; - if (dhcp6_lease_get_clientid(lease, &clientid, &clientid_len) < 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s message does not contain client ID. Ignoring.", - dhcp6_message_type_to_string(message->type)); + _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL; + int r; - if (clientid_len != client->duid_len || - memcmp(clientid, &client->duid, clientid_len) != 0) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "The client ID in %s message does not match. Ignoring.", - dhcp6_message_type_to_string(message->type)); + assert(client); + assert(message); - if (client->state != DHCP6_STATE_INFORMATION_REQUEST) { - r = dhcp6_lease_get_serverid(lease, NULL, NULL); - if (r < 0) - return log_dhcp6_client_errno(client, r, "%s has no server id", - dhcp6_message_type_to_string(message->type)); + if (message->type != DHCP6_MESSAGE_REPLY) + return log_invalid_message_type(client, message); - if (!lease->ia.addresses && !lease->pd.addresses) - return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "No IA_PD prefix or IA_NA address received. Ignoring."); + r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease); + if (r < 0) + return log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m"); - if (lease->ia.addresses) { - lease->ia.ia_na.lifetime_t1 = htobe32(lt_t1); - lease->ia.ia_na.lifetime_t2 = htobe32(lt_t2); - } + log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type)); - if (lease->pd.addresses) { - lease->pd.ia_pd.lifetime_t1 = htobe32(lt_t1); - lease->pd.ia_pd.lifetime_t2 = htobe32(lt_t2); - } - } + sd_dhcp6_lease_unref(client->lease); + client->lease = TAKE_PTR(lease); - client->information_refresh_time_usec = MAX(irt, IRT_MINIMUM); + /* Do not call client_stop() here, as it frees the acquired lease. */ + (void) event_source_disable(client->receive_message); + (void) event_source_disable(client->timeout_resend); + client_set_state(client, DHCP6_STATE_STOPPED); + client_notify(client, SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST); return 0; } -static int client_receive_reply( +static int client_process_reply( sd_dhcp6_client *client, - DHCP6Message *reply, + DHCP6Message *message, size_t len, - const triple_timestamp *t, + const triple_timestamp *timestamp, const struct in6_addr *server_address) { _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL; - bool rapid_commit; int r; assert(client); - assert(reply); - assert(t); + assert(message); - if (reply->type != DHCP6_MESSAGE_REPLY) - return 0; + if (message->type != DHCP6_MESSAGE_REPLY) + return log_invalid_message_type(client, message); - r = dhcp6_lease_new(&lease); + r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease); if (r < 0) - return -ENOMEM; + return log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m"); - lease->timestamp = *t; - if (server_address) - lease->server_address = *server_address; - - r = client_parse_message(client, reply, len, lease); - if (r < 0) - return r; - - if (client->state == DHCP6_STATE_SOLICITATION) { - r = dhcp6_lease_get_rapid_commit(lease, &rapid_commit); - if (r < 0) - return r; - - if (!rapid_commit) - return 0; - } + log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type)); sd_dhcp6_lease_unref(client->lease); client->lease = TAKE_PTR(lease); - return DHCP6_STATE_BOUND; + return client_enter_bound_state(client); } -static int client_receive_advertise( +static int client_process_advertise_or_rapid_commit_reply( sd_dhcp6_client *client, - DHCP6Message *advertise, + DHCP6Message *message, size_t len, - const triple_timestamp *t, + const triple_timestamp *timestamp, const struct in6_addr *server_address) { _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL; - uint8_t pref_advertise = 0, pref_lease = 0; + uint8_t pref_advertise, pref_lease = 0; int r; assert(client); - assert(advertise); - assert(t); + assert(message); - if (advertise->type != DHCP6_MESSAGE_ADVERTISE) - return 0; + if (!IN_SET(message->type, DHCP6_MESSAGE_ADVERTISE, DHCP6_MESSAGE_REPLY)) + return log_invalid_message_type(client, message); - r = dhcp6_lease_new(&lease); + r = dhcp6_lease_new_from_message(client, message, len, timestamp, server_address, &lease); if (r < 0) - return r; + return log_dhcp6_client_errno(client, r, "Failed to process received %s message, ignoring: %m", + dhcp6_message_type_to_string(message->type)); - lease->timestamp = *t; - if (server_address) - lease->server_address = *server_address; + if (message->type == DHCP6_MESSAGE_REPLY) { + bool rapid_commit; - r = client_parse_message(client, advertise, len, lease); - if (r < 0) - return r; + r = dhcp6_lease_get_rapid_commit(lease, &rapid_commit); + if (r < 0) + return r; + + if (!rapid_commit) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received reply message without rapid commit flag, ignoring."); + + log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type)); + + sd_dhcp6_lease_unref(client->lease); + client->lease = TAKE_PTR(lease); + + return client_enter_bound_state(client); + } r = dhcp6_lease_get_preference(lease, &pref_advertise); if (r < 0) return r; - r = dhcp6_lease_get_preference(client->lease, &pref_lease); + if (client->lease) { + r = dhcp6_lease_get_preference(client->lease, &pref_lease); + if (r < 0) + return r; + } + + log_dhcp6_client(client, "Processed %s message", dhcp6_message_type_to_string(message->type)); - if (r < 0 || pref_advertise > pref_lease) { + if (!client->lease || pref_advertise > pref_lease) { + /* If this is the first advertise message or has higher preference, then save the lease. */ sd_dhcp6_lease_unref(client->lease); client->lease = TAKE_PTR(lease); - r = 0; } if (pref_advertise == 255 || client->retransmit_count > 1) - r = DHCP6_STATE_REQUEST; + (void) client_start_transaction(client, DHCP6_STATE_REQUEST); - return r; + return 0; } static int client_receive_message( @@ -1447,7 +1173,7 @@ static int client_receive_message( revents, void *userdata) { - sd_dhcp6_client *client = userdata; + sd_dhcp6_client *client = ASSERT_PTR(userdata); DHCP6_CLIENT_DONT_DESTROY(client); /* This needs to be initialized with zero. See #20741. */ CMSG_BUFFER_TYPE(CMSG_SPACE_TIMEVAL) control = {}; @@ -1466,11 +1192,6 @@ static int client_receive_message( _cleanup_free_ DHCP6Message *message = NULL; struct in6_addr *server_address = NULL; ssize_t buflen, len; - int r = 0; - - assert(s); - assert(client); - assert(client->event); buflen = next_datagram_size_fd(fd); if (buflen < 0) { @@ -1517,236 +1238,43 @@ static int client_receive_message( triple_timestamp_from_realtime(&t, timeval_load((struct timeval*) CMSG_DATA(cmsg))); } - if (!triple_timestamp_is_set(&t)) - triple_timestamp_get(&t); - - if (!IN_SET(message->type, DHCP6_MESSAGE_ADVERTISE, DHCP6_MESSAGE_REPLY, DHCP6_MESSAGE_RECONFIGURE)) { - const char *type_str = dhcp6_message_type_to_string(message->type); - if (type_str) - log_dhcp6_client(client, "Received unexpected %s message, ignoring.", type_str); - else - log_dhcp6_client(client, "Received unsupported message type %u, ignoring.", message->type); - return 0; - } - if (client->transaction_id != (message->transaction_id & htobe32(0x00ffffff))) return 0; switch (client->state) { case DHCP6_STATE_INFORMATION_REQUEST: - r = client_receive_reply(client, message, len, &t, server_address); - if (r < 0) { - log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m"); + if (client_process_information(client, message, len, &t, server_address) < 0) return 0; - } - - client_notify(client, SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST); - - client_start(client, DHCP6_STATE_STOPPED); - break; case DHCP6_STATE_SOLICITATION: - r = client_receive_advertise(client, message, len, &t, server_address); - if (r < 0) { - log_dhcp6_client_errno(client, r, "Failed to process received advertise message, ignoring: %m"); + if (client_process_advertise_or_rapid_commit_reply(client, message, len, &t, server_address) < 0) return 0; - } - - if (r == DHCP6_STATE_REQUEST) { - client_start(client, r); - break; - } + break; - _fallthrough_; /* for Solicitation Rapid Commit option check */ case DHCP6_STATE_REQUEST: case DHCP6_STATE_RENEW: case DHCP6_STATE_REBIND: - - r = client_receive_reply(client, message, len, &t, server_address); - if (r < 0) { - log_dhcp6_client_errno(client, r, "Failed to process received reply message, ignoring: %m"); + if (client_process_reply(client, message, len, &t, server_address) < 0) return 0; - } - - if (r == DHCP6_STATE_BOUND) { - r = client_start(client, DHCP6_STATE_BOUND); - if (r < 0) { - client_stop(client, r); - return 0; - } - - client_notify(client, SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE); - } - break; case DHCP6_STATE_BOUND: - - break; - case DHCP6_STATE_STOPPED: - return 0; default: assert_not_reached(); } - log_dhcp6_client(client, "Recv %s", - dhcp6_message_type_to_string(message->type)); - return 0; } -static int client_get_lifetime(sd_dhcp6_client *client, uint32_t *lifetime_t1, - uint32_t *lifetime_t2) { - assert_return(client, -EINVAL); - assert_return(client->lease, -EINVAL); - - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_NA) && client->lease->ia.addresses) { - *lifetime_t1 = be32toh(client->lease->ia.ia_na.lifetime_t1); - *lifetime_t2 = be32toh(client->lease->ia.ia_na.lifetime_t2); - - return 0; - } - - if (FLAGS_SET(client->request_ia, DHCP6_REQUEST_IA_PD) && client->lease->pd.addresses) { - *lifetime_t1 = be32toh(client->lease->pd.ia_pd.lifetime_t1); - *lifetime_t2 = be32toh(client->lease->pd.ia_pd.lifetime_t2); - - return 0; - } - - return -ENOMSG; -} - -static int client_start(sd_dhcp6_client *client, DHCP6State state) { - int r; - usec_t timeout, time_now; - uint32_t lifetime_t1, lifetime_t2; - - assert_return(client, -EINVAL); - assert_return(client->event, -EINVAL); - assert_return(client->ifindex > 0, -EINVAL); - assert_return(client->state != state, -EINVAL); - - (void) event_source_disable(client->timeout_resend_expire); - (void) event_source_disable(client->timeout_resend); - client->retransmit_time = 0; - client->retransmit_count = 0; - - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); - if (r < 0) - return r; - - if (!client->receive_message) { - r = sd_event_add_io(client->event, &client->receive_message, - client->fd, EPOLLIN, client_receive_message, - client); - if (r < 0) - goto error; - - r = sd_event_source_set_priority(client->receive_message, - client->event_priority); - if (r < 0) - goto error; - - r = sd_event_source_set_description(client->receive_message, - "dhcp6-receive-message"); - if (r < 0) - goto error; - } - - switch (state) { - case DHCP6_STATE_STOPPED: - if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { - client->state = DHCP6_STATE_STOPPED; - - return 0; - } - - _fallthrough_; - case DHCP6_STATE_SOLICITATION: - client->state = DHCP6_STATE_SOLICITATION; - - break; - - case DHCP6_STATE_INFORMATION_REQUEST: - case DHCP6_STATE_REQUEST: - case DHCP6_STATE_RENEW: - case DHCP6_STATE_REBIND: - - client->state = state; - - break; - - case DHCP6_STATE_BOUND: - - r = client_get_lifetime(client, &lifetime_t1, &lifetime_t2); - if (r < 0) - goto error; - - if (lifetime_t1 == 0xffffffff || lifetime_t2 == 0xffffffff) { - log_dhcp6_client(client, "Infinite T1 0x%08x or T2 0x%08x", - lifetime_t1, lifetime_t2); - - return 0; - } - - timeout = client_timeout_compute_random(lifetime_t1 * USEC_PER_SEC); - - log_dhcp6_client(client, "T1 expires in %s", FORMAT_TIMESPAN(timeout, USEC_PER_SEC)); - - r = event_reset_time(client->event, &client->timeout_t1, - clock_boottime_or_monotonic(), - time_now + timeout, 10 * USEC_PER_SEC, - client_timeout_t1, client, - client->event_priority, "dhcp6-t1-timeout", true); - if (r < 0) - goto error; - - timeout = client_timeout_compute_random(lifetime_t2 * USEC_PER_SEC); - - log_dhcp6_client(client, "T2 expires in %s", FORMAT_TIMESPAN(timeout, USEC_PER_SEC)); - - r = event_reset_time(client->event, &client->timeout_t2, - clock_boottime_or_monotonic(), - time_now + timeout, 10 * USEC_PER_SEC, - client_timeout_t2, client, - client->event_priority, "dhcp6-t2-timeout", true); - if (r < 0) - goto error; - - client->state = state; - - return 0; - default: - assert_not_reached(); - } - - client->transaction_id = random_u32() & htobe32(0x00ffffff); - client->transaction_start = time_now; - - r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), - 0, 0, - client_timeout_resend, client, - client->event_priority, "dhcp6-resend-timeout", true); - if (r < 0) - goto error; - - return 0; - - error: - client_reset(client); - return r; -} - int sd_dhcp6_client_stop(sd_dhcp6_client *client) { if (!client) return 0; client_stop(client, SD_DHCP6_CLIENT_EVENT_STOP); + client->receive_message = sd_event_source_unref(client->receive_message); client->fd = safe_close(client->fd); return 0; @@ -1766,16 +1294,12 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) { assert_return(client->event, -EINVAL); assert_return(client->ifindex > 0, -EINVAL); assert_return(in6_addr_is_link_local(&client->local_address) > 0, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); + assert_return(client->information_request || client->request_ia != 0, -EINVAL); - if (client->state != DHCP6_STATE_STOPPED) - return -EBUSY; - - if (!client->information_request && client->request_ia == 0) - return -EINVAL; - - r = client_reset(client); - if (r < 0) - return r; + /* Even if the client is in the STOPPED state, the lease acquired in the previous information + * request may be stored. */ + client->lease = sd_dhcp6_lease_unref(client->lease); r = client_ensure_iaid(client); if (r < 0) @@ -1790,7 +1314,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) { if (r < 0) { _cleanup_free_ char *p = NULL; - (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &client->local_address, &p); + (void) in6_addr_to_string(&client->local_address, &p); return log_dhcp6_client_errno(client, r, "Failed to bind to UDP socket at address %s: %m", strna(p)); } @@ -1798,6 +1322,24 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) { client->fd = r; } + if (!client->receive_message) { + _cleanup_(sd_event_source_disable_unrefp) sd_event_source *s = NULL; + + r = sd_event_add_io(client->event, &s, client->fd, EPOLLIN, client_receive_message, client); + if (r < 0) + return r; + + r = sd_event_source_set_priority(s, client->event_priority); + if (r < 0) + return r; + + r = sd_event_source_set_description(s, "dhcp6-receive-message"); + if (r < 0) + return r; + + client->receive_message = TAKE_PTR(s); + } + if (client->information_request) { usec_t t = now(CLOCK_MONOTONIC); @@ -1808,10 +1350,10 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) { state = DHCP6_STATE_INFORMATION_REQUEST; } - log_dhcp6_client(client, "Started in %s mode", + log_dhcp6_client(client, "Starting in %s mode", client->information_request ? "Information request" : "Managed"); - return client_start(client, state); + return client_start_transaction(client, state); } int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event, int64_t priority) { @@ -1819,6 +1361,7 @@ int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event, int64 assert_return(client, -EINVAL); assert_return(!client->event, -EBUSY); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); if (event) client->event = sd_event_ref(event); @@ -1835,6 +1378,7 @@ int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event, int64 int sd_dhcp6_client_detach_event(sd_dhcp6_client *client) { assert_return(client, -EINVAL); + assert_return(!sd_dhcp6_client_is_running(client), -EBUSY); client->event = sd_event_unref(client->event); @@ -1848,24 +1392,26 @@ sd_event *sd_dhcp6_client_get_event(sd_dhcp6_client *client) { } static sd_dhcp6_client *dhcp6_client_free(sd_dhcp6_client *client) { - assert(client); + if (!client) + return NULL; - client->timeout_resend = sd_event_source_unref(client->timeout_resend); - client->timeout_resend_expire = sd_event_source_unref(client->timeout_resend_expire); - client->timeout_t1 = sd_event_source_unref(client->timeout_t1); - client->timeout_t2 = sd_event_source_unref(client->timeout_t2); + sd_dhcp6_lease_unref(client->lease); - client_reset(client); + sd_event_source_disable_unref(client->receive_message); + sd_event_source_disable_unref(client->timeout_resend); + sd_event_source_disable_unref(client->timeout_expire); + sd_event_source_disable_unref(client->timeout_t1); + sd_event_source_disable_unref(client->timeout_t2); + sd_event_unref(client->event); client->fd = safe_close(client->fd); - sd_dhcp6_client_detach_event(client); - free(client->req_opts); free(client->fqdn); free(client->mudurl); - + dhcp6_ia_clear_addresses(&client->ia_pd); ordered_hashmap_free(client->extra_options); + ordered_set_free(client->vendor_options); strv_free(client->user_class); strv_free(client->vendor_class); free(client->ifname); @@ -1901,8 +1447,6 @@ int sd_dhcp6_client_new(sd_dhcp6_client **ret) { .request_ia = DHCP6_REQUEST_IA_NA | DHCP6_REQUEST_IA_PD, .fd = -1, .req_opts_len = ELEMENTSOF(default_req_opts), - .hint_pd_prefix.iapdprefix.lifetime_preferred = (be32_t) -1, - .hint_pd_prefix.iapdprefix.lifetime_valid = (be32_t) -1, .req_opts = TAKE_PTR(req_opts), }; diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-lease.c b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-lease.c index b46a2e33..fd47cb73 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-lease.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-dhcp6-lease.c @@ -8,10 +8,21 @@ #include #include "alloc-util.h" +#include "dhcp6-internal.h" #include "dhcp6-lease-internal.h" -#include "dhcp6-protocol.h" #include "strv.h" -#include "util.h" + +#define IRT_DEFAULT (1 * USEC_PER_DAY) +#define IRT_MINIMUM (600 * USEC_PER_SEC) + +static void dhcp6_lease_set_timestamp(sd_dhcp6_lease *lease, const triple_timestamp *timestamp) { + assert(lease); + + if (timestamp && triple_timestamp_is_set(timestamp)) + lease->timestamp = *timestamp; + else + triple_timestamp_get(&lease->timestamp); +} int sd_dhcp6_lease_get_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_t *ret) { assert_return(lease, -EINVAL); @@ -26,63 +37,105 @@ int sd_dhcp6_lease_get_timestamp(sd_dhcp6_lease *lease, clockid_t clock, uint64_ return 0; } -int sd_dhcp6_lease_get_server_address(sd_dhcp6_lease *lease, struct in6_addr *ret) { - assert_return(lease, -EINVAL); - assert_return(ret, -EINVAL); - - *ret = lease->server_address; - return 0; +static usec_t sec2usec(uint32_t sec) { + return sec == UINT32_MAX ? USEC_INFINITY : sec * USEC_PER_SEC; } -int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) { - DHCP6Address *addr; - uint32_t valid = 0, t; +static void dhcp6_lease_set_lifetime(sd_dhcp6_lease *lease) { + uint32_t t1 = UINT32_MAX, t2 = UINT32_MAX, min_valid_lt = UINT32_MAX; + + assert(lease); + assert(lease->ia_na || lease->ia_pd); - assert_return(ia, -EINVAL); - assert_return(expire, -EINVAL); + if (lease->ia_na) { + t1 = MIN(t1, be32toh(lease->ia_na->header.lifetime_t1)); + t2 = MIN(t2, be32toh(lease->ia_na->header.lifetime_t2)); - LIST_FOREACH(addresses, addr, ia->addresses) { - t = be32toh(addr->iaaddr.lifetime_valid); - if (valid < t) - valid = t; + LIST_FOREACH(addresses, a, lease->ia_na->addresses) + min_valid_lt = MIN(min_valid_lt, be32toh(a->iaaddr.lifetime_valid)); } - t = be32toh(ia->ia_na.lifetime_t2); - if (t > valid) - return -EINVAL; + if (lease->ia_pd) { + t1 = MIN(t1, be32toh(lease->ia_pd->header.lifetime_t1)); + t2 = MIN(t2, be32toh(lease->ia_pd->header.lifetime_t2)); - *expire = valid - t; + LIST_FOREACH(addresses, a, lease->ia_pd->addresses) + min_valid_lt = MIN(min_valid_lt, be32toh(a->iapdprefix.lifetime_valid)); + } + if (t2 == 0 || t2 > min_valid_lt) { + /* If T2 is zero or longer than the minimum valid lifetime of the addresses or prefixes, + * then adjust lifetime with it. */ + t1 = min_valid_lt / 2; + t2 = min_valid_lt / 10 * 8; + } + + lease->lifetime_valid = sec2usec(min_valid_lt); + lease->lifetime_t1 = sec2usec(t1); + lease->lifetime_t2 = sec2usec(t2); +} + +int dhcp6_lease_get_lifetime(sd_dhcp6_lease *lease, usec_t *ret_t1, usec_t *ret_t2, usec_t *ret_valid) { + assert(lease); + + if (!lease->ia_na && !lease->ia_pd) + return -ENODATA; + + if (ret_t1) + *ret_t1 = lease->lifetime_t1; + if (ret_t2) + *ret_t2 = lease->lifetime_t2; + if (ret_valid) + *ret_valid = lease->lifetime_valid; return 0; } -DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) { - DHCP6Address *address; +static void dhcp6_lease_set_server_address(sd_dhcp6_lease *lease, const struct in6_addr *server_address) { + assert(lease); - if (!ia) - return NULL; + if (server_address) + lease->server_address = *server_address; + else + lease->server_address = (struct in6_addr) {}; +} - while (ia->addresses) { - address = ia->addresses; +int sd_dhcp6_lease_get_server_address(sd_dhcp6_lease *lease, struct in6_addr *ret) { + assert_return(lease, -EINVAL); + assert_return(ret, -EINVAL); - LIST_REMOVE(addresses, ia->addresses, address); + *ret = lease->server_address; + return 0; +} - free(address); - } +void dhcp6_ia_clear_addresses(DHCP6IA *ia) { + assert(ia); + + LIST_FOREACH(addresses, a, ia->addresses) + free(a); + + ia->addresses = NULL; +} + +DHCP6IA *dhcp6_ia_free(DHCP6IA *ia) { + if (!ia) + return NULL; + + dhcp6_ia_clear_addresses(ia); - return NULL; + return mfree(ia); } int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len) { - uint8_t *clientid; + uint8_t *clientid = NULL; - assert_return(lease, -EINVAL); - assert_return(id, -EINVAL); - assert_return(len > 0, -EINVAL); + assert(lease); + assert(id || len == 0); - clientid = memdup(id, len); - if (!clientid) - return -ENOMEM; + if (len > 0) { + clientid = memdup(id, len); + if (!clientid) + return -ENOMEM; + } free_and_replace(lease->clientid, clientid); lease->clientid_len = len; @@ -91,7 +144,7 @@ int dhcp6_lease_set_clientid(sd_dhcp6_lease *lease, const uint8_t *id, size_t le } int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len) { - assert_return(lease, -EINVAL); + assert(lease); if (!lease->clientid) return -ENODATA; @@ -105,15 +158,16 @@ int dhcp6_lease_get_clientid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *re } int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t len) { - uint8_t *serverid; + uint8_t *serverid = NULL; - assert_return(lease, -EINVAL); - assert_return(id, -EINVAL); - assert_return(len > 0, -EINVAL); + assert(lease); + assert(id || len == 0); - serverid = memdup(id, len); - if (!serverid) - return -ENOMEM; + if (len > 0) { + serverid = memdup(id, len); + if (!serverid) + return -ENOMEM; + } free_and_replace(lease->serverid, serverid); lease->serverid_len = len; @@ -122,7 +176,7 @@ int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id, size_t le } int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *ret_len) { - assert_return(lease, -EINVAL); + assert(lease); if (!lease->serverid) return -ENODATA; @@ -131,107 +185,99 @@ int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **ret_id, size_t *re *ret_id = lease->serverid; if (ret_len) *ret_len = lease->serverid_len; - return 0; } int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference) { - assert_return(lease, -EINVAL); + assert(lease); lease->preference = preference; - return 0; } -int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference) { - assert_return(preference, -EINVAL); - - if (!lease) - return -EINVAL; - - *preference = lease->preference; +int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *ret) { + assert(lease); + assert(ret); + *ret = lease->preference; return 0; } int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease) { - assert_return(lease, -EINVAL); + assert(lease); lease->rapid_commit = true; - return 0; } -int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit) { - assert_return(lease, -EINVAL); - assert_return(rapid_commit, -EINVAL); - - *rapid_commit = lease->rapid_commit; +int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *ret) { + assert(lease); + assert(ret); + *ret = lease->rapid_commit; return 0; } -int sd_dhcp6_lease_get_address(sd_dhcp6_lease *lease, struct in6_addr *addr, - uint32_t *lifetime_preferred, - uint32_t *lifetime_valid) { +int sd_dhcp6_lease_get_address( + sd_dhcp6_lease *lease, + struct in6_addr *ret_addr, + uint32_t *ret_lifetime_preferred, + uint32_t *ret_lifetime_valid) { + assert_return(lease, -EINVAL); - assert_return(addr, -EINVAL); - assert_return(lifetime_preferred, -EINVAL); - assert_return(lifetime_valid, -EINVAL); if (!lease->addr_iter) - return -ENOMSG; + return -ENODATA; - memcpy(addr, &lease->addr_iter->iaaddr.address, - sizeof(struct in6_addr)); - *lifetime_preferred = - be32toh(lease->addr_iter->iaaddr.lifetime_preferred); - *lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid); + if (ret_addr) + *ret_addr = lease->addr_iter->iaaddr.address; + if (ret_lifetime_preferred) + *ret_lifetime_preferred = be32toh(lease->addr_iter->iaaddr.lifetime_preferred); + if (ret_lifetime_valid) + *ret_lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid); lease->addr_iter = lease->addr_iter->addresses_next; - return 0; } void sd_dhcp6_lease_reset_address_iter(sd_dhcp6_lease *lease) { if (lease) - lease->addr_iter = lease->ia.addresses; + lease->addr_iter = lease->ia_na ? lease->ia_na->addresses : NULL; } -int sd_dhcp6_lease_get_pd(sd_dhcp6_lease *lease, struct in6_addr *prefix, - uint8_t *prefix_len, - uint32_t *lifetime_preferred, - uint32_t *lifetime_valid) { +int sd_dhcp6_lease_get_pd( + sd_dhcp6_lease *lease, + struct in6_addr *ret_prefix, + uint8_t *ret_prefix_len, + uint32_t *ret_lifetime_preferred, + uint32_t *ret_lifetime_valid) { + assert_return(lease, -EINVAL); - assert_return(prefix, -EINVAL); - assert_return(prefix_len, -EINVAL); - assert_return(lifetime_preferred, -EINVAL); - assert_return(lifetime_valid, -EINVAL); if (!lease->prefix_iter) - return -ENOMSG; + return -ENODATA; - memcpy(prefix, &lease->prefix_iter->iapdprefix.address, - sizeof(struct in6_addr)); - *prefix_len = lease->prefix_iter->iapdprefix.prefixlen; - *lifetime_preferred = - be32toh(lease->prefix_iter->iapdprefix.lifetime_preferred); - *lifetime_valid = - be32toh(lease->prefix_iter->iapdprefix.lifetime_valid); + if (ret_prefix) + *ret_prefix = lease->prefix_iter->iapdprefix.address; + if (ret_prefix_len) + *ret_prefix_len = lease->prefix_iter->iapdprefix.prefixlen; + if (ret_lifetime_preferred) + *ret_lifetime_preferred = be32toh(lease->prefix_iter->iapdprefix.lifetime_preferred); + if (ret_lifetime_valid) + *ret_lifetime_valid = be32toh(lease->prefix_iter->iapdprefix.lifetime_valid); lease->prefix_iter = lease->prefix_iter->addresses_next; - return 0; } void sd_dhcp6_lease_reset_pd_prefix_iter(sd_dhcp6_lease *lease) { if (lease) - lease->prefix_iter = lease->pd.addresses; + lease->prefix_iter = lease->ia_pd ? lease->ia_pd->addresses : NULL; } int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) { - assert_return(lease, -EINVAL); - assert_return(optval, -EINVAL); + assert(lease); + assert(optval || optlen == 0); if (optlen == 0) return 0; @@ -243,7 +289,7 @@ int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **ret) { assert_return(lease, -EINVAL); if (!lease->dns) - return -ENOENT; + return -ENODATA; if (ret) *ret = lease->dns; @@ -255,8 +301,8 @@ int dhcp6_lease_add_domains(sd_dhcp6_lease *lease, const uint8_t *optval, size_t _cleanup_strv_free_ char **domains = NULL; int r; - assert_return(lease, -EINVAL); - assert_return(optval, -EINVAL); + assert(lease); + assert(optval || optlen == 0); if (optlen == 0) return 0; @@ -273,7 +319,7 @@ int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret) { assert_return(ret, -EINVAL); if (!lease->domains) - return -ENOENT; + return -ENODATA; *ret = lease->domains; return strv_length(lease->domains); @@ -282,8 +328,8 @@ int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret) { int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) { int r; - assert_return(lease, -EINVAL); - assert_return(optval, -EINVAL); + assert(lease); + assert(optval || optlen == 0); for (size_t offset = 0; offset < optlen;) { const uint8_t *subval; @@ -294,11 +340,11 @@ int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t opt if (r < 0) return r; - switch(subopt) { + switch (subopt) { case DHCP6_NTP_SUBOPTION_SRV_ADDR: case DHCP6_NTP_SUBOPTION_MC_ADDR: if (sublen != 16) - return 0; + return -EINVAL; r = dhcp6_option_parse_addresses(subval, sublen, &lease->ntp, &lease->ntp_count); if (r < 0) @@ -328,8 +374,8 @@ int dhcp6_lease_add_ntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t opt } int dhcp6_lease_add_sntp(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) { - assert_return(lease, -EINVAL); - assert_return(optval, -EINVAL); + assert(lease); + assert(optval || optlen == 0); if (optlen == 0) return 0; @@ -354,14 +400,14 @@ int sd_dhcp6_lease_get_ntp_addrs(sd_dhcp6_lease *lease, const struct in6_addr ** return lease->sntp_count; } - return -ENOENT; + return -ENODATA; } int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ret) { assert_return(lease, -EINVAL); if (!lease->ntp_fqdn) - return -ENOENT; + return -ENODATA; if (ret) *ret = lease->ntp_fqdn; @@ -369,11 +415,14 @@ int sd_dhcp6_lease_get_ntp_fqdn(sd_dhcp6_lease *lease, char ***ret) { } int dhcp6_lease_set_fqdn(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) { - int r; char *fqdn; + int r; - assert_return(lease, -EINVAL); - assert_return(optval, -EINVAL); + assert(lease); + assert(optval || optlen == 0); + + if (optlen == 0) + return 0; if (optlen < 2) return -ENODATA; @@ -392,20 +441,222 @@ int sd_dhcp6_lease_get_fqdn(sd_dhcp6_lease *lease, const char **ret) { assert_return(ret, -EINVAL); if (!lease->fqdn) - return -ENOENT; + return -ENODATA; *ret = lease->fqdn; return 0; } +static int dhcp6_lease_parse_message( + sd_dhcp6_client *client, + sd_dhcp6_lease *lease, + const DHCP6Message *message, + size_t len) { + + usec_t irt = IRT_DEFAULT; + int r; + + assert(client); + assert(lease); + assert(message); + assert(len >= sizeof(DHCP6Message)); + + len -= sizeof(DHCP6Message); + for (size_t offset = 0; offset < len;) { + uint16_t optcode; + size_t optlen; + const uint8_t *optval; + + r = dhcp6_option_parse(message->options, len, &offset, &optcode, &optlen, &optval); + if (r < 0) + return r; + + switch (optcode) { + case SD_DHCP6_OPTION_CLIENTID: + if (dhcp6_lease_get_clientid(lease, NULL, NULL) >= 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple client IDs", + dhcp6_message_type_to_string(message->type)); + + r = dhcp6_lease_set_clientid(lease, optval, optlen); + if (r < 0) + return r; + + break; + + case SD_DHCP6_OPTION_SERVERID: + if (dhcp6_lease_get_serverid(lease, NULL, NULL) >= 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), "%s contains multiple server IDs", + dhcp6_message_type_to_string(message->type)); + + r = dhcp6_lease_set_serverid(lease, optval, optlen); + if (r < 0) + return r; + + break; + + case SD_DHCP6_OPTION_PREFERENCE: + if (optlen != 1) + return -EINVAL; + + r = dhcp6_lease_set_preference(lease, optval[0]); + if (r < 0) + return r; + + break; + + case SD_DHCP6_OPTION_STATUS_CODE: { + _cleanup_free_ char *msg = NULL; + + r = dhcp6_option_parse_status(optval, optlen, &msg); + if (r < 0) + return r; + + if (r > 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "Received %s message with non-zero status: %s%s%s", + dhcp6_message_type_to_string(message->type), + strempty(msg), isempty(msg) ? "" : ": ", + dhcp6_message_status_to_string(r)); + break; + } + case SD_DHCP6_OPTION_IA_NA: { + _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL; + + if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { + log_dhcp6_client(client, "Ignoring IA NA option in information requesting mode."); + break; + } + + r = dhcp6_option_parse_ia(client, client->ia_na.header.id, optcode, optlen, optval, &ia); + if (r == -ENOMEM) + return r; + if (r < 0) + continue; + + if (lease->ia_na) { + log_dhcp6_client(client, "Received duplicate matching IA_NA option, ignoring."); + continue; + } + + dhcp6_ia_free(lease->ia_na); + lease->ia_na = TAKE_PTR(ia); + break; + } + case SD_DHCP6_OPTION_IA_PD: { + _cleanup_(dhcp6_ia_freep) DHCP6IA *ia = NULL; + + if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { + log_dhcp6_client(client, "Ignoring IA PD option in information requesting mode."); + break; + } + + r = dhcp6_option_parse_ia(client, client->ia_pd.header.id, optcode, optlen, optval, &ia); + if (r == -ENOMEM) + return r; + if (r < 0) + continue; + + if (lease->ia_pd) { + log_dhcp6_client(client, "Received duplicate matching IA_PD option, ignoring."); + continue; + } + + dhcp6_ia_free(lease->ia_pd); + lease->ia_pd = TAKE_PTR(ia); + break; + } + case SD_DHCP6_OPTION_RAPID_COMMIT: + r = dhcp6_lease_set_rapid_commit(lease); + if (r < 0) + return r; + + break; + + case SD_DHCP6_OPTION_DNS_SERVERS: + r = dhcp6_lease_add_dns(lease, optval, optlen); + if (r < 0) + log_dhcp6_client_errno(client, r, "Failed to parse DNS server option, ignoring: %m"); + + break; + + case SD_DHCP6_OPTION_DOMAIN_LIST: + r = dhcp6_lease_add_domains(lease, optval, optlen); + if (r < 0) + log_dhcp6_client_errno(client, r, "Failed to parse domain list option, ignoring: %m"); + + break; + + case SD_DHCP6_OPTION_NTP_SERVER: + r = dhcp6_lease_add_ntp(lease, optval, optlen); + if (r < 0) + log_dhcp6_client_errno(client, r, "Failed to parse NTP server option, ignoring: %m"); + + break; + + case SD_DHCP6_OPTION_SNTP_SERVERS: + r = dhcp6_lease_add_sntp(lease, optval, optlen); + if (r < 0) + log_dhcp6_client_errno(client, r, "Failed to parse SNTP server option, ignoring: %m"); + + break; + + case SD_DHCP6_OPTION_CLIENT_FQDN: + r = dhcp6_lease_set_fqdn(lease, optval, optlen); + if (r < 0) + log_dhcp6_client_errno(client, r, "Failed to parse FQDN option, ignoring: %m"); + + break; + + case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME: + if (optlen != 4) + return -EINVAL; + + irt = unaligned_read_be32((be32_t *) optval) * USEC_PER_SEC; + break; + } + } + + uint8_t *clientid; + size_t clientid_len; + if (dhcp6_lease_get_clientid(lease, &clientid, &clientid_len) < 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "%s message does not contain client ID. Ignoring.", + dhcp6_message_type_to_string(message->type)); + + if (memcmp_nn(clientid, clientid_len, &client->duid, client->duid_len) != 0) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "The client ID in %s message does not match. Ignoring.", + dhcp6_message_type_to_string(message->type)); + + if (client->state == DHCP6_STATE_INFORMATION_REQUEST) { + client->information_refresh_time_usec = MAX(irt, IRT_MINIMUM); + log_dhcp6_client(client, "New information request will be refused in %s.", + FORMAT_TIMESPAN(client->information_refresh_time_usec, USEC_PER_SEC)); + + } else { + r = dhcp6_lease_get_serverid(lease, NULL, NULL); + if (r < 0) + return log_dhcp6_client_errno(client, r, "%s has no server id", + dhcp6_message_type_to_string(message->type)); + + if (!lease->ia_na && !lease->ia_pd) + return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EINVAL), + "No IA_PD prefix or IA_NA address received. Ignoring."); + + dhcp6_lease_set_lifetime(lease); + } + + return 0; +} + static sd_dhcp6_lease *dhcp6_lease_free(sd_dhcp6_lease *lease) { if (!lease) return NULL; free(lease->clientid); free(lease->serverid); - dhcp6_lease_free_ia(&lease->ia); - dhcp6_lease_free_ia(&lease->pd); + dhcp6_ia_free(lease->ia_na); + dhcp6_ia_free(lease->ia_pd); free(lease->dns); free(lease->fqdn); strv_free(lease->domains); @@ -421,14 +672,47 @@ DEFINE_TRIVIAL_REF_UNREF_FUNC(sd_dhcp6_lease, sd_dhcp6_lease, dhcp6_lease_free); int dhcp6_lease_new(sd_dhcp6_lease **ret) { sd_dhcp6_lease *lease; - lease = new0(sd_dhcp6_lease, 1); + assert(ret); + + lease = new(sd_dhcp6_lease, 1); if (!lease) return -ENOMEM; - lease->n_ref = 1; - - LIST_HEAD_INIT(lease->ia.addresses); + *lease = (sd_dhcp6_lease) { + .n_ref = 1, + }; *ret = lease; return 0; } + +int dhcp6_lease_new_from_message( + sd_dhcp6_client *client, + const DHCP6Message *message, + size_t len, + const triple_timestamp *timestamp, + const struct in6_addr *server_address, + sd_dhcp6_lease **ret) { + + _cleanup_(sd_dhcp6_lease_unrefp) sd_dhcp6_lease *lease = NULL; + int r; + + assert(client); + assert(message); + assert(len >= sizeof(DHCP6Message)); + assert(ret); + + r = dhcp6_lease_new(&lease); + if (r < 0) + return r; + + dhcp6_lease_set_timestamp(lease, timestamp); + dhcp6_lease_set_server_address(lease, server_address); + + r = dhcp6_lease_parse_message(client, lease, message, len); + if (r < 0) + return r; + + *ret = TAKE_PTR(lease); + return 0; +} diff --git a/src/libnm-systemd-core/src/libsystemd-network/sd-lldp-rx.c b/src/libnm-systemd-core/src/libsystemd-network/sd-lldp-rx.c index f50e9c8d..496eb8f6 100644 --- a/src/libnm-systemd-core/src/libsystemd-network/sd-lldp-rx.c +++ b/src/libnm-systemd-core/src/libsystemd-network/sd-lldp-rx.c @@ -71,7 +71,7 @@ static int lldp_rx_make_space(sd_lldp_rx *lldp_rx, size_t extra) { goto remove_one; if (t == USEC_INFINITY) - t = now(clock_boottime_or_monotonic()); + t = now(CLOCK_BOOTTIME); if (n->until > t) break; @@ -450,7 +450,7 @@ static int lldp_rx_start_timer(sd_lldp_rx *lldp_rx, sd_lldp_neighbor *neighbor) return event_source_disable(lldp_rx->timer_event_source); return event_reset_time(lldp_rx->event, &lldp_rx->timer_event_source, - clock_boottime_or_monotonic(), + CLOCK_BOOTTIME, n->until, 0, on_timer_event, lldp_rx, lldp_rx->event_priority, "lldp-rx-timer", true); diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c index 13e16f9b..6e3c2ce9 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c +++ b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.c @@ -6,6 +6,7 @@ #include "event-source.h" #include "event-util.h" +#include "fd-util.h" #include "log.h" #include "string-util.h" @@ -123,3 +124,43 @@ int event_source_is_enabled(sd_event_source *s) { return sd_event_source_get_enabled(s, NULL); } + +#if 0 /* NM_IGNORED */ +int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata) { + _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL; + _cleanup_close_ int fd = -1; + int r; + + assert(e); + + /* Allocates an IO event source that gets woken up whenever the clock changes. Needs to be recreated on each event */ + + fd = time_change_fd(); + if (fd < 0) + return fd; + + r = sd_event_add_io(e, &s, fd, EPOLLIN, callback, userdata); + if (r < 0) + return r; + + r = sd_event_source_set_io_fd_own(s, true); + if (r < 0) + return r; + + TAKE_FD(fd); + + r = sd_event_source_set_description(s, "time-change"); + if (r < 0) + return r; + + if (ret) + *ret = TAKE_PTR(s); + else { + r = sd_event_source_set_floating(s, true); + if (r < 0) + return r; + } + + return 0; +} +#endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h index 64a41992..abd043bd 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h +++ b/src/libnm-systemd-core/src/libsystemd/sd-event/event-util.h @@ -29,3 +29,5 @@ int event_reset_time_relative( bool force_reset); int event_source_disable(sd_event_source *s); int event_source_is_enabled(sd_event_source *s); + +int event_add_time_change(sd_event *e, sd_event_source **ret, sd_event_io_handler_t callback, void *userdata); diff --git a/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c b/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c index e87d900c..240476e6 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c +++ b/src/libnm-systemd-core/src/libsystemd/sd-event/sd-event.c @@ -1924,7 +1924,6 @@ static int event_make_inode_data( static uint32_t inode_data_determine_mask(struct inode_data *d) { bool excl_unlink = true; uint32_t combined = 0; - sd_event_source *s; assert(d); @@ -3462,9 +3461,7 @@ static int event_inotify_data_process(sd_event *e, struct inotify_data *d) { /* The queue overran, let's pass this event to all event sources connected to this inotify * object */ - HASHMAP_FOREACH(inode_data, d->inodes) { - sd_event_source *s; - + HASHMAP_FOREACH(inode_data, d->inodes) LIST_FOREACH(inotify.by_inode_data, s, inode_data->event_sources) { if (event_source_is_offline(s)) @@ -3474,10 +3471,8 @@ static int event_inotify_data_process(sd_event *e, struct inotify_data *d) { if (r < 0) return r; } - } } else { struct inode_data *inode_data; - sd_event_source *s; /* Find the inode object for this watch descriptor. If IN_IGNORED is set we also remove it from * our watch descriptor table. */ @@ -3525,7 +3520,6 @@ static int event_inotify_data_process(sd_event *e, struct inotify_data *d) { } static int process_inotify(sd_event *e) { - struct inotify_data *d; int r, done = 0; assert(e); @@ -3910,6 +3904,7 @@ static int epoll_wait_usec( int msec; #if 0 static bool epoll_pwait2_absent = false; + int r; /* A wrapper that uses epoll_pwait2() if available, and falls back to epoll_wait() if not. * @@ -3918,12 +3913,10 @@ static int epoll_wait_usec( * https://github.com/systemd/systemd/issues/19052. */ if (!epoll_pwait2_absent && timeout != USEC_INFINITY) { - struct timespec ts; - r = epoll_pwait2(fd, events, maxevents, - timespec_store(&ts, timeout), + TIMESPEC_STORE(timeout), NULL); if (r >= 0) return r; @@ -4324,12 +4317,6 @@ _public_ int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec) { if (!TRIPLE_TIMESTAMP_HAS_CLOCK(clock)) return -EOPNOTSUPP; - /* Generate a clean error in case CLOCK_BOOTTIME is not available. Note that don't use clock_supported() here, - * for a reason: there are systems where CLOCK_BOOTTIME is supported, but CLOCK_BOOTTIME_ALARM is not, but for - * the purpose of getting the time this doesn't matter. */ - if (IN_SET(clock, CLOCK_BOOTTIME, CLOCK_BOOTTIME_ALARM) && !clock_boottime_supported()) - return -EOPNOTSUPP; - if (!triple_timestamp_is_set(&e->timestamp)) { /* Implicitly fall back to now() if we never ran before and thus have no cached time. */ *usec = now(clock); @@ -4469,6 +4456,7 @@ _public_ int sd_event_source_get_floating(sd_event_source *s) { return s->floating; } +#endif /* NM_IGNORED */ _public_ int sd_event_source_set_floating(sd_event_source *s, int b) { assert_return(s, -EINVAL); @@ -4492,6 +4480,7 @@ _public_ int sd_event_source_set_floating(sd_event_source *s, int b) { return 1; } +#if 0 /* NM_IGNORED */ _public_ int sd_event_source_get_exit_on_failure(sd_event_source *s) { assert_return(s, -EINVAL); assert_return(s->type != SOURCE_EXIT, -EDOM); diff --git a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c index 9ec2abc8..f1a3a42e 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c +++ b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.c @@ -15,29 +15,6 @@ #include "sync-util.h" #if 0 /* NM_IGNORED */ -char *id128_to_uuid_string(sd_id128_t id, char s[static ID128_UUID_STRING_MAX]) { - unsigned n, k = 0; - - assert(s); - - /* Similar to sd_id128_to_string() but formats the result as UUID instead of plain hex chars */ - - for (n = 0; n < 16; n++) { - - if (IN_SET(n, 4, 6, 8, 10)) - s[k++] = '-'; - - s[k++] = hexchar(id.bytes[n] >> 4); - s[k++] = hexchar(id.bytes[n] & 0xF); - } - - assert(k == 36); - - s[k] = 0; - - return s; -} - bool id128_is_valid(const char *s) { size_t i, l; @@ -158,13 +135,13 @@ int id128_write_fd(int fd, Id128Format f, sd_id128_t id, bool do_sync) { assert(f < _ID128_FORMAT_MAX); if (f != ID128_UUID) { - sd_id128_to_string(id, buffer); - buffer[32] = '\n'; - sz = 33; + assert_se(sd_id128_to_string(id, buffer)); + buffer[SD_ID128_STRING_MAX - 1] = '\n'; + sz = SD_ID128_STRING_MAX; } else { - id128_to_uuid_string(id, buffer); - buffer[36] = '\n'; - sz = 37; + assert_se(sd_id128_to_uuid_string(id, buffer)); + buffer[SD_ID128_UUID_STRING_MAX - 1] = '\n'; + sz = SD_ID128_UUID_STRING_MAX; } r = loop_write(fd, buffer, sz, false); @@ -234,4 +211,20 @@ int id128_get_product(sd_id128_t *ret) { *ret = uuid; return 0; } + +int id128_equal_string(const char *s, sd_id128_t id) { + sd_id128_t parsed; + int r; + + if (!s) + return false; + + /* Checks if the specified string matches a valid string representation of the specified 128 bit ID/uuid */ + + r = sd_id128_from_string(s, &parsed); + if (r < 0) + return r; + + return sd_id128_equal(parsed, id); +} #endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.h b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.h index b7327a1f..65a278c8 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.h +++ b/src/libnm-systemd-core/src/libsystemd/sd-id128/id128-util.h @@ -8,12 +8,6 @@ #include "hash-funcs.h" #include "macro.h" -#define ID128_UUID_STRING_MAX 37 - -char *id128_to_uuid_string(sd_id128_t id, char s[static ID128_UUID_STRING_MAX]); - -#define ID128_TO_UUID_STRING(id) id128_to_uuid_string((id), (char[ID128_UUID_STRING_MAX]) {}) - bool id128_is_valid(const char *s) _pure_; typedef enum Id128Format { @@ -40,3 +34,5 @@ extern const struct hash_ops id128_hash_ops; sd_id128_t id128_make_v4_uuid(sd_id128_t id); int id128_get_product(sd_id128_t *ret); + +int id128_equal_string(const char *s, sd_id128_t id); diff --git a/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c b/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c index c3ed3bbb..8e47e26e 100644 --- a/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libnm-systemd-core/src/libsystemd/sd-id128/sd-id128.c @@ -22,16 +22,36 @@ #if 0 /* NM_IGNORED */ _public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) { - unsigned n; - assert_return(s, NULL); - for (n = 0; n < 16; n++) { + for (size_t n = 0; n < 16; n++) { s[n*2] = hexchar(id.bytes[n] >> 4); s[n*2+1] = hexchar(id.bytes[n] & 0xF); } - s[32] = 0; + s[SD_ID128_STRING_MAX-1] = 0; + + return s; +} + +_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]) { + size_t k = 0; + + assert_return(s, NULL); + + /* Similar to sd_id128_to_string() but formats the result as UUID instead of plain hex chars */ + + for (size_t n = 0; n < 16; n++) { + + if (IN_SET(n, 4, 6, 8, 10)) + s[k++] = '-'; + + s[k++] = hexchar(id.bytes[n] >> 4); + s[k++] = hexchar(id.bytes[n] & 0xF); + } + + assert(k == SD_ID128_UUID_STRING_MAX - 1); + s[k] = 0; return s; } @@ -261,9 +281,7 @@ _public_ int sd_id128_randomize(sd_id128_t *ret) { assert_return(ret, -EINVAL); - /* We allow usage if x86-64 RDRAND here. It might not be trusted enough for keeping secrets, but it should be - * fine for UUIDS. */ - r = genuine_random_bytes(&t, sizeof t, RANDOM_ALLOW_RDRAND); + r = genuine_random_bytes(&t, sizeof(t), 0); if (r < 0) return r; diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp-client.h b/src/libnm-systemd-core/src/systemd/sd-dhcp-client.h index 4af4b45f..834f80b4 100644 --- a/src/libnm-systemd-core/src/systemd/sd-dhcp-client.h +++ b/src/libnm-systemd-core/src/systemd/sd-dhcp-client.h @@ -44,67 +44,175 @@ enum { * The client may want to start acquiring link-local addresses. */ }; +/* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml#options */ enum { - SD_DHCP_OPTION_PAD = 0, - SD_DHCP_OPTION_SUBNET_MASK = 1, - SD_DHCP_OPTION_TIME_OFFSET = 2, - SD_DHCP_OPTION_ROUTER = 3, - SD_DHCP_OPTION_DOMAIN_NAME_SERVER = 6, - SD_DHCP_OPTION_LPR_SERVER = 9, - SD_DHCP_OPTION_HOST_NAME = 12, - SD_DHCP_OPTION_BOOT_FILE_SIZE = 13, - SD_DHCP_OPTION_DOMAIN_NAME = 15, - SD_DHCP_OPTION_ROOT_PATH = 17, - SD_DHCP_OPTION_ENABLE_IP_FORWARDING = 19, - SD_DHCP_OPTION_ENABLE_IP_FORWARDING_NL = 20, - SD_DHCP_OPTION_POLICY_FILTER = 21, - SD_DHCP_OPTION_INTERFACE_MDR = 22, - SD_DHCP_OPTION_INTERFACE_TTL = 23, - SD_DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT = 24, - SD_DHCP_OPTION_INTERFACE_MTU = 26, - SD_DHCP_OPTION_BROADCAST = 28, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_ROUTER_DISCOVER = 31, - SD_DHCP_OPTION_STATIC_ROUTE = 33, - SD_DHCP_OPTION_NTP_SERVER = 42, - SD_DHCP_OPTION_VENDOR_SPECIFIC = 43, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_NETBIOS_NAMESERVER = 44, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_NETBIOS_NODETYPE = 46, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_NETBIOS_SCOPE = 47, - SD_DHCP_OPTION_REQUESTED_IP_ADDRESS = 50, - SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME = 51, - SD_DHCP_OPTION_OVERLOAD = 52, - SD_DHCP_OPTION_MESSAGE_TYPE = 53, - SD_DHCP_OPTION_SERVER_IDENTIFIER = 54, - SD_DHCP_OPTION_PARAMETER_REQUEST_LIST = 55, - SD_DHCP_OPTION_ERROR_MESSAGE = 56, - SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE = 57, - SD_DHCP_OPTION_RENEWAL_T1_TIME = 58, - SD_DHCP_OPTION_REBINDING_T2_TIME = 59, - SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER = 60, - SD_DHCP_OPTION_CLIENT_IDENTIFIER = 61, - SD_DHCP_OPTION_SMTP_SERVER = 69, - SD_DHCP_OPTION_POP3_SERVER = 70, - SD_DHCP_OPTION_USER_CLASS = 77, - SD_DHCP_OPTION_FQDN = 81, - SD_DHCP_OPTION_RELAY_AGENT_INFORMATION = 82, - SD_DHCP_OPTION_NEW_POSIX_TIMEZONE = 100, - SD_DHCP_OPTION_NEW_TZDB_TIMEZONE = 101, - SD_DHCP_OPTION_DOMAIN_SEARCH_LIST = 119, - SD_DHCP_OPTION_SIP_SERVER = 120, - SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121, - SD_DHCP_OPTION_MUD_URL = 161, - SD_DHCP_OPTION_6RD = 212, + SD_DHCP_OPTION_PAD = 0, /* [RFC2132] */ + SD_DHCP_OPTION_SUBNET_MASK = 1, /* [RFC2132] */ + SD_DHCP_OPTION_TIME_OFFSET = 2, /* [RFC2132], deprecated by 100 and 101 */ + SD_DHCP_OPTION_ROUTER = 3, /* [RFC2132] */ + SD_DHCP_OPTION_TIME_SERVER = 4, /* [RFC2132] */ + SD_DHCP_OPTION_NAME_SERVER = 5, /* [RFC2132] */ + SD_DHCP_OPTION_DOMAIN_NAME_SERVER = 6, /* [RFC2132] */ + SD_DHCP_OPTION_LOG_SERVER = 7, /* [RFC2132] */ + SD_DHCP_OPTION_QUOTES_SERVER = 8, /* [RFC2132] */ + SD_DHCP_OPTION_LPR_SERVER = 9, /* [RFC2132] */ + SD_DHCP_OPTION_IMPRESS_SERVER = 10, /* [RFC2132] */ + SD_DHCP_OPTION_RLP_SERVER = 11, /* [RFC2132] */ + SD_DHCP_OPTION_HOST_NAME = 12, /* [RFC2132] */ + SD_DHCP_OPTION_BOOT_FILE_SIZE = 13, /* [RFC2132] */ + SD_DHCP_OPTION_MERIT_DUMP_FILE = 14, /* [RFC2132] */ + SD_DHCP_OPTION_DOMAIN_NAME = 15, /* [RFC2132] */ + SD_DHCP_OPTION_SWAP_SERVER = 16, /* [RFC2132] */ + SD_DHCP_OPTION_ROOT_PATH = 17, /* [RFC2132] */ + SD_DHCP_OPTION_EXTENSION_FILE = 18, /* [RFC2132] */ + SD_DHCP_OPTION_FORWARD = 19, /* [RFC2132] */ + SD_DHCP_OPTION_SOURCE_ROUTE = 20, /* [RFC2132] */ + SD_DHCP_OPTION_POLICY_FILTER = 21, /* [RFC2132] */ + SD_DHCP_OPTION_MAX_DATAGRAM_ASSEMBLY = 22, /* [RFC2132] */ + SD_DHCP_OPTION_DEFAULT_IP_TTL = 23, /* [RFC2132] */ + SD_DHCP_OPTION_MTU_TIMEOUT = 24, /* [RFC2132] */ + SD_DHCP_OPTION_MTU_PLATEAU = 25, /* [RFC2132] */ + SD_DHCP_OPTION_MTU_INTERFACE = 26, /* [RFC2132] */ + SD_DHCP_OPTION_MTU_SUBNET = 27, /* [RFC2132] */ + SD_DHCP_OPTION_BROADCAST = 28, /* [RFC2132] */ + SD_DHCP_OPTION_MASK_DISCOVERY = 29, /* [RFC2132] */ + SD_DHCP_OPTION_MASK_SUPPLIER = 30, /* [RFC2132] */ + SD_DHCP_OPTION_ROUTER_DISCOVERY = 31, /* [RFC2132] */ + SD_DHCP_OPTION_ROUTER_REQUEST = 32, /* [RFC2132] */ + SD_DHCP_OPTION_STATIC_ROUTE = 33, /* [RFC2132] */ + SD_DHCP_OPTION_TRAILERS = 34, /* [RFC2132] */ + SD_DHCP_OPTION_ARP_TIMEOUT = 35, /* [RFC2132] */ + SD_DHCP_OPTION_ETHERNET = 36, /* [RFC2132] */ + SD_DHCP_OPTION_DEFAULT_TCP_TTL = 37, /* [RFC2132] */ + SD_DHCP_OPTION_KEEPALIVE_TIME = 38, /* [RFC2132] */ + SD_DHCP_OPTION_KEEPALIVE_DATA = 39, /* [RFC2132] */ + SD_DHCP_OPTION_NIS_DOMAIN = 40, /* [RFC2132] */ + SD_DHCP_OPTION_NIS_SERVER = 41, /* [RFC2132] */ + SD_DHCP_OPTION_NTP_SERVER = 42, /* [RFC2132] */ + SD_DHCP_OPTION_VENDOR_SPECIFIC = 43, /* [RFC2132] */ + SD_DHCP_OPTION_NETBIOS_NAME_SERVER = 44, /* [RFC2132] */ + SD_DHCP_OPTION_NETBIOS_DIST_SERVER = 45, /* [RFC2132] */ + SD_DHCP_OPTION_NETBIOS_NODE_TYPE = 46, /* [RFC2132] */ + SD_DHCP_OPTION_NETBIOS_SCOPE = 47, /* [RFC2132] */ + SD_DHCP_OPTION_X_WINDOW_FONT = 48, /* [RFC2132] */ + SD_DHCP_OPTION_X_WINDOW_MANAGER = 49, /* [RFC2132] */ + SD_DHCP_OPTION_REQUESTED_IP_ADDRESS = 50, /* [RFC2132] */ + SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME = 51, /* [RFC2132] */ + SD_DHCP_OPTION_OVERLOAD = 52, /* [RFC2132] */ + SD_DHCP_OPTION_MESSAGE_TYPE = 53, /* [RFC2132] */ + SD_DHCP_OPTION_SERVER_IDENTIFIER = 54, /* [RFC2132] */ + SD_DHCP_OPTION_PARAMETER_REQUEST_LIST = 55, /* [RFC2132] */ + SD_DHCP_OPTION_ERROR_MESSAGE = 56, /* [RFC2132] */ + SD_DHCP_OPTION_MAXIMUM_MESSAGE_SIZE = 57, /* [RFC2132] */ + SD_DHCP_OPTION_RENEWAL_TIME = 58, /* [RFC2132] */ + SD_DHCP_OPTION_REBINDING_TIME = 59, /* [RFC2132] */ + SD_DHCP_OPTION_VENDOR_CLASS_IDENTIFIER = 60, /* [RFC2132] */ + SD_DHCP_OPTION_CLIENT_IDENTIFIER = 61, /* [RFC2132] */ + SD_DHCP_OPTION_NETWARE_IP_DOMAIN = 62, /* [RFC2242] */ + SD_DHCP_OPTION_NETWARE_IP_OPTION = 63, /* [RFC2242] */ + SD_DHCP_OPTION_NIS_DOMAIN_NAME = 64, /* [RFC2132] */ + SD_DHCP_OPTION_NIS_SERVER_ADDR = 65, /* [RFC2132] */ + SD_DHCP_OPTION_BOOT_SERVER_NAME = 66, /* [RFC2132] */ + SD_DHCP_OPTION_BOOT_FILENAME = 67, /* [RFC2132] */ + SD_DHCP_OPTION_HOME_AGENT_ADDRESSES = 68, /* [RFC2132] */ + SD_DHCP_OPTION_SMTP_SERVER = 69, /* [RFC2132] */ + SD_DHCP_OPTION_POP3_SERVER = 70, /* [RFC2132] */ + SD_DHCP_OPTION_NNTP_SERVER = 71, /* [RFC2132] */ + SD_DHCP_OPTION_WWW_SERVER = 72, /* [RFC2132] */ + SD_DHCP_OPTION_FINGER_SERVER = 73, /* [RFC2132] */ + SD_DHCP_OPTION_IRC_SERVER = 74, /* [RFC2132] */ + SD_DHCP_OPTION_STREETTALK_SERVER = 75, /* [RFC2132] */ + SD_DHCP_OPTION_STDA_SERVER = 76, /* [RFC2132] */ + SD_DHCP_OPTION_USER_CLASS = 77, /* [RFC3004] */ + SD_DHCP_OPTION_DIRECTORY_AGENT = 78, /* [RFC2610] */ + SD_DHCP_OPTION_SERVICE_SCOPE = 79, /* [RFC2610] */ + SD_DHCP_OPTION_RAPID_COMMIT = 80, /* [RFC4039] */ + SD_DHCP_OPTION_FQDN = 81, /* [RFC4702] */ + SD_DHCP_OPTION_RELAY_AGENT_INFORMATION = 82, /* [RFC3046] */ + SD_DHCP_OPTION_ISNS = 83, /* [RFC4174] */ + /* option code 84 is unassigned [RFC3679] */ + SD_DHCP_OPTION_NDS_SERVER = 85, /* [RFC2241] */ + SD_DHCP_OPTION_NDS_TREE_NAME = 86, /* [RFC2241] */ + SD_DHCP_OPTION_NDS_CONTEXT = 87, /* [RFC2241] */ + SD_DHCP_OPTION_BCMCS_CONTROLLER_DOMAIN_NAM = 88, /* [RFC4280] */ + SD_DHCP_OPTION_BCMCS_CONTROLLER_ADDRESS = 89, /* [RFC4280] */ + SD_DHCP_OPTION_AUTHENTICATION = 90, /* [RFC3118] */ + SD_DHCP_OPTION_CLIENT_LAST_TRANSACTION_TIME = 91, /* [RFC4388] */ + SD_DHCP_OPTION_ASSOCIATED_IP = 92, /* [RFC4388] */ + SD_DHCP_OPTION_CLIENT_SYSTEM = 93, /* [RFC4578] */ + SD_DHCP_OPTION_CLIENT_NDI = 94, /* [RFC4578] */ + SD_DHCP_OPTION_LDAP = 95, /* [RFC3679] */ + /* option code 96 is unassigned [RFC3679] */ + SD_DHCP_OPTION_UUID = 97, /* [RFC4578] */ + SD_DHCP_OPTION_USER_AUTHENTICATION = 98, /* [RFC2485] */ + SD_DHCP_OPTION_GEOCONF_CIVIC = 99, /* [RFC4776] */ + SD_DHCP_OPTION_POSIX_TIMEZONE = 100, /* [RFC4833] */ + SD_DHCP_OPTION_TZDB_TIMEZONE = 101, /* [RFC4833] */ + /* option codes 102-107 are unassigned [RFC3679] */ + SD_DHCP_OPTION_IPV6_ONLY_PREFERRED = 108, /* [RFC8925] */ + SD_DHCP_OPTION_DHCP4O6_SOURCE_ADDRESS = 109, /* [RFC8539] */ + /* option codes 110-111 are unassigned [RFC3679] */ + SD_DHCP_OPTION_NETINFO_ADDRESS = 112, /* [RFC3679] */ + SD_DHCP_OPTION_NETINFO_TAG = 113, /* [RFC3679] */ + SD_DHCP_OPTION_DHCP_CAPTIVE_PORTAL = 114, /* [RFC8910] */ + /* option code 115 is unassigned [RFC3679] */ + SD_DHCP_OPTION_AUTO_CONFIG = 116, /* [RFC2563] */ + SD_DHCP_OPTION_NAME_SERVICE_SEARCH = 117, /* [RFC2937] */ + SD_DHCP_OPTION_SUBNET_SELECTION = 118, /* [RFC3011] */ + SD_DHCP_OPTION_DOMAIN_SEARCH = 119, /* [RFC3397] */ + SD_DHCP_OPTION_SIP_SERVER = 120, /* [RFC3361] */ + SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121, /* [RFC3442] */ + SD_DHCP_OPTION_CABLELABS_CLIENT_CONFIGURATION = 122, /* [RFC3495] */ + SD_DHCP_OPTION_GEOCONF = 123, /* [RFC6225] */ + SD_DHCP_OPTION_VENDOR_CLASS = 124, /* [RFC3925] */ + SD_DHCP_OPTION_VENDOR_SPECIFIC_INFORMATION = 125, /* [RFC3925] */ + /* option codes 126-127 are unassigned [RFC3679] */ + /* option codes 128-135 are assigned to use by PXE, but they are vendor specific [RFC4578] */ + SD_DHCP_OPTION_PANA_AGENT = 136, /* [RFC5192] */ + SD_DHCP_OPTION_LOST_SERVER_FQDN = 137, /* [RFC5223] */ + SD_DHCP_OPTION_CAPWAP_AC_ADDRESS = 138, /* [RFC5417] */ + SD_DHCP_OPTION_MOS_ADDRESS = 139, /* [RFC5678] */ + SD_DHCP_OPTION_MOS_FQDN = 140, /* [RFC5678] */ + SD_DHCP_OPTION_SIP_SERVICE_DOMAINS = 141, /* [RFC6011] */ + SD_DHCP_OPTION_ANDSF_ADDRESS = 142, /* [RFC6153] */ + SD_DHCP_OPTION_SZTP_REDIRECT = 143, /* [RFC8572] */ + SD_DHCP_OPTION_GEOLOC = 144, /* [RFC6225] */ + SD_DHCP_OPTION_FORCERENEW_NONCE_CAPABLE = 145, /* [RFC6704] */ + SD_DHCP_OPTION_RDNSS_SELECTION = 146, /* [RFC6731] */ + SD_DHCP_OPTION_DOTS_RI = 147, /* [RFC8973] */ + SD_DHCP_OPTION_DOTS_ADDRESS = 148, /* [RFC8973] */ + /* option code 149 is unassigned [RFC3942] */ + SD_DHCP_OPTION_TFTP_SERVER_ADDRESS = 150, /* [RFC5859] */ + SD_DHCP_OPTION_STATUS_CODE = 151, /* [RFC6926] */ + SD_DHCP_OPTION_BASE_TIME = 152, /* [RFC6926] */ + SD_DHCP_OPTION_START_TIME_OF_STATE = 153, /* [RFC6926] */ + SD_DHCP_OPTION_QUERY_START_TIME = 154, /* [RFC6926] */ + SD_DHCP_OPTION_QUERY_END_TIME = 155, /* [RFC6926] */ + SD_DHCP_OPTION_DHCP_STATE = 156, /* [RFC6926] */ + SD_DHCP_OPTION_DATA_SOURCE = 157, /* [RFC6926] */ + SD_DHCP_OPTION_PCP_SERVER = 158, /* [RFC7291] */ + SD_DHCP_OPTION_PORT_PARAMS = 159, /* [RFC7618] */ + /* option code 160 is unassigned [RFC7710][RFC8910] */ + SD_DHCP_OPTION_MUD_URL = 161, /* [RFC8520] */ + /* option codes 162-174 are unassigned [RFC3942] */ + /* option codes 175-177 are temporary assigned. */ + /* option codes 178-207 are unassigned [RFC3942] */ + SD_DHCP_OPTION_PXELINUX_MAGIC = 208, /* [RFC5071] Deprecated */ + SD_DHCP_OPTION_CONFIGURATION_FILE = 209, /* [RFC5071] */ + SD_DHCP_OPTION_PATH_PREFIX = 210, /* [RFC5071] */ + SD_DHCP_OPTION_REBOOT_TIME = 211, /* [RFC5071] */ + SD_DHCP_OPTION_6RD = 212, /* [RFC5969] */ + SD_DHCP_OPTION_ACCESS_DOMAIN = 213, /* [RFC5986] */ + /* option codes 214-219 are unassigned */ + SD_DHCP_OPTION_SUBNET_ALLOCATION = 220, /* [RFC6656] */ + SD_DHCP_OPTION_VIRTUAL_SUBNET_SELECTION = 221, /* [RFC6607] */ + /* option codes 222-223 are unassigned [RFC3942] */ + /* option codes 224-254 are reserved for private use */ SD_DHCP_OPTION_PRIVATE_BASE = 224, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249, - /* Windows 10 option to send when Anonymize=true */ - SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY = 252, + SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE = 249, /* [RFC7844] */ + SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY = 252, /* [RFC7844] */ SD_DHCP_OPTION_PRIVATE_LAST = 254, - SD_DHCP_OPTION_END = 255, + SD_DHCP_OPTION_END = 255, /* [RFC2132] */ }; /* Suboptions for SD_DHCP_OPTION_RELAY_AGENT_INFORMATION option */ diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp-lease.h b/src/libnm-systemd-core/src/systemd/sd-dhcp-lease.h index 478bbfd7..578ac6d4 100644 --- a/src/libnm-systemd-core/src/systemd/sd-dhcp-lease.h +++ b/src/libnm-systemd-core/src/systemd/sd-dhcp-lease.h @@ -67,7 +67,8 @@ int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainname); int sd_dhcp_lease_get_search_domains(sd_dhcp_lease *lease, char ***domains); int sd_dhcp_lease_get_hostname(sd_dhcp_lease *lease, const char **hostname); int sd_dhcp_lease_get_root_path(sd_dhcp_lease *lease, const char **root_path); -int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, sd_dhcp_route ***routes); +int sd_dhcp_lease_get_static_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret); +int sd_dhcp_lease_get_classless_routes(sd_dhcp_lease *lease, sd_dhcp_route ***ret); int sd_dhcp_lease_get_vendor_specific(sd_dhcp_lease *lease, const void **data, size_t *data_len); int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const void **client_id, size_t *client_id_len); int sd_dhcp_lease_get_timezone(sd_dhcp_lease *lease, const char **timezone); @@ -82,7 +83,6 @@ int sd_dhcp_lease_get_6rd( int sd_dhcp_route_get_destination(sd_dhcp_route *route, struct in_addr *destination); int sd_dhcp_route_get_destination_prefix_length(sd_dhcp_route *route, uint8_t *length); int sd_dhcp_route_get_gateway(sd_dhcp_route *route, struct in_addr *gateway); -int sd_dhcp_route_get_option(sd_dhcp_route *route); _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_dhcp_lease, sd_dhcp_lease_unref); diff --git a/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h b/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h index 0e23c84e..d89b7d1c 100644 --- a/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h +++ b/src/libnm-systemd-core/src/systemd/sd-dhcp6-client.h @@ -81,8 +81,8 @@ enum { SD_DHCP6_OPTION_SUBSCRIBER_ID = 38, /* RFC 4580 */ SD_DHCP6_OPTION_CLIENT_FQDN = 39, /* RFC 4704 */ SD_DHCP6_OPTION_PANA_AGENT = 40, /* RFC 5192 */ - SD_DHCP6_OPTION_NEW_POSIX_TIMEZONE = 41, /* RFC 4833 */ - SD_DHCP6_OPTION_NEW_TZDB_TIMEZONE = 42, /* RFC 4833 */ + SD_DHCP6_OPTION_POSIX_TIMEZONE = 41, /* RFC 4833 */ + SD_DHCP6_OPTION_TZDB_TIMEZONE = 42, /* RFC 4833 */ SD_DHCP6_OPTION_ERO = 43, /* RFC 4994 */ SD_DHCP6_OPTION_LQ_QUERY = 44, /* RFC 5007 */ SD_DHCP6_OPTION_CLIENT_DATA = 45, /* RFC 5007 */ @@ -251,7 +251,7 @@ int sd_dhcp6_client_set_request_vendor_class( int sd_dhcp6_client_set_prefix_delegation_hint( sd_dhcp6_client *client, uint8_t prefixlen, - const struct in6_addr *pd_address); + const struct in6_addr *pd_prefix); int sd_dhcp6_client_get_prefix_delegation(sd_dhcp6_client *client, int *delegation); int sd_dhcp6_client_set_prefix_delegation(sd_dhcp6_client *client, @@ -260,8 +260,6 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client, int *request); int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request); -int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client, - uint32_t transaction_id); int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option *v); diff --git a/src/libnm-systemd-core/src/systemd/sd-id128.h b/src/libnm-systemd-core/src/systemd/sd-id128.h index e64f3200..f7d3244b 100644 --- a/src/libnm-systemd-core/src/systemd/sd-id128.h +++ b/src/libnm-systemd-core/src/systemd/sd-id128.h @@ -35,11 +35,14 @@ union sd_id128 { }; #define SD_ID128_STRING_MAX 33U +#define SD_ID128_UUID_STRING_MAX 37U char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]); +char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]); int sd_id128_from_string(const char *s, sd_id128_t *ret); #define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {}) +#define SD_ID128_TO_UUID_STRING(id) sd_id128_to_uuid_string((id), (char[SD_ID128_UUID_STRING_MAX]) {}) int sd_id128_randomize(sd_id128_t *ret); diff --git a/src/libnm-systemd-shared/src/basic/alloc-util.h b/src/libnm-systemd-shared/src/basic/alloc-util.h index 65d51756..9dde770d 100644 --- a/src/libnm-systemd-shared/src/basic/alloc-util.h +++ b/src/libnm-systemd-shared/src/basic/alloc-util.h @@ -13,6 +13,7 @@ #endif typedef void (*free_func_t)(void *p); +typedef void* (*mfree_func_t)(void *p); /* If for some reason more than 4M are allocated on the stack, let's abort immediately. It's better than * proceeding and smashing the stack limits. Note that by default RLIMIT_STACK is 8M on Linux. */ @@ -173,13 +174,23 @@ void* greedy_realloc0(void **p, size_t need, size_t size); * is compatible with _FORTIFY_SOURCES. If _FORTIFY_SOURCES is used many memory operations will take the * object size as returned by __builtin_object_size() into account. Hence, let's return the smaller size of * malloc_usable_size() and __builtin_object_size() here, so that we definitely operate in safe territory by - * both the compiler's and libc's standards. Note that __builtin_object_size() evaluates to SIZE_MAX if the - * size cannot be determined, hence the MIN() expression should be safe with dynamically sized memory, - * too. Moreover, when NULL is passed malloc_usable_size() is documented to return zero, and + * both the compiler's and libc's standards. Note that _FORTIFY_SOURCES=3 handles also dynamically allocated + * objects and thus it's safer using __builtin_dynamic_object_size if _FORTIFY_SOURCES=3 is used (#22801). + * Moreover, when NULL is passed malloc_usable_size() is documented to return zero, and * __builtin_object_size() returns SIZE_MAX too, hence we also return a sensible value of 0 in this corner * case. */ + +#if defined __has_builtin +# if __has_builtin(__builtin_dynamic_object_size) +# define MALLOC_SIZEOF_SAFE(x) \ + MIN(malloc_usable_size(x), __builtin_dynamic_object_size(x, 0)) +# endif +#endif + +#ifndef MALLOC_SIZEOF_SAFE #define MALLOC_SIZEOF_SAFE(x) \ MIN(malloc_usable_size(x), __builtin_object_size(x, 0)) +#endif /* Inspired by ELEMENTSOF() but operates on malloc()'ed memory areas: typesafely returns the number of items * that fit into the specified memory block */ diff --git a/src/libnm-systemd-shared/src/basic/cgroup-util.h b/src/libnm-systemd-shared/src/basic/cgroup-util.h index 461c01b3..4c413a8d 100644 --- a/src/libnm-systemd-shared/src/basic/cgroup-util.h +++ b/src/libnm-systemd-shared/src/basic/cgroup-util.h @@ -205,6 +205,8 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path); int cg_rmdir(const char *controller, const char *path); +int cg_is_threaded(const char *controller, const char *path); + typedef enum { CG_KEY_MODE_GRACEFUL = 1 << 0, } CGroupKeyMode; diff --git a/src/libnm-systemd-shared/src/basic/env-file.c b/src/libnm-systemd-shared/src/basic/env-file.c index baab9bd2..61a9cd60 100644 --- a/src/libnm-systemd-shared/src/basic/env-file.c +++ b/src/libnm-systemd-shared/src/basic/env-file.c @@ -18,14 +18,12 @@ static int parse_env_file_internal( FILE *f, const char *fname, int (*push) (const char *filename, unsigned line, - const char *key, char *value, void *userdata, int *n_pushed), - void *userdata, - int *n_pushed) { + const char *key, char *value, void *userdata), + void *userdata) { size_t n_key = 0, n_value = 0, last_value_whitespace = SIZE_MAX, last_key_whitespace = SIZE_MAX; _cleanup_free_ char *contents = NULL, *key = NULL, *value = NULL; unsigned line = 1; - char *p; int r; enum { @@ -48,7 +46,7 @@ static int parse_env_file_internal( if (r < 0) return r; - for (p = contents; *p; p++) { + for (char *p = contents; *p; p++) { char c = *p; switch (state) { @@ -102,7 +100,7 @@ static int parse_env_file_internal( if (last_key_whitespace != SIZE_MAX) key[last_key_whitespace] = 0; - r = push(fname, line, key, value, userdata, n_pushed); + r = push(fname, line, key, value, userdata); if (r < 0) return r; @@ -145,7 +143,7 @@ static int parse_env_file_internal( if (last_key_whitespace != SIZE_MAX) key[last_key_whitespace] = 0; - r = push(fname, line, key, value, userdata, n_pushed); + r = push(fname, line, key, value, userdata); if (r < 0) return r; @@ -264,7 +262,7 @@ static int parse_env_file_internal( if (last_key_whitespace != SIZE_MAX) key[last_key_whitespace] = 0; - r = push(fname, line, key, value, userdata, n_pushed); + r = push(fname, line, key, value, userdata); if (r < 0) return r; @@ -302,8 +300,7 @@ static int check_utf8ness_and_warn( static int parse_env_file_push( const char *filename, unsigned line, const char *key, char *value, - void *userdata, - int *n_pushed) { + void *userdata) { const char *k; va_list aq, *ap = userdata; @@ -325,9 +322,6 @@ static int parse_env_file_push( free(*v); *v = value; - if (n_pushed) - (*n_pushed)++; - return 1; } } @@ -343,16 +337,13 @@ int parse_env_filev( const char *fname, va_list ap) { - int r, n_pushed = 0; + int r; va_list aq; va_copy(aq, ap); - r = parse_env_file_internal(f, fname, parse_env_file_push, &aq, &n_pushed); + r = parse_env_file_internal(f, fname, parse_env_file_push, &aq); va_end(aq); - if (r < 0) - return r; - - return n_pushed; + return r; } int parse_env_file_sentinel( @@ -374,8 +365,7 @@ int parse_env_file_sentinel( static int load_env_file_push( const char *filename, unsigned line, const char *key, char *value, - void *userdata, - int *n_pushed) { + void *userdata) { char ***m = userdata; char *p; int r; @@ -392,78 +382,69 @@ static int load_env_file_push( if (r < 0) return r; - if (n_pushed) - (*n_pushed)++; - free(value); return 0; } int load_env_file(FILE *f, const char *fname, char ***rl) { - char **m = NULL; + _cleanup_strv_free_ char **m = NULL; int r; - r = parse_env_file_internal(f, fname, load_env_file_push, &m, NULL); - if (r < 0) { - strv_free(m); + r = parse_env_file_internal(f, fname, load_env_file_push, &m); + if (r < 0) return r; - } - *rl = m; + *rl = TAKE_PTR(m); return 0; } static int load_env_file_push_pairs( const char *filename, unsigned line, const char *key, char *value, - void *userdata, - int *n_pushed) { - char ***m = userdata; + void *userdata) { + + char ***m = ASSERT_PTR(userdata); int r; r = check_utf8ness_and_warn(filename, line, key, value); if (r < 0) return r; + /* Check if the key is present */ + for (char **t = *m; t && *t; t += 2) + if (streq(t[0], key)) { + if (value) + return free_and_replace(t[1], value); + else + return free_and_strdup(t+1, ""); + } + r = strv_extend(m, key); if (r < 0) - return -ENOMEM; - - if (!value) { - r = strv_extend(m, ""); - if (r < 0) - return -ENOMEM; - } else { - r = strv_push(m, value); - if (r < 0) - return r; - } - - if (n_pushed) - (*n_pushed)++; + return r; - return 0; + if (value) + return strv_push(m, value); + else + return strv_extend(m, ""); } int load_env_file_pairs(FILE *f, const char *fname, char ***rl) { - char **m = NULL; + _cleanup_strv_free_ char **m = NULL; int r; - r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m, NULL); - if (r < 0) { - strv_free(m); + r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m); + if (r < 0) return r; - } - *rl = m; + *rl = TAKE_PTR(m); return 0; } static int merge_env_file_push( const char *filename, unsigned line, const char *key, char *value, - void *userdata, - int *n_pushed) { + void *userdata) { char ***env = userdata; char *expanded_value; @@ -492,7 +473,7 @@ static int merge_env_file_push( log_debug("%s:%u: setting %s=%s", filename, line, key, value); - return load_env_file_push(filename, line, key, value, env, n_pushed); + return load_env_file_push(filename, line, key, value, env); } int merge_env_file( @@ -504,7 +485,7 @@ int merge_env_file( * plus "extended" substitutions, unlike other exported parsing functions. */ - return parse_env_file_internal(f, fname, merge_env_file_push, env, NULL); + return parse_env_file_internal(f, fname, merge_env_file_push, env); } static void write_env_var(FILE *f, const char *v) { @@ -541,7 +522,6 @@ static void write_env_var(FILE *f, const char *v) { int write_env_file(const char *fname, char **l) { _cleanup_fclose_ FILE *f = NULL; _cleanup_free_ char *p = NULL; - char **i; int r; assert(fname); diff --git a/src/libnm-systemd-shared/src/basic/env-util.c b/src/libnm-systemd-shared/src/basic/env-util.c index f47ddefe..b4ac6811 100644 --- a/src/libnm-systemd-shared/src/basic/env-util.c +++ b/src/libnm-systemd-shared/src/basic/env-util.c @@ -99,8 +99,6 @@ bool env_assignment_is_valid(const char *e) { } bool strv_env_is_valid(char **e) { - char **p, **q; - STRV_FOREACH(p, e) { size_t k; @@ -118,8 +116,6 @@ bool strv_env_is_valid(char **e) { } bool strv_env_name_is_valid(char **l) { - char **p; - STRV_FOREACH(p, l) { if (!env_name_is_valid(*p)) return false; @@ -132,8 +128,6 @@ bool strv_env_name_is_valid(char **l) { } bool strv_env_name_or_assignment_is_valid(char **l) { - char **p; - STRV_FOREACH(p, l) { if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p)) return false; @@ -275,7 +269,7 @@ static bool env_entry_has_name(const char *entry, const char *name) { char **strv_env_delete(char **x, size_t n_lists, ...) { size_t n, i = 0; - char **k, **r; + char **r; va_list ap; /* Deletes every entry from x that is mentioned in the other @@ -290,7 +284,7 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { STRV_FOREACH(k, x) { va_start(ap, n_lists); for (size_t v = 0; v < n_lists; v++) { - char **l, **j; + char **l; l = va_arg(ap, char**); STRV_FOREACH(j, l) @@ -382,7 +376,6 @@ char **strv_env_unset_many(char **l, ...) { int strv_env_replace_consume(char ***l, char *p) { const char *t, *name; - char **f; int r; assert(p); @@ -470,8 +463,6 @@ int strv_env_assign(char ***l, const char *key, const char *value) { } char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) { - char **i; - assert(name); if (k <= 0) @@ -499,7 +490,7 @@ char *strv_env_get(char **l, const char *name) { } char *strv_env_pairs_get(char **l, const char *name) { - char **key, **value, *result = NULL; + char *result = NULL; assert(name); @@ -511,7 +502,6 @@ char *strv_env_pairs_get(char **l, const char *name) { } char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) { - char **p, **q; int k = 0; STRV_FOREACH(p, e) { @@ -705,7 +695,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { } char **replace_env_argv(char **argv, char **env) { - char **ret, **i; + char **ret; size_t k = 0, l = 0; l = strv_length(argv); @@ -837,7 +827,6 @@ int setenv_systemd_exec_pid(bool update_only) { int getenv_path_list(const char *name, char ***ret_paths) { _cleanup_strv_free_ char **l = NULL; const char *e; - char **p; int r; assert(name); @@ -873,20 +862,37 @@ int getenv_path_list(const char *name, char ***ret_paths) { return 1; } -int unsetenv_erase(const char *name) { - char *p; +int getenv_steal_erase(const char *name, char **ret) { + _cleanup_(erase_and_freep) char *a = NULL; + char *e; assert(name); - p = getenv(name); - if (!p) + /* Reads an environment variable, makes a copy of it, erases its memory in the environment block and removes + * it from there. Usecase: reading passwords from the env block (which is a bad idea, but useful for + * testing, and given that people are likely going to misuse this, be thorough) */ + + e = getenv(name); + if (!e) { + if (ret) + *ret = NULL; return 0; + } + + if (ret) { + a = strdup(e); + if (!a) + return -ENOMEM; + } - string_erase(p); + string_erase(e); if (unsetenv(name) < 0) return -errno; + if (ret) + *ret = TAKE_PTR(a); + return 1; } #endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-shared/src/basic/env-util.h b/src/libnm-systemd-shared/src/basic/env-util.h index 38bfc8a3..2bf0603f 100644 --- a/src/libnm-systemd-shared/src/basic/env-util.h +++ b/src/libnm-systemd-shared/src/basic/env-util.h @@ -69,4 +69,4 @@ int setenv_systemd_exec_pid(bool update_only); * PATH-like colon-separated absolute paths */ int getenv_path_list(const char *name, char ***ret_paths); -int unsetenv_erase(const char *name); +int getenv_steal_erase(const char *name, char **ret); diff --git a/src/libnm-systemd-shared/src/basic/errno-util.h b/src/libnm-systemd-shared/src/basic/errno-util.h index 09abf0b7..648de50e 100644 --- a/src/libnm-systemd-shared/src/basic/errno-util.h +++ b/src/libnm-systemd-shared/src/basic/errno-util.h @@ -138,10 +138,18 @@ static inline bool ERRNO_IS_PRIVILEGE(int r) { EPERM); } -/* Three difference errors for "not enough disk space" */ +/* Three different errors for "not enough disk space" */ static inline bool ERRNO_IS_DISK_SPACE(int r) { return IN_SET(abs(r), ENOSPC, EDQUOT, EFBIG); } + +/* Three different errors for "this device does not quite exist" */ +static inline bool ERRNO_IS_DEVICE_ABSENT(int r) { + return IN_SET(abs(r), + ENODEV, + ENXIO, + ENOENT); +} diff --git a/src/libnm-systemd-shared/src/basic/escape.c b/src/libnm-systemd-shared/src/basic/escape.c index 4dfb9a16..cc317dfb 100644 --- a/src/libnm-systemd-shared/src/basic/escape.c +++ b/src/libnm-systemd-shared/src/basic/escape.c @@ -552,7 +552,6 @@ char* quote_command_line(char **argv, ShellEscapeFlags flags) { assert(argv); - char **a; STRV_FOREACH(a, argv) { _cleanup_free_ char *t = NULL; diff --git a/src/libnm-systemd-shared/src/basic/fd-util.c b/src/libnm-systemd-shared/src/basic/fd-util.c index c3df68de..53efeb40 100644 --- a/src/libnm-systemd-shared/src/basic/fd-util.c +++ b/src/libnm-systemd-shared/src/basic/fd-util.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,7 @@ #include "io-util.h" #include "macro.h" #include "missing_fcntl.h" +#include "missing_fs.h" #include "missing_syscall.h" #include "parse-util.h" #include "path-util.h" @@ -420,14 +422,11 @@ int same_fd(int a, int b) { assert(a >= 0); assert(b >= 0); - /* Compares two file descriptors. Note that semantics are - * quite different depending on whether we have kcmp() or we - * don't. If we have kcmp() this will only return true for - * dup()ed file descriptors, but not otherwise. If we don't - * have kcmp() this will also return true for two fds of the same - * file, created by separate open() calls. Since we use this - * call mostly for filtering out duplicates in the fd store - * this difference hopefully doesn't matter too much. */ + /* Compares two file descriptors. Note that semantics are quite different depending on whether we + * have kcmp() or we don't. If we have kcmp() this will only return true for dup()ed file + * descriptors, but not otherwise. If we don't have kcmp() this will also return true for two fds of + * the same file, created by separate open() calls. Since we use this call mostly for filtering out + * duplicates in the fd store this difference hopefully doesn't matter too much. */ if (a == b) return true; @@ -439,7 +438,7 @@ int same_fd(int a, int b) { return true; if (r > 0) return false; - if (!IN_SET(errno, ENOSYS, EACCES, EPERM)) + if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno)) return -errno; /* We don't have kcmp(), use fstat() instead. */ @@ -449,23 +448,17 @@ int same_fd(int a, int b) { if (fstat(b, &stb) < 0) return -errno; - if ((sta.st_mode & S_IFMT) != (stb.st_mode & S_IFMT)) + if (!stat_inode_same(&sta, &stb)) return false; - /* We consider all device fds different, since two device fds - * might refer to quite different device contexts even though - * they share the same inode and backing dev_t. */ + /* We consider all device fds different, since two device fds might refer to quite different device + * contexts even though they share the same inode and backing dev_t. */ if (S_ISCHR(sta.st_mode) || S_ISBLK(sta.st_mode)) return false; - if (sta.st_dev != stb.st_dev || sta.st_ino != stb.st_ino) - return false; - - /* The fds refer to the same inode on disk, let's also check - * if they have the same fd flags. This is useful to - * distinguish the read and write side of a pipe created with - * pipe(). */ + /* The fds refer to the same inode on disk, let's also check if they have the same fd flags. This is + * useful to distinguish the read and write side of a pipe created with pipe(). */ fa = fcntl(a, F_GETFL); if (fa < 0) return -errno; @@ -804,4 +797,25 @@ int btrfs_defrag_fd(int fd) { return RET_NERRNO(ioctl(fd, BTRFS_IOC_DEFRAG, NULL)); } + +int fd_get_diskseq(int fd, uint64_t *ret) { + uint64_t diskseq; + + assert(fd >= 0); + assert(ret); + + if (ioctl(fd, BLKGETDISKSEQ, &diskseq) < 0) { + /* Note that the kernel is weird: non-existing ioctls currently return EINVAL + * rather than ENOTTY on loopback block devices. They should fix that in the kernel, + * but in the meantime we accept both here. */ + if (!ERRNO_IS_NOT_SUPPORTED(errno) && errno != EINVAL) + return -errno; + + return -EOPNOTSUPP; + } + + *ret = diskseq; + + return 0; +} #endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-shared/src/basic/fd-util.h b/src/libnm-systemd-shared/src/basic/fd-util.h index f5cfcb4e..808cac4d 100644 --- a/src/libnm-systemd-shared/src/basic/fd-util.h +++ b/src/libnm-systemd-shared/src/basic/fd-util.h @@ -109,6 +109,7 @@ static inline int make_null_stdio(void) { int fd_reopen(int fd, int flags); int read_nr_open(void); int btrfs_defrag_fd(int fd); +int fd_get_diskseq(int fd, uint64_t *ret); /* The maximum length a buffer for a /proc/self/fd/ path needs */ #define PROC_FD_PATH_MAX \ diff --git a/src/libnm-systemd-shared/src/basic/fileio.c b/src/libnm-systemd-shared/src/basic/fileio.c index c66bc67b..0ad8ae03 100644 --- a/src/libnm-systemd-shared/src/basic/fileio.c +++ b/src/libnm-systemd-shared/src/basic/fileio.c @@ -1049,8 +1049,6 @@ static int search_and_fopen_internal( FILE **ret, char **ret_path) { - char **i; - assert(path); assert(mode); assert(ret); @@ -1204,7 +1202,7 @@ int write_timestamp_file_atomic(const char *fn, usec_t n) { /* Creates a "timestamp" file, that contains nothing but a * usec_t timestamp, formatted in ASCII. */ - if (n <= 0 || n >= USEC_INFINITY) + if (!timestamp_is_set(n)) return -ERANGE; xsprintf(ln, USEC_FMT "\n", n); @@ -1225,7 +1223,7 @@ int read_timestamp_file(const char *fn, usec_t *ret) { if (r < 0) return r; - if (t <= 0 || t >= (uint64_t) USEC_INFINITY) + if (!timestamp_is_set(t)) return -ERANGE; *ret = (usec_t) t; diff --git a/src/libnm-systemd-shared/src/basic/fileio.h b/src/libnm-systemd-shared/src/basic/fileio.h index cea3dd89..9151d823 100644 --- a/src/libnm-systemd-shared/src/basic/fileio.h +++ b/src/libnm-systemd-shared/src/basic/fileio.h @@ -110,6 +110,12 @@ typedef enum ReadLineFlags { int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret); +static inline bool file_offset_beyond_memory_size(off_t x) { + if (x < 0) /* off_t is signed, filter that out */ + return false; + return (uint64_t) x > (uint64_t) SIZE_MAX; +} + static inline int read_line(FILE *f, size_t limit, char **ret) { return read_line_full(f, limit, 0, ret); } diff --git a/src/libnm-systemd-shared/src/basic/fs-util.c b/src/libnm-systemd-shared/src/basic/fs-util.c index b524a6fd..dccfb27b 100644 --- a/src/libnm-systemd-shared/src/basic/fs-util.c +++ b/src/libnm-systemd-shared/src/basic/fs-util.c @@ -123,7 +123,6 @@ int readlinkat_malloc(int fd, const char *p, char **ret) { size_t l = PATH_MAX; assert(p); - assert(ret); for (;;) { _cleanup_free_ char *c = NULL; @@ -139,7 +138,10 @@ int readlinkat_malloc(int fd, const char *p, char **ret) { if ((size_t) n < l) { c[n] = 0; - *ret = TAKE_PTR(c); + + if (ret) + *ret = TAKE_PTR(c); + return 0; } @@ -576,7 +578,6 @@ int get_files_in_directory(const char *path, char ***list) { #endif /* NM_IGNORED */ static int getenv_tmp_dir(const char **ret_path) { - const char *n; int r, ret = 0; assert(ret_path); @@ -866,8 +867,7 @@ int conservative_renameat( if (fstat(new_fd, &new_stat) < 0) goto do_rename; - if (new_stat.st_ino == old_stat.st_ino && - new_stat.st_dev == old_stat.st_dev) + if (stat_inode_same(&new_stat, &old_stat)) goto is_same; if (old_stat.st_mode != new_stat.st_mode || @@ -1094,3 +1094,50 @@ int open_mkdir_at(int dirfd, const char *path, int flags, mode_t mode) { return TAKE_FD(fd); } + +int openat_report_new(int dirfd, const char *pathname, int flags, mode_t mode, bool *ret_newly_created) { + unsigned attempts = 7; + int fd; + + /* Just like openat(), but adds one thing: optionally returns whether we created the file anew or if + * it already existed before. This is only relevant if O_CREAT is set without O_EXCL, and thus will + * shortcut to openat() otherwise */ + + if (!ret_newly_created) + return RET_NERRNO(openat(dirfd, pathname, flags, mode)); + + if (!FLAGS_SET(flags, O_CREAT) || FLAGS_SET(flags, O_EXCL)) { + fd = openat(dirfd, pathname, flags, mode); + if (fd < 0) + return -errno; + + *ret_newly_created = FLAGS_SET(flags, O_CREAT); + return fd; + } + + for (;;) { + /* First, attempt to open without O_CREAT/O_EXCL, i.e. open existing file */ + fd = openat(dirfd, pathname, flags & ~(O_CREAT | O_EXCL), mode); + if (fd >= 0) { + *ret_newly_created = false; + return fd; + } + if (errno != ENOENT) + return -errno; + + /* So the file didn't exist yet, hence create it with O_CREAT/O_EXCL. */ + fd = openat(dirfd, pathname, flags | O_CREAT | O_EXCL, mode); + if (fd >= 0) { + *ret_newly_created = true; + return fd; + } + if (errno != EEXIST) + return -errno; + + /* Hmm, so now we got EEXIST? So it apparently exists now? If so, let's try to open again + * without the two flags. But let's not spin forever, hence put a limit on things */ + + if (--attempts == 0) /* Give up eventually, somebody is playing with us */ + return -EEXIST; + } +} diff --git a/src/libnm-systemd-shared/src/basic/fs-util.h b/src/libnm-systemd-shared/src/basic/fs-util.h index 0bbb3f62..e48cf680 100644 --- a/src/libnm-systemd-shared/src/basic/fs-util.h +++ b/src/libnm-systemd-shared/src/basic/fs-util.h @@ -110,3 +110,5 @@ int posix_fallocate_loop(int fd, uint64_t offset, uint64_t size); int parse_cifs_service(const char *s, char **ret_host, char **ret_service, char **ret_path); int open_mkdir_at(int dirfd, const char *path, int flags, mode_t mode); + +int openat_report_new(int dirfd, const char *pathname, int flags, mode_t mode, bool *ret_newly_created); diff --git a/src/libnm-systemd-shared/src/basic/hashmap.c b/src/libnm-systemd-shared/src/basic/hashmap.c index ee2a12e8..e7dedc6d 100644 --- a/src/libnm-systemd-shared/src/basic/hashmap.c +++ b/src/libnm-systemd-shared/src/basic/hashmap.c @@ -164,7 +164,7 @@ struct _packed_ indirect_storage { unsigned n_buckets; /* number of buckets */ unsigned idx_lowest_entry; /* Index below which all buckets are free. - Makes "while(hashmap_steal_first())" loops + Makes "while (hashmap_steal_first())" loops O(n) instead of O(n^2) for unordered hashmaps. */ uint8_t _pad[3]; /* padding for the whole HashmapBase */ /* The bitfields in HashmapBase complete the alignment of the whole thing. */ @@ -1868,7 +1868,6 @@ int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l HASHMAP_DEBUG_PARAMS) { int n = 0, r; - char **i; assert(s); diff --git a/src/libnm-systemd-shared/src/basic/hexdecoct.c b/src/libnm-systemd-shared/src/basic/hexdecoct.c index 381e79ba..570da688 100644 --- a/src/libnm-systemd-shared/src/basic/hexdecoct.c +++ b/src/libnm-systemd-shared/src/basic/hexdecoct.c @@ -688,8 +688,7 @@ static int base64_append_width( s += indent; } - memcpy(s, x + width * line, act); - s += act; + s = mempcpy(s, x + width * line, act); *(s++) = line < lines - 1 ? '\n' : '\0'; avail -= act; } diff --git a/src/libnm-systemd-shared/src/basic/hostname-util.c b/src/libnm-systemd-shared/src/basic/hostname-util.c index 1d1c2f51..692733ac 100644 --- a/src/libnm-systemd-shared/src/basic/hostname-util.c +++ b/src/libnm-systemd-shared/src/basic/hostname-util.c @@ -10,6 +10,7 @@ #include #include "alloc-util.h" +#include "env-file.h" #include "hostname-util.h" #include "os-util.h" #include "string-util.h" @@ -197,3 +198,20 @@ bool is_localhost(const char *hostname) { endswith_no_case(hostname, ".localhost.localdomain") || endswith_no_case(hostname, ".localhost.localdomain."); } + +int get_pretty_hostname(char **ret) { + _cleanup_free_ char *n = NULL; + int r; + + assert(ret); + + r = parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &n); + if (r < 0) + return r; + + if (isempty(n)) + return -ENXIO; + + *ret = TAKE_PTR(n); + return 0; +} diff --git a/src/libnm-systemd-shared/src/basic/hostname-util.h b/src/libnm-systemd-shared/src/basic/hostname-util.h index d435bed5..a00b8523 100644 --- a/src/libnm-systemd-shared/src/basic/hostname-util.h +++ b/src/libnm-systemd-shared/src/basic/hostname-util.h @@ -4,7 +4,6 @@ #include #include -#include "env-file.h" #include "macro.h" #include "strv.h" @@ -61,6 +60,4 @@ static inline bool is_outbound_hostname(const char *hostname) { return STRCASE_IN_SET(hostname, "_outbound", "_outbound."); } -static inline int get_pretty_hostname(char **ret) { - return parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", ret); -} +int get_pretty_hostname(char **ret); diff --git a/src/libnm-systemd-shared/src/basic/in-addr-util.c b/src/libnm-systemd-shared/src/basic/in-addr-util.c index 1bf0764d..51a6b165 100644 --- a/src/libnm-systemd-shared/src/basic/in-addr-util.c +++ b/src/libnm-systemd-shared/src/basic/in-addr-util.c @@ -123,6 +123,19 @@ int in_addr_is_localhost(int family, const union in_addr_union *u) { return -EAFNOSUPPORT; } +int in_addr_is_localhost_one(int family, const union in_addr_union *u) { + assert(u); + + if (family == AF_INET) + /* 127.0.0.1 */ + return be32toh(u->in.s_addr) == UINT32_C(0x7F000001); + + if (family == AF_INET6) + return IN6_IS_ADDR_LOOPBACK(&u->in6); /* lgtm [cpp/potentially-dangerous-function] */ + + return -EAFNOSUPPORT; +} + bool in6_addr_is_ipv4_mapped_address(const struct in6_addr *a) { return a->s6_addr32[0] == 0 && a->s6_addr32[1] == 0 && diff --git a/src/libnm-systemd-shared/src/basic/in-addr-util.h b/src/libnm-systemd-shared/src/basic/in-addr-util.h index 0178391e..5de87a95 100644 --- a/src/libnm-systemd-shared/src/basic/in-addr-util.h +++ b/src/libnm-systemd-shared/src/basic/in-addr-util.h @@ -49,6 +49,7 @@ bool in6_addr_is_link_local_all_nodes(const struct in6_addr *a); bool in4_addr_is_localhost(const struct in_addr *a); int in_addr_is_localhost(int family, const union in_addr_union *u); +int in_addr_is_localhost_one(int family, const union in_addr_union *u); bool in4_addr_is_local_multicast(const struct in_addr *a); bool in4_addr_is_non_local(const struct in_addr *a); diff --git a/src/libnm-systemd-shared/src/basic/inotify-util.h b/src/libnm-systemd-shared/src/basic/inotify-util.h index 88af0868..61951ff3 100644 --- a/src/libnm-systemd-shared/src/basic/inotify-util.h +++ b/src/libnm-systemd-shared/src/basic/inotify-util.h @@ -6,12 +6,28 @@ #include #include +#include "log.h" + #define INOTIFY_EVENT_MAX (offsetof(struct inotify_event, name) + NAME_MAX + 1) -#define FOREACH_INOTIFY_EVENT(e, buffer, sz) \ - for ((e) = &buffer.ev; \ - (uint8_t*) (e) < (uint8_t*) (buffer.raw) + (sz); \ - (e) = (struct inotify_event*) ((uint8_t*) (e) + sizeof(struct inotify_event) + (e)->len)) +#define _FOREACH_INOTIFY_EVENT(e, buffer, sz, log_level, start, end) \ + for (struct inotify_event \ + *start = &((buffer).ev), \ + *end = (struct inotify_event*) ((uint8_t*) start + (sz)), \ + *e = start; \ + (size_t) ((uint8_t*) end - (uint8_t*) e) >= sizeof(struct inotify_event) && \ + ((size_t) ((uint8_t*) end - (uint8_t*) e) >= sizeof(struct inotify_event) + e->len || \ + (log_full(log_level, "Received invalid inotify event, ignoring."), false)); \ + e = (struct inotify_event*) ((uint8_t*) e + sizeof(struct inotify_event) + e->len)) + +#define _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, log_level) \ + _FOREACH_INOTIFY_EVENT(e, buffer, sz, log_level, UNIQ_T(start, UNIQ), UNIQ_T(end, UNIQ)) + +#define FOREACH_INOTIFY_EVENT(e, buffer, sz) \ + _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, LOG_DEBUG) + +#define FOREACH_INOTIFY_EVENT_WARN(e, buffer, sz) \ + _FOREACH_INOTIFY_EVENT_FULL(e, buffer, sz, LOG_WARNING) union inotify_event_buffer { struct inotify_event ev; diff --git a/src/libnm-systemd-shared/src/basic/io-util.c b/src/libnm-systemd-shared/src/basic/io-util.c index d5cbb899..8a2b9c2f 100644 --- a/src/libnm-systemd-shared/src/basic/io-util.c +++ b/src/libnm-systemd-shared/src/basic/io-util.c @@ -165,7 +165,6 @@ int pipe_eof(int fd) { #endif /* NM_IGNORED */ int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) { - struct timespec ts; int r; assert(fds || nfds == 0); @@ -173,7 +172,7 @@ int ppoll_usec(struct pollfd *fds, size_t nfds, usec_t timeout) { if (nfds == 0) return 0; - r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : timespec_store(&ts, timeout), NULL); + r = ppoll(fds, nfds, timeout == USEC_INFINITY ? NULL : TIMESPEC_STORE(timeout), NULL); if (r < 0) return -errno; if (r == 0) diff --git a/src/libnm-systemd-shared/src/basic/list.h b/src/libnm-systemd-shared/src/basic/list.h index f827e721..58e83a6c 100644 --- a/src/libnm-systemd-shared/src/basic/list.h +++ b/src/libnm-systemd-shared/src/basic/list.h @@ -136,33 +136,39 @@ #define LIST_JUST_US(name,item) \ (!(item)->name##_prev && !(item)->name##_next) +/* The type of the iterator 'i' is automatically determined by the type of 'head', and declared in the + * loop. Hence, do not declare the same variable in the outer scope. Sometimes, we set 'head' through + * hashmap_get(). In that case, you need to explicitly cast the result. */ +#define LIST_FOREACH_WITH_NEXT(name,i,n,head) \ + for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n) + #define LIST_FOREACH(name,i,head) \ - for ((i) = (head); (i); (i) = (i)->name##_next) + LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head) -#define LIST_FOREACH_SAFE(name,i,n,head) \ - for ((i) = (head); (i) && (((n) = (i)->name##_next), 1); (i) = (n)) +#define _LIST_FOREACH_WITH_PREV(name,i,p,start) \ + for (typeof(*(start)) *p, *i = (start); i && (p = i->name##_prev, true); i = p) -#define LIST_FOREACH_BACKWARDS(name,i,p) \ - for ((i) = (p); (i); (i) = (i)->name##_prev) +#define LIST_FOREACH_BACKWARDS(name,i,start) \ + _LIST_FOREACH_WITH_PREV(name, i, UNIQ_T(p, UNIQ), start) /* Iterate through all the members of the list p is included in, but skip over p */ #define LIST_FOREACH_OTHERS(name,i,p) \ - for (({ \ - (i) = (p); \ - while ((i) && (i)->name##_prev) \ - (i) = (i)->name##_prev; \ - if ((i) == (p)) \ - (i) = (p)->name##_next; \ - }); \ - (i); \ - (i) = (i)->name##_next == (p) ? (p)->name##_next : (i)->name##_next) - -/* Loop starting from p->next until p->prev. - p can be adjusted meanwhile. */ + for (typeof(*(p)) *_p = (p), *i = ({ \ + typeof(*_p) *_j = _p; \ + while (_j && _j->name##_prev) \ + _j = _j->name##_prev; \ + if (_j == _p) \ + _j = _p->name##_next; \ + _j; \ + }); \ + i; \ + i = i->name##_next == _p ? _p->name##_next : i->name##_next) + +/* Loop starting from p->next until p->prev. p can be adjusted meanwhile. */ #define LIST_LOOP_BUT_ONE(name,i,head,p) \ - for ((i) = (p)->name##_next ? (p)->name##_next : (head); \ - (i) != (p); \ - (i) = (i)->name##_next ? (i)->name##_next : (head)) + for (typeof(*(p)) *i = (p)->name##_next ? (p)->name##_next : (head); \ + i != (p); \ + i = i->name##_next ? i->name##_next : (head)) #define LIST_IS_EMPTY(head) \ (!(head)) diff --git a/src/libnm-systemd-shared/src/basic/log.h b/src/libnm-systemd-shared/src/basic/log.h index 88d278fd..6361eb0f 100644 --- a/src/libnm-systemd-shared/src/basic/log.h +++ b/src/libnm-systemd-shared/src/basic/log.h @@ -409,9 +409,11 @@ int log_emergency_level(void); }) #if LOG_TRACE -# define log_trace(...) log_debug(__VA_ARGS__) +# define log_trace(...) log_debug(__VA_ARGS__) +# define log_trace_errno(...) log_debug_errno(__VA_ARGS__) #else -# define log_trace(...) do {} while (0) +# define log_trace(...) do {} while (0) +# define log_trace_errno(e, ...) (-ERRNO_VALUE(e)) #endif /* Structured logging */ diff --git a/src/libnm-systemd-shared/src/basic/macro.h b/src/libnm-systemd-shared/src/basic/macro.h index 79437775..41d83b3e 100644 --- a/src/libnm-systemd-shared/src/basic/macro.h +++ b/src/libnm-systemd-shared/src/basic/macro.h @@ -318,23 +318,32 @@ static inline int __coverity_check_and_return__(int condition) { #define sizeof_field(struct_type, member) sizeof(((struct_type *) 0)->member) -/* Returns the number of chars needed to format variables of the - * specified type as a decimal string. Adds in extra space for a - * negative '-' prefix (hence works correctly on signed - * types). Includes space for the trailing NUL. */ +/* Returns the number of chars needed to format variables of the specified type as a decimal string. Adds in + * extra space for a negative '-' prefix for signed types. Includes space for the trailing NUL. */ #define DECIMAL_STR_MAX(type) \ - (2U+(sizeof(type) <= 1 ? 3U : \ + ((size_t) IS_SIGNED_INTEGER_TYPE(type) + 1U + \ + (sizeof(type) <= 1 ? 3U : \ sizeof(type) <= 2 ? 5U : \ sizeof(type) <= 4 ? 10U : \ - sizeof(type) <= 8 ? 20U : sizeof(int[-2*(sizeof(type) > 8)]))) - -#define DECIMAL_STR_WIDTH(x) \ - ({ \ - typeof(x) _x_ = (x); \ - size_t ans = 1; \ - while ((_x_ /= 10) != 0) \ - ans++; \ - ans; \ + sizeof(type) <= 8 ? (IS_SIGNED_INTEGER_TYPE(type) ? 19U : 20U) : sizeof(int[-2*(sizeof(type) > 8)]))) + +/* Returns the number of chars needed to format the specified integer value. It's hence more specific than + * DECIMAL_STR_MAX() which answers the same question for all possible values of the specified type. Does + * *not* include space for a trailing NUL. (If you wonder why we special case _x_ == 0 here: it's to trick + * out gcc's -Wtype-limits, which would complain on comparing an unsigned type with < 0, otherwise. By + * special-casing == 0 here first, we can use <= 0 instead of < 0 to trick out gcc.) */ +#define DECIMAL_STR_WIDTH(x) \ + ({ \ + typeof(x) _x_ = (x); \ + size_t ans; \ + if (_x_ == 0) \ + ans = 1; \ + else { \ + ans = _x_ <= 0 ? 2 : 1; \ + while ((_x_ /= 10) != 0) \ + ans++; \ + } \ + ans; \ }) #define SWAP_TWO(x, y) do { \ @@ -463,4 +472,20 @@ typedef struct { assert_cc(sizeof(dummy_t) == 0); +/* A little helper for subtracting 1 off a pointer in a safe UB-free way. This is intended to be used for for + * loops that count down from a high pointer until some base. A naive loop would implement this like this: + * + * for (p = end-1; p >= base; p--) … + * + * But this is not safe because p before the base is UB in C. With this macro the loop becomes this instead: + * + * for (p = PTR_SUB1(end, base); p; p = PTR_SUB1(p, base)) … + * + * And is free from UB! */ +#define PTR_SUB1(p, base) \ + ({ \ + typeof(p) _q = (p); \ + _q && _q > (base) ? &_q[-1] : NULL; \ + }) + #include "log.h" diff --git a/src/libnm-systemd-shared/src/basic/memory-util.h b/src/libnm-systemd-shared/src/basic/memory-util.h index 9f37431f..6e3280b9 100644 --- a/src/libnm-systemd-shared/src/basic/memory-util.h +++ b/src/libnm-systemd-shared/src/basic/memory-util.h @@ -15,7 +15,7 @@ size_t page_size(void) _pure_; #define PAGE_ALIGN_DOWN(l) ((l) & ~(page_size() - 1)) #define PAGE_OFFSET(l) ((l) & (page_size() - 1)) -/* Normal memcpy requires src to be nonnull. We do nothing if n is 0. */ +/* Normal memcpy() requires src to be nonnull. We do nothing if n is 0. */ static inline void *memcpy_safe(void *dst, const void *src, size_t n) { if (n == 0) return dst; @@ -23,7 +23,15 @@ static inline void *memcpy_safe(void *dst, const void *src, size_t n) { return memcpy(dst, src, n); } -/* Normal memcmp requires s1 and s2 to be nonnull. We do nothing if n is 0. */ +/* Normal mempcpy() requires src to be nonnull. We do nothing if n is 0. */ +static inline void *mempcpy_safe(void *dst, const void *src, size_t n) { + if (n == 0) + return dst; + assert(src); + return mempcpy(dst, src, n); +} + +/* Normal memcmp() requires s1 and s2 to be nonnull. We do nothing if n is 0. */ static inline int memcmp_safe(const void *s1, const void *s2, size_t n) { if (n == 0) return 0; diff --git a/src/libnm-systemd-shared/src/basic/missing_syscall.h b/src/libnm-systemd-shared/src/basic/missing_syscall.h index 41c83ec5..e5bdc0e1 100644 --- a/src/libnm-systemd-shared/src/basic/missing_syscall.h +++ b/src/libnm-systemd-shared/src/basic/missing_syscall.h @@ -574,6 +574,10 @@ static inline int missing_open_tree( #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */ #endif +#ifndef MOVE_MOUNT_T_EMPTY_PATH +#define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */ +#endif + static inline int missing_move_mount( int from_dfd, const char *from_pathname, diff --git a/src/libnm-systemd-shared/src/basic/ordered-set.c b/src/libnm-systemd-shared/src/basic/ordered-set.c index 62a36b5d..f402bb5b 100644 --- a/src/libnm-systemd-shared/src/basic/ordered-set.c +++ b/src/libnm-systemd-shared/src/basic/ordered-set.c @@ -60,7 +60,6 @@ int _ordered_set_put_strdup(OrderedSet **s, const char *p HASHMAP_DEBUG_PARAMS) int _ordered_set_put_strdupv(OrderedSet **s, char **l HASHMAP_DEBUG_PARAMS) { int n = 0, r; - char **i; STRV_FOREACH(i, l) { r = _ordered_set_put_strdup(s, *i HASHMAP_DEBUG_PASS_ARGS); diff --git a/src/libnm-systemd-shared/src/basic/ordered-set.h b/src/libnm-systemd-shared/src/basic/ordered-set.h index 3ee47350..c0650e01 100644 --- a/src/libnm-systemd-shared/src/basic/ordered-set.h +++ b/src/libnm-systemd-shared/src/basic/ordered-set.h @@ -18,6 +18,14 @@ int _ordered_set_ensure_allocated(OrderedSet **s, const struct hash_ops *ops HA int _ordered_set_ensure_put(OrderedSet **s, const struct hash_ops *ops, void *p HASHMAP_DEBUG_PARAMS); #define ordered_set_ensure_put(s, hash_ops, key) _ordered_set_ensure_put(s, hash_ops, key HASHMAP_DEBUG_SRC_ARGS) +static inline void ordered_set_clear(OrderedSet *s) { + return ordered_hashmap_clear((OrderedHashmap*) s); +} + +static inline void ordered_set_clear_free(OrderedSet *s) { + return ordered_hashmap_clear_free((OrderedHashmap*) s); +} + static inline OrderedSet* ordered_set_free(OrderedSet *s) { return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s); } diff --git a/src/libnm-systemd-shared/src/basic/parse-util.c b/src/libnm-systemd-shared/src/basic/parse-util.c index 4ba2657c..0a623c51 100644 --- a/src/libnm-systemd-shared/src/basic/parse-util.c +++ b/src/libnm-systemd-shared/src/basic/parse-util.c @@ -421,7 +421,7 @@ int safe_atoi(const char *s, int *ret_i) { return 0; } -int safe_atollu_full(const char *s, unsigned base, long long unsigned *ret_llu) { +int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu) { char *x = NULL; unsigned long long l; diff --git a/src/libnm-systemd-shared/src/basic/parse-util.h b/src/libnm-systemd-shared/src/basic/parse-util.h index 3dc5e140..82731246 100644 --- a/src/libnm-systemd-shared/src/basic/parse-util.h +++ b/src/libnm-systemd-shared/src/basic/parse-util.h @@ -65,9 +65,9 @@ static inline int safe_atoi32(const char *s, int32_t *ret_i) { return safe_atoi(s, (int*) ret_i); } -int safe_atollu_full(const char *s, unsigned base, long long unsigned *ret_llu); +int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu); -static inline int safe_atollu(const char *s, long long unsigned *ret_llu) { +static inline int safe_atollu(const char *s, unsigned long long *ret_llu) { return safe_atollu_full(s, 0, ret_llu); } @@ -82,12 +82,12 @@ static inline int safe_atoi64(const char *s, int64_t *ret_i) { } static inline int safe_atoux64(const char *s, uint64_t *ret) { - assert_cc(sizeof(int64_t) == sizeof(long long unsigned)); - return safe_atollu_full(s, 16, (long long unsigned*) ret); + assert_cc(sizeof(int64_t) == sizeof(unsigned long long)); + return safe_atollu_full(s, 16, (unsigned long long*) ret); } #if LONG_MAX == INT_MAX -static inline int safe_atolu_full(const char *s, unsigned base, long unsigned *ret_u) { +static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *ret_u) { assert_cc(sizeof(unsigned long) == sizeof(unsigned)); return safe_atou_full(s, base, (unsigned*) ret_u); } @@ -117,7 +117,7 @@ static inline int safe_atozu(const char *s, size_t *ret_u) { } #else static inline int safe_atozu(const char *s, size_t *ret_u) { - assert_cc(sizeof(size_t) == sizeof(long unsigned)); + assert_cc(sizeof(size_t) == sizeof(unsigned long)); return safe_atolu(s, ret_u); } #endif diff --git a/src/libnm-systemd-shared/src/basic/path-util.c b/src/libnm-systemd-shared/src/basic/path-util.c index f391848f..f6088458 100644 --- a/src/libnm-systemd-shared/src/basic/path-util.c +++ b/src/libnm-systemd-shared/src/basic/path-util.c @@ -66,7 +66,7 @@ char *path_make_absolute(const char *p, const char *prefix) { } int safe_getcwd(char **ret) { - char *cwd; + _cleanup_free_ char *cwd = NULL; cwd = get_current_dir_name(); if (!cwd) @@ -74,12 +74,12 @@ int safe_getcwd(char **ret) { /* Let's make sure the directory is really absolute, to protect us from the logic behind * CVE-2018-1000001 */ - if (cwd[0] != '/') { - free(cwd); + if (cwd[0] != '/') return -ENOMEDIUM; - } - *ret = cwd; + if (ret) + *ret = TAKE_PTR(cwd); + return 0; } @@ -205,9 +205,9 @@ int path_make_relative(const char *from, const char *to, char **ret) { } char* path_startswith_strv(const char *p, char **set) { - char **s, *t; - STRV_FOREACH(s, set) { + char *t; + t = path_startswith(p, *s); if (t) return t; @@ -217,7 +217,6 @@ char* path_startswith_strv(const char *p, char **set) { } int path_strv_make_absolute_cwd(char **l) { - char **s; int r; /* Goes through every item in the string list and makes it @@ -239,7 +238,6 @@ int path_strv_make_absolute_cwd(char **l) { } char **path_strv_resolve(char **l, const char *root) { - char **s; unsigned k = 0; bool enomem = false; int r; @@ -707,12 +705,12 @@ int find_executable_full(const char *name, const char *root, char **exec_search_ p = DEFAULT_PATH; if (exec_search_path) { - char **element; - STRV_FOREACH(element, exec_search_path) { _cleanup_free_ char *full_path = NULL; + if (!path_is_absolute(*element)) continue; + full_path = path_join(*element, name); if (!full_path) return -ENOMEM; @@ -761,7 +759,6 @@ int find_executable_full(const char *name, const char *root, char **exec_search_ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) { bool changed = false, originally_unset; - const char* const* i; assert(timestamp); @@ -940,8 +937,9 @@ int path_find_first_component(const char **p, bool accept_dot_dot, const char ** static const char *skip_slash_or_dot_backward(const char *path, const char *q) { assert(path); + assert(!q || q >= path); - for (; q >= path; q--) { + for (; q; q = PTR_SUB1(q, path)) { if (*q == '/') continue; if (q > path && strneq(q - 1, "/.", 2)) @@ -1006,7 +1004,7 @@ int path_find_last_component(const char *path, bool accept_dot_dot, const char * q = path + strlen(path) - 1; q = skip_slash_or_dot_backward(path, q); - if ((q < path) || /* the root directory */ + if (!q || /* the root directory */ (q == path && *q == '.')) { /* path is "." or "./" */ if (next) *next = path; @@ -1017,10 +1015,10 @@ int path_find_last_component(const char *path, bool accept_dot_dot, const char * last_end = q + 1; - while (q >= path && *q != '/') - q--; + while (q && *q != '/') + q = PTR_SUB1(q, path); - last_begin = q + 1; + last_begin = q ? q + 1 : path; len = last_end - last_begin; if (len > NAME_MAX) @@ -1030,10 +1028,7 @@ int path_find_last_component(const char *path, bool accept_dot_dot, const char * if (next) { q = skip_slash_or_dot_backward(path, q); - if (q < path) - *next = path; - else - *next = q + 1; + *next = q ? q + 1 : path; } if (ret) @@ -1249,9 +1244,10 @@ bool hidden_or_backup_file(const char *filename) { assert(filename); if (filename[0] == '.' || - streq(filename, "lost+found") || - streq(filename, "aquota.user") || - streq(filename, "aquota.group") || + STR_IN_SET(filename, + "lost+found", + "aquota.user", + "aquota.group") || endswith(filename, "~")) return true; @@ -1348,7 +1344,7 @@ int systemd_installation_has_version(const char *root, unsigned minimal_version) _cleanup_strv_free_ char **names = NULL; _cleanup_free_ char *path = NULL; - char *c, **name; + char *c; path = path_join(root, pattern); if (!path) @@ -1422,8 +1418,6 @@ bool empty_or_root(const char *path) { } bool path_strv_contains(char **l, const char *path) { - char **i; - STRV_FOREACH(i, l) if (path_equal(*i, path)) return true; @@ -1432,10 +1426,9 @@ bool path_strv_contains(char **l, const char *path) { } bool prefixed_path_strv_contains(char **l, const char *path) { - char **i, *j; - STRV_FOREACH(i, l) { - j = *i; + const char *j = *i; + if (*j == '-') j++; if (*j == '+') diff --git a/src/libnm-systemd-shared/src/basic/process-util.c b/src/libnm-systemd-shared/src/basic/process-util.c index 70564bd3..83e3a71e 100644 --- a/src/libnm-systemd-shared/src/basic/process-util.c +++ b/src/libnm-systemd-shared/src/basic/process-util.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -220,7 +221,6 @@ int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags assert(!(flags & PROCESS_CMDLINE_USE_LOCALE)); _cleanup_strv_free_ char **args = NULL; - char **p; args = strv_parse_nulstr(t, k); if (!args) @@ -478,37 +478,33 @@ int get_process_capeff(pid_t pid, char **ret) { return r; } -static int get_process_link_contents(const char *proc_file, char **ret) { +static int get_process_link_contents(pid_t pid, const char *proc_file, char **ret) { + const char *p; int r; assert(proc_file); - assert(ret); - r = readlink_malloc(proc_file, ret); - if (r == -ENOENT) - return -ESRCH; - if (r < 0) - return r; + p = procfs_file_alloca(pid, proc_file); - return 0; + r = readlink_malloc(p, ret); + return r == -ENOENT ? -ESRCH : r; } int get_process_exe(pid_t pid, char **ret) { - const char *p; char *d; int r; assert(pid >= 0); - assert(ret); - p = procfs_file_alloca(pid, "exe"); - r = get_process_link_contents(p, ret); + r = get_process_link_contents(pid, "exe", ret); if (r < 0) return r; - d = endswith(*ret, " (deleted)"); - if (d) - *d = '\0'; + if (ret) { + d = endswith(*ret, " (deleted)"); + if (d) + *d = '\0'; + } return 0; } @@ -578,28 +574,17 @@ int get_process_gid(pid_t pid, gid_t *ret) { } int get_process_cwd(pid_t pid, char **ret) { - const char *p; - assert(pid >= 0); - assert(ret); if (pid == 0 || pid == getpid_cached()) return safe_getcwd(ret); - p = procfs_file_alloca(pid, "cwd"); - - return get_process_link_contents(p, ret); + return get_process_link_contents(pid, "cwd", ret); } int get_process_root(pid_t pid, char **ret) { - const char *p; - assert(pid >= 0); - assert(ret); - - p = procfs_file_alloca(pid, "root"); - - return get_process_link_contents(p, ret); + return get_process_link_contents(pid, "root", ret); } #define ENVIRONMENT_BLOCK_MAX (5U*1024U*1024U) @@ -651,7 +636,7 @@ int get_process_environ(pid_t pid, char **ret) { int get_process_ppid(pid_t pid, pid_t *ret) { _cleanup_free_ char *line = NULL; - long unsigned ppid; + unsigned long ppid; const char *p; int r; @@ -694,7 +679,7 @@ int get_process_ppid(pid_t pid, pid_t *ret) { if (ppid == 0) return -EADDRNOTAVAIL; - if ((pid_t) ppid < 0 || (long unsigned) (pid_t) ppid != ppid) + if ((pid_t) ppid < 0 || (unsigned long) (pid_t) ppid != ppid) return -ERANGE; if (ret) @@ -825,13 +810,12 @@ int wait_for_terminate_with_timeout(pid_t pid, usec_t timeout) { for (;;) { usec_t n; siginfo_t status = {}; - struct timespec ts; n = now(CLOCK_MONOTONIC); if (n >= until) break; - r = RET_NERRNO(sigtimedwait(&mask, NULL, timespec_store(&ts, until - n))); + r = RET_NERRNO(sigtimedwait(&mask, NULL, TIMESPEC_STORE(until - n))); /* Assuming we woke due to the child exiting. */ if (waitid(P_PID, pid, &status, WEXITED|WNOHANG) == 0) { if (status.si_pid == pid) { @@ -1170,12 +1154,6 @@ void reset_cached_pid(void) { cached_pid = CACHED_PID_UNSET; } -/* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc - * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against - * libpthread, as it is part of glibc anyway. */ -extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle); -extern void* __dso_handle _weak_; - pid_t getpid_cached(void) { static bool installed = false; pid_t current_value; @@ -1203,7 +1181,7 @@ pid_t getpid_cached(void) { * only half-documented (glibc doesn't document it but LSB does — though only superficially) * we'll check for errors only in the most generic fashion possible. */ - if (__register_atfork(NULL, NULL, reset_cached_pid, __dso_handle) != 0) { + if (pthread_atfork(NULL, NULL, reset_cached_pid) != 0) { /* OOM? Let's try again later */ cached_pid = CACHED_PID_UNSET; return new_pid; @@ -1632,6 +1610,30 @@ _noreturn_ void freeze(void) { pause(); } +bool argv_looks_like_help(int argc, char **argv) { + char **l; + + /* Scans the command line for indications the user asks for help. This is supposed to be called by + * tools that do not implement getopt() style command line parsing because they are not primarily + * user-facing. Detects four ways of asking for help: + * + * 1. Passing zero arguments + * 2. Passing "help" as first argument + * 3. Passing --help as any argument + * 4. Passing -h as any argument + */ + + if (argc <= 1) + return true; + + if (streq_ptr(argv[1], "help")) + return true; + + l = strv_skip(argv, 1); + + return strv_contains(l, "--help") || + strv_contains(l, "-h"); +} static const char *const sigchld_code_table[] = { [CLD_EXITED] = "exited", diff --git a/src/libnm-systemd-shared/src/basic/process-util.h b/src/libnm-systemd-shared/src/basic/process-util.h index a957cab2..c488c6a8 100644 --- a/src/libnm-systemd-shared/src/basic/process-util.h +++ b/src/libnm-systemd-shared/src/basic/process-util.h @@ -193,3 +193,5 @@ int setpriority_closest(int priority); bool invoked_as(char *argv[], const char *token); _noreturn_ void freeze(void); + +bool argv_looks_like_help(int argc, char **argv); diff --git a/src/libnm-systemd-shared/src/basic/random-util.c b/src/libnm-systemd-shared/src/basic/random-util.c index 9832f8ef..e3f4ee72 100644 --- a/src/libnm-systemd-shared/src/basic/random-util.c +++ b/src/libnm-systemd-shared/src/basic/random-util.c @@ -37,225 +37,41 @@ static bool srand_called = false; -int rdrand(unsigned long *ret) { - - /* So, you are a "security researcher", and you wonder why we bother with using raw RDRAND here, - * instead of sticking to /dev/urandom or getrandom()? - * - * Here's why: early boot. On Linux, during early boot the random pool that backs /dev/urandom and - * getrandom() is generally not initialized yet. It is very common that initialization of the random - * pool takes a longer time (up to many minutes), in particular on embedded devices that have no - * explicit hardware random generator, as well as in virtualized environments such as major cloud - * installations that do not provide virtio-rng or a similar mechanism. - * - * In such an environment using getrandom() synchronously means we'd block the entire system boot-up - * until the pool is initialized, i.e. *very* long. Using getrandom() asynchronously (GRND_NONBLOCK) - * would mean acquiring randomness during early boot would simply fail. Using /dev/urandom would mean - * generating many kmsg log messages about our use of it before the random pool is properly - * initialized. Neither of these outcomes is desirable. - * - * Thus, for very specific purposes we use RDRAND instead of either of these three options. RDRAND - * provides us quickly and relatively reliably with random values, without having to delay boot, - * without triggering warning messages in kmsg. - * - * Note that we use RDRAND only under very specific circumstances, when the requirements on the - * quality of the returned entropy permit it. Specifically, here are some cases where we *do* use - * RDRAND: - * - * • UUID generation: UUIDs are supposed to be universally unique but are not cryptographic - * key material. The quality and trust level of RDRAND should hence be OK: UUIDs should be - * generated in a way that is reliably unique, but they do not require ultimate trust into - * the entropy generator. systemd generates a number of UUIDs during early boot, including - * 'invocation IDs' for every unit spawned that identify the specific invocation of the - * service globally, and a number of others. Other alternatives for generating these UUIDs - * have been considered, but don't really work: for example, hashing uuids from a local - * system identifier combined with a counter falls flat because during early boot disk - * storage is not yet available (think: initrd) and thus a system-specific ID cannot be - * stored or retrieved yet. - * - * • Hash table seed generation: systemd uses many hash tables internally. Hash tables are - * generally assumed to have O(1) access complexity, but can deteriorate to prohibitive - * O(n) access complexity if an attacker manages to trigger a large number of hash - * collisions. Thus, systemd (as any software employing hash tables should) uses seeded - * hash functions for its hash tables, with a seed generated randomly. The hash tables - * systemd employs watch the fill level closely and reseed if necessary. This allows use of - * a low quality RNG initially, as long as it improves should a hash table be under attack: - * the attacker after all needs to trigger many collisions to exploit it for the purpose - * of DoS, but if doing so improves the seed the attack surface is reduced as the attack - * takes place. - * - * Some cases where we do NOT use RDRAND are: - * - * • Generation of cryptographic key material 🔑 - * - * • Generation of cryptographic salt values 🧂 - * - * This function returns: - * - * -EOPNOTSUPP → RDRAND is not available on this system 😔 - * -EAGAIN → The operation failed this time, but is likely to work if you try again a few - * times ♻ - * -EUCLEAN → We got some random value, but it looked strange, so we refused using it. - * This failure might or might not be temporary. 😕 - */ - -#if defined(__i386__) || defined(__x86_64__) - static int have_rdrand = -1; - unsigned long v; - uint8_t success; - - if (have_rdrand < 0) { - uint32_t eax, ebx, ecx, edx; - - /* Check if RDRAND is supported by the CPU */ - if (__get_cpuid(1, &eax, &ebx, &ecx, &edx) == 0) { - have_rdrand = false; - return -EOPNOTSUPP; - } - -/* Compat with old gcc where bit_RDRND didn't exist yet */ -#ifndef bit_RDRND -#define bit_RDRND (1U << 30) -#endif - - have_rdrand = !!(ecx & bit_RDRND); - - if (have_rdrand > 0) { - /* Allow disabling use of RDRAND with SYSTEMD_RDRAND=0 - If it is unset getenv_bool_secure will return a negative value. */ - if (getenv_bool_secure("SYSTEMD_RDRAND") == 0) { - have_rdrand = false; - return -EOPNOTSUPP; - } - } - } - - if (have_rdrand == 0) - return -EOPNOTSUPP; - - asm volatile("rdrand %0;" - "setc %1" - : "=r" (v), - "=qm" (success)); - msan_unpoison(&success, sizeof(success)); - if (!success) - return -EAGAIN; - - /* Apparently on some AMD CPUs RDRAND will sometimes (after a suspend/resume cycle?) report success - * via the carry flag but nonetheless return the same fixed value -1 in all cases. This appears to be - * a bad bug in the CPU or firmware. Let's deal with that and work-around this by explicitly checking - * for this special value (and also 0, just to be sure) and filtering it out. This is a work-around - * only however and something AMD really should fix properly. The Linux kernel should probably work - * around this issue by turning off RDRAND altogether on those CPUs. See: - * https://github.com/systemd/systemd/issues/11810 */ - if (v == 0 || v == ULONG_MAX) - return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN), - "RDRAND returned suspicious value %lx, assuming bad hardware RNG, not using value.", v); - - *ret = v; - return 0; -#else - return -EOPNOTSUPP; -#endif -} - int genuine_random_bytes(void *p, size_t n, RandomFlags flags) { static int have_syscall = -1; _cleanup_close_ int fd = -1; - bool got_some = false; - - /* Gathers some high-quality randomness from the kernel (or potentially mid-quality randomness from - * the CPU if the RANDOM_ALLOW_RDRAND flag is set). This call won't block, unless the RANDOM_BLOCK - * flag is set. If RANDOM_MAY_FAIL is set, an error is returned if the random pool is not - * initialized. Otherwise it will always return some data from the kernel, regardless of whether the - * random pool is fully initialized or not. If RANDOM_EXTEND_WITH_PSEUDO is set, and some but not - * enough better quality randomness could be acquired, the rest is filled up with low quality - * randomness. - * - * Of course, when creating cryptographic key material you really shouldn't use RANDOM_ALLOW_DRDRAND - * or even RANDOM_EXTEND_WITH_PSEUDO. - * - * When generating UUIDs it's fine to use RANDOM_ALLOW_RDRAND but not OK to use - * RANDOM_EXTEND_WITH_PSEUDO. In fact RANDOM_EXTEND_WITH_PSEUDO is only really fine when invoked via - * an "all bets are off" wrapper, such as random_bytes(), see below. */ + + /* Gathers some high-quality randomness from the kernel. This call won't block, unless the RANDOM_BLOCK + * flag is set. If it doesn't block, it will still always return some data from the kernel, regardless + * of whether the random pool is fully initialized or not. When creating cryptographic key material you + * should always use RANDOM_BLOCK. */ if (n == 0) return 0; - if (FLAGS_SET(flags, RANDOM_ALLOW_RDRAND)) - /* Try x86-64' RDRAND intrinsic if we have it. We only use it if high quality randomness is - * not required, as we don't trust it (who does?). Note that we only do a single iteration of - * RDRAND here, even though the Intel docs suggest calling this in a tight loop of 10 - * invocations or so. That's because we don't really care about the quality here. We - * generally prefer using RDRAND if the caller allows us to, since this way we won't upset - * the kernel's random subsystem by accessing it before the pool is initialized (after all it - * will kmsg log about every attempt to do so). */ - for (;;) { - unsigned long u; - size_t m; - - if (rdrand(&u) < 0) { - if (got_some && FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) { - /* Fill in the remaining bytes using pseudo-random values */ - pseudo_random_bytes(p, n); - return 0; - } - - /* OK, this didn't work, let's go to getrandom() + /dev/urandom instead */ - break; - } - - m = MIN(sizeof(u), n); - memcpy(p, &u, m); - - p = (uint8_t*) p + m; - n -= m; - - if (n == 0) - return 0; /* Yay, success! */ - - got_some = true; - } - /* Use the getrandom() syscall unless we know we don't have it. */ if (have_syscall != 0 && !HAS_FEATURE_MEMORY_SANITIZER) { - for (;;) { - ssize_t l; -#if !HAVE_GETRANDOM +#if HAVE_GETRANDOM + ssize_t l = getrandom(p, n, FLAGS_SET(flags, RANDOM_BLOCK) ? 0 : GRND_INSECURE); +#else /* NetworkManager Note: systemd calls the syscall directly in this case. Don't add that workaround. * If you don't compile against a libc that provides getrandom(), you don't get it. */ - l = -1; + ssize_t l = -1; errno = ENOSYS; -#else - l = getrandom(p, n, - (FLAGS_SET(flags, RANDOM_BLOCK) ? 0 : GRND_NONBLOCK) | - (FLAGS_SET(flags, RANDOM_ALLOW_INSECURE) ? GRND_INSECURE : 0)); #endif + if (l > 0) { have_syscall = true; if ((size_t) l == n) return 0; /* Yay, success! */ + /* We didn't get enough data, so try again */ assert((size_t) l < n); p = (uint8_t*) p + l; n -= l; - - if (FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) { - /* Fill in the remaining bytes using pseudo-random values */ - pseudo_random_bytes(p, n); - return 0; - } - - got_some = true; - - /* Hmm, we didn't get enough good data but the caller insists on good data? Then try again */ - if (FLAGS_SET(flags, RANDOM_BLOCK)) - continue; - - /* Fill in the rest with /dev/urandom */ - break; + continue; } else if (l == 0) { have_syscall = true; @@ -266,37 +82,12 @@ int genuine_random_bytes(void *p, size_t n, RandomFlags flags) { have_syscall = false; break; - } else if (errno == EAGAIN) { - /* The kernel has no entropy whatsoever. Let's remember to use the syscall - * the next time again though. - * - * If RANDOM_MAY_FAIL is set, return an error so that random_bytes() can - * produce some pseudo-random bytes instead. Otherwise, fall back to - * /dev/urandom, which we know is empty, but the kernel will produce some - * bytes for us on a best-effort basis. */ - have_syscall = true; - - if (got_some && FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) { - /* Fill in the remaining bytes using pseudorandom values */ - pseudo_random_bytes(p, n); - return 0; - } - - if (FLAGS_SET(flags, RANDOM_MAY_FAIL)) - return -ENODATA; - - /* Use /dev/urandom instead */ - break; - } else if (errno == EINVAL) { - - /* Most likely: unknown flag. We know that GRND_INSECURE might cause this, - * hence try without. */ - - if (FLAGS_SET(flags, RANDOM_ALLOW_INSECURE)) { - flags = flags &~ RANDOM_ALLOW_INSECURE; - continue; - } + /* If we previously passed GRND_INSECURE, and this flag isn't known, then + * we're likely running an old kernel which has getrandom() but not + * GRND_INSECURE. In this case, fall back to /dev/urandom. */ + if (!FLAGS_SET(flags, RANDOM_BLOCK)) + break; return -errno; } else @@ -321,8 +112,6 @@ void initialize_srand(void) { #if HAVE_SYS_AUXV_H const void *auxv; #endif - unsigned long k; - if (srand_called) return; @@ -347,9 +136,6 @@ void initialize_srand(void) { x ^= (unsigned) now(CLOCK_REALTIME); x ^= (unsigned) gettid(); - if (rdrand(&k) >= 0) - x ^= (unsigned) k; - srand(x); srand_called = true; @@ -403,11 +189,8 @@ void random_bytes(void *p, size_t n) { * * What this function will do: * - * • This function will preferably use the CPU's RDRAND operation, if it is available, in - * order to return "mid-quality" random values cheaply. - * - * • Use getrandom() with GRND_NONBLOCK, to return high-quality random values if they are - * cheaply available. + * • Use getrandom(GRND_INSECURE) or /dev/urandom, to return high-quality random values if + * they are cheaply available, or less high-quality random values if they are not. * * • This function will return pseudo-random data, generated via libc rand() if nothing * better is available. @@ -430,7 +213,7 @@ void random_bytes(void *p, size_t n) { * This function is hence not useful for generating UUIDs or cryptographic key material. */ - if (genuine_random_bytes(p, n, RANDOM_EXTEND_WITH_PSEUDO|RANDOM_MAY_FAIL|RANDOM_ALLOW_RDRAND|RANDOM_ALLOW_INSECURE) >= 0) + if (genuine_random_bytes(p, n, 0) >= 0) return; /* If for some reason some user made /dev/urandom unavailable to us, or the kernel has no entropy, use a PRNG instead. */ @@ -504,6 +287,7 @@ int random_write_entropy(int fd, const void *seed, size_t size, bool credit) { return 1; } +#endif /* NM_IGNORED */ uint64_t random_u64_range(uint64_t m) { uint64_t x, remainder; @@ -523,4 +307,3 @@ uint64_t random_u64_range(uint64_t m) { return x % m; } -#endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-shared/src/basic/random-util.h b/src/libnm-systemd-shared/src/basic/random-util.h index e6528ddc..ccee3279 100644 --- a/src/libnm-systemd-shared/src/basic/random-util.h +++ b/src/libnm-systemd-shared/src/basic/random-util.h @@ -6,11 +6,7 @@ #include typedef enum RandomFlags { - RANDOM_EXTEND_WITH_PSEUDO = 1 << 0, /* If we can't get enough genuine randomness, but some, fill up the rest with pseudo-randomness */ - RANDOM_BLOCK = 1 << 1, /* Rather block than return crap randomness (only if the kernel supports that) */ - RANDOM_MAY_FAIL = 1 << 2, /* If we can't get any randomness at all, return early with -ENODATA */ - RANDOM_ALLOW_RDRAND = 1 << 3, /* Allow usage of the CPU RNG */ - RANDOM_ALLOW_INSECURE = 1 << 4, /* Allow usage of GRND_INSECURE flag to kernel's getrandom() API */ + RANDOM_BLOCK = 1 << 0, /* Rather block than return crap randomness (only if the kernel supports that) */ } RandomFlags; int genuine_random_bytes(void *p, size_t n, RandomFlags flags); /* returns "genuine" randomness, optionally filled up with pseudo random, if not enough is available */ @@ -31,10 +27,8 @@ static inline uint32_t random_u32(void) { return u; } -int rdrand(unsigned long *ret); - /* Some limits on the pool sizes when we deal with the kernel random pool */ -#define RANDOM_POOL_SIZE_MIN 512U +#define RANDOM_POOL_SIZE_MIN 32U #define RANDOM_POOL_SIZE_MAX (10U*1024U*1024U) size_t random_pool_size(void); diff --git a/src/libnm-systemd-shared/src/basic/socket-util.h b/src/libnm-systemd-shared/src/basic/socket-util.h index ddea5350..709da206 100644 --- a/src/libnm-systemd-shared/src/basic/socket-util.h +++ b/src/libnm-systemd-shared/src/basic/socket-util.h @@ -230,7 +230,7 @@ struct cmsghdr* cmsg_find(struct msghdr *mh, int level, int type, socklen_t leng ({ \ const union sockaddr_union *__sa = &(sa); \ size_t _len; \ - switch(__sa->sa.sa_family) { \ + switch (__sa->sa.sa_family) { \ case AF_INET: \ _len = sizeof(struct sockaddr_in); \ break; \ diff --git a/src/libnm-systemd-shared/src/basic/sort-util.h b/src/libnm-systemd-shared/src/basic/sort-util.h index 28c06c40..52d611b8 100644 --- a/src/libnm-systemd-shared/src/basic/sort-util.h +++ b/src/libnm-systemd-shared/src/basic/sort-util.h @@ -16,8 +16,8 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, #define typesafe_bsearch_r(k, b, n, func, userdata) \ ({ \ - const typeof(b[0]) *_k = k; \ - int (*_func_)(const typeof(b[0])*, const typeof(b[0])*, typeof(userdata)) = func; \ + const typeof((b)[0]) *_k = k; \ + int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*, typeof(userdata)) = func; \ xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_userdata_fn_t) _func_, userdata); \ }) @@ -36,8 +36,8 @@ static inline void* bsearch_safe(const void *key, const void *base, #define typesafe_bsearch(k, b, n, func) \ ({ \ - const typeof(b[0]) *_k = k; \ - int (*_func_)(const typeof(b[0])*, const typeof(b[0])*) = func; \ + const typeof((b)[0]) *_k = k; \ + int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*) = func; \ bsearch_safe((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_fn_t) _func_); \ }) @@ -57,7 +57,7 @@ static inline void _qsort_safe(void *base, size_t nmemb, size_t size, comparison * is the prototype for the comparison function */ #define typesafe_qsort(p, n, func) \ ({ \ - int (*_func_)(const typeof(p[0])*, const typeof(p[0])*) = func; \ + int (*_func_)(const typeof((p)[0])*, const typeof((p)[0])*) = func; \ _qsort_safe((p), (n), sizeof((p)[0]), (comparison_fn_t) _func_); \ }) @@ -72,7 +72,7 @@ static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, compariso #define typesafe_qsort_r(p, n, func, userdata) \ ({ \ - int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \ + int (*_func_)(const typeof((p)[0])*, const typeof((p)[0])*, typeof(userdata)) = func; \ qsort_r_safe((p), (n), sizeof((p)[0]), (comparison_userdata_fn_t) _func_, userdata); \ }) #endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-shared/src/basic/stat-util.c b/src/libnm-systemd-shared/src/basic/stat-util.c index 8126ce08..fd32f25d 100644 --- a/src/libnm-systemd-shared/src/basic/stat-util.c +++ b/src/libnm-systemd-shared/src/basic/stat-util.c @@ -132,17 +132,22 @@ bool null_or_empty(struct stat *st) { return false; } -int null_or_empty_path(const char *fn) { +int null_or_empty_path_with_root(const char *fn, const char *root) { struct stat st; + int r; assert(fn); - /* If we have the path, let's do an easy text comparison first. */ - if (path_equal(fn, "/dev/null")) + /* A symlink to /dev/null or an empty file? + * When looking under root_dir, we can't expect /dev/ to be mounted, + * so let's see if the path is a (possibly dangling) symlink to /dev/null. */ + + if (path_equal_ptr(path_startswith(fn, root ?: "/"), "dev/null")) return true; - if (stat(fn, &st) < 0) - return -errno; + r = chase_symlinks_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st, NULL); + if (r < 0) + return r; return null_or_empty(&st); } @@ -191,8 +196,7 @@ int files_same(const char *filea, const char *fileb, int flags) { if (fstatat(AT_FDCWD, fileb, &b, flags) < 0) return -errno; - return a.st_dev == b.st_dev && - a.st_ino == b.st_ino; + return stat_inode_same(&a, &b); } bool is_fs_type(const struct statfs *s, statfs_f_type_t magic_value) { @@ -211,7 +215,7 @@ int fd_is_fs_type(int fd, statfs_f_type_t magic_value) { return is_fs_type(&s, magic_value); } -#endif /* NM_IGNORE */ +#endif /* NM_IGNORED */ int path_is_fs_type(const char *path, statfs_f_type_t magic_value) { struct statfs s; @@ -222,7 +226,7 @@ int path_is_fs_type(const char *path, statfs_f_type_t magic_value) { return is_fs_type(&s, magic_value); } -#if 0 /* NM_IGNORE */ +#if 0 /* NM_IGNORED */ bool is_temporary_fs(const struct statfs *s) { return fs_in_group(s, FILESYSTEM_SET_TEMPORARY); } @@ -257,6 +261,15 @@ int path_is_temporary_fs(const char *path) { return is_temporary_fs(&s); } + +int path_is_network_fs(const char *path) { + struct statfs s; + + if (statfs(path, &s) < 0) + return -errno; + + return is_network_fs(&s); +} #endif /* NM_IGNORED */ int stat_verify_regular(const struct stat *st) { @@ -420,6 +433,18 @@ int proc_mounted(void) { return r; } +bool stat_inode_same(const struct stat *a, const struct stat *b) { + + /* Returns if the specified stat structure references the same (though possibly modified) inode. Does + * a thorough check, comparing inode nr, backing device and if the inode is still of the same type. */ + + return a && b && + (a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */ + ((a->st_mode ^ b->st_mode) & S_IFMT) == 0 && /* same inode type */ + a->st_dev == b->st_dev && + a->st_ino == b->st_ino; +} + #if 0 /* NM_IGNORED */ bool stat_inode_unmodified(const struct stat *a, const struct stat *b) { @@ -432,14 +457,10 @@ bool stat_inode_unmodified(const struct stat *a, const struct stat *b) { * about contents of the file. The purpose here is to detect file contents changes, and nothing * else. */ - return a && b && - (a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */ - ((a->st_mode ^ b->st_mode) & S_IFMT) == 0 && /* same inode type */ + return stat_inode_same(a, b) && a->st_mtim.tv_sec == b->st_mtim.tv_sec && a->st_mtim.tv_nsec == b->st_mtim.tv_nsec && (!S_ISREG(a->st_mode) || a->st_size == b->st_size) && /* if regular file, compare file size */ - a->st_dev == b->st_dev && - a->st_ino == b->st_ino && (!(S_ISCHR(a->st_mode) || S_ISBLK(a->st_mode)) || a->st_rdev == b->st_rdev); /* if device node, also compare major/minor, because we can */ } diff --git a/src/libnm-systemd-shared/src/basic/stat-util.h b/src/libnm-systemd-shared/src/basic/stat-util.h index a566114f..37513a43 100644 --- a/src/libnm-systemd-shared/src/basic/stat-util.h +++ b/src/libnm-systemd-shared/src/basic/stat-util.h @@ -31,9 +31,13 @@ static inline int dir_is_populated(const char *path) { } bool null_or_empty(struct stat *st) _pure_; -int null_or_empty_path(const char *fn); +int null_or_empty_path_with_root(const char *fn, const char *root); int null_or_empty_fd(int fd); +static inline int null_or_empty_path(const char *fn) { + return null_or_empty_path_with_root(fn, NULL); +} + int path_is_read_only_fs(const char *path); int files_same(const char *filea, const char *fileb, int flags); @@ -53,6 +57,7 @@ int fd_is_temporary_fs(int fd); int fd_is_network_fs(int fd); int path_is_temporary_fs(const char *path); +int path_is_network_fs(const char *path); /* Because statfs.t_type can be int on some architectures, we have to cast * the const magic to the type, otherwise the compiler warns about @@ -91,6 +96,7 @@ int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret int proc_mounted(void); +bool stat_inode_same(const struct stat *a, const struct stat *b); bool stat_inode_unmodified(const struct stat *a, const struct stat *b); int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct statx *sx); @@ -113,3 +119,9 @@ int statx_fallback(int dfd, const char *path, int flags, unsigned mask, struct s struct new_statx nsx; \ } var #endif + +static inline bool devid_set_and_equal(dev_t a, dev_t b) { + /* Returns true if a and b definitely refer to the same device. If either is zero, this means "don't + * know" and we'll return false */ + return a == b && a != 0; +} diff --git a/src/libnm-systemd-shared/src/basic/string-table.h b/src/libnm-systemd-shared/src/basic/string-table.h index 97c1adc0..e3a26a62 100644 --- a/src/libnm-systemd-shared/src/basic/string-table.h +++ b/src/libnm-systemd-shared/src/basic/string-table.h @@ -113,4 +113,4 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k fputc_unlocked('\n', stdout); \ } \ funlockfile(stdout); \ - } while(false) + } while (false) diff --git a/src/libnm-systemd-shared/src/basic/strv.c b/src/libnm-systemd-shared/src/basic/strv.c index 3e0faf95..f2cb80fe 100644 --- a/src/libnm-systemd-shared/src/basic/strv.c +++ b/src/libnm-systemd-shared/src/basic/strv.c @@ -19,8 +19,6 @@ #include "strv.h" char* strv_find(char * const *l, const char *name) { - char * const *i; - assert(name); STRV_FOREACH(i, l) @@ -31,8 +29,6 @@ char* strv_find(char * const *l, const char *name) { } char* strv_find_case(char * const *l, const char *name) { - char * const *i; - assert(name); STRV_FOREACH(i, l) @@ -43,8 +39,6 @@ char* strv_find_case(char * const *l, const char *name) { } char* strv_find_prefix(char * const *l, const char *name) { - char * const *i; - assert(name); STRV_FOREACH(i, l) @@ -55,14 +49,14 @@ char* strv_find_prefix(char * const *l, const char *name) { } char* strv_find_startswith(char * const *l, const char *name) { - char * const *i, *e; - assert(name); /* Like strv_find_prefix, but actually returns only the * suffix, not the whole item */ STRV_FOREACH(i, l) { + char *e; + e = startswith(*i, name); if (e) return e; @@ -72,18 +66,13 @@ char* strv_find_startswith(char * const *l, const char *name) { } char** strv_free(char **l) { - if (!l) - return NULL; - - for (char **k = l; *k; k++) + STRV_FOREACH(k, l) free(*k); return mfree(l); } char** strv_free_erase(char **l) { - char **i; - STRV_FOREACH(i, l) erase_and_freep(i); @@ -91,32 +80,29 @@ char** strv_free_erase(char **l) { } char** strv_copy(char * const *l) { - char **r, **k; + _cleanup_strv_free_ char **result = NULL; + char **k; - k = r = new(char*, strv_length(l) + 1); - if (!r) + result = new(char*, strv_length(l) + 1); + if (!result) return NULL; - if (l) - for (; *l; k++, l++) { - *k = strdup(*l); - if (!*k) { - strv_free(r); - return NULL; - } - } + k = result; + STRV_FOREACH(i, l) { + *k = strdup(*i); + if (!*k) + return NULL; + k++; + } *k = NULL; - return r; + return TAKE_PTR(result); } size_t strv_length(char * const *l) { size_t n = 0; - if (!l) - return 0; - - for (; *l; l++) + STRV_FOREACH(i, l) n++; return n; @@ -173,8 +159,8 @@ char** strv_new_internal(const char *x, ...) { } int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) { - char * const *s, **t; size_t p, q, i = 0; + char **t; assert(a); @@ -220,7 +206,6 @@ rollback: #if 0 /* NM_IGNORED */ int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix) { - char * const *s; int r; STRV_FOREACH(s, b) { @@ -373,7 +358,6 @@ int strv_split_colon_pairs(char ***t, const char *s) { #endif /* NM_IGNORED */ char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) { - char * const *s; char *r, *e; size_t n, k, m; @@ -601,8 +585,6 @@ int strv_extend_front(char ***l, const char *value) { } char** strv_uniq(char **l) { - char **i; - /* Drops duplicate entries. The first identical string will be * kept, the others dropped */ @@ -613,10 +595,8 @@ char** strv_uniq(char **l) { } bool strv_is_uniq(char * const *l) { - char * const *i; - STRV_FOREACH(i, l) - if (strv_find(i+1, *i)) + if (strv_contains(i+1, *i)) return false; return true; @@ -725,7 +705,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) { */ _cleanup_free_ char *m = NULL; - char * const *i; size_t n = 0; assert(ret); @@ -762,8 +741,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) { } bool strv_overlap(char * const *a, char * const *b) { - char * const *i; - STRV_FOREACH(i, a) if (strv_contains(b, *i)) return true; @@ -805,8 +782,6 @@ int strv_compare(char * const *a, char * const *b) { } void strv_print(char * const *l) { - char * const *s; - STRV_FOREACH(s, l) puts(*s); } @@ -841,8 +816,6 @@ char** strv_reverse(char **l) { #if 0 /* NM_IGNORED */ char** strv_shell_escape(char **l, const char *bad) { - char **s; - /* Escapes every character in every string in l that is in bad, * edits in-place, does not roll-back on error. */ @@ -926,7 +899,6 @@ rollback: int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) { bool b = false; - char * const *s; int r; /* Like fputs(), but for strv, and with a less stupid argument order */ diff --git a/src/libnm-systemd-shared/src/basic/strv.h b/src/libnm-systemd-shared/src/basic/strv.h index 092d40c8..2a858326 100644 --- a/src/libnm-systemd-shared/src/basic/strv.h +++ b/src/libnm-systemd-shared/src/basic/strv.h @@ -122,19 +122,30 @@ static inline int strv_from_nulstr(char ***a, const char *nulstr) { bool strv_overlap(char * const *a, char * const *b) _pure_; +#define _STRV_FOREACH(s, l, i) \ + for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++) + #define STRV_FOREACH(s, l) \ - for ((s) = (l); (s) && *(s); (s)++) + _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ)) + +#define _STRV_FOREACH_BACKWARDS(s, l, h, i) \ + for (typeof(*(l)) *s, *h = (l), *i = ({ \ + size_t _len = strv_length(h); \ + _len > 0 ? h + _len - 1 : NULL; \ + }); \ + (s = i); \ + i = PTR_SUB1(i, h)) + +#define STRV_FOREACH_BACKWARDS(s, l) \ + _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ)) -#define STRV_FOREACH_BACKWARDS(s, l) \ - for (s = ({ \ - typeof(l) _l = l; \ - _l ? _l + strv_length(_l) - 1U : NULL; \ - }); \ - (l) && ((s) >= (l)); \ - (s)--) +#define _STRV_FOREACH_PAIR(x, y, l, i) \ + for (typeof(*l) *x, *y, *i = (l); \ + i && *(x = i) && *(y = i + 1); \ + i += 2) -#define STRV_FOREACH_PAIR(x, y, l) \ - for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1)) +#define STRV_FOREACH_PAIR(x, y, l) \ + _STRV_FOREACH_PAIR(x, y, l, UNIQ_T(i, UNIQ)) char** strv_sort(char **l); void strv_print(char * const *l); @@ -185,7 +196,7 @@ void strv_print(char * const *l); #define STARTSWITH_SET(p, ...) \ ({ \ const char *_p = (p); \ - char *_found = NULL, **_i; \ + char *_found = NULL; \ STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ _found = startswith(_p, *_i); \ if (_found) \ @@ -197,7 +208,7 @@ void strv_print(char * const *l); #define ENDSWITH_SET(p, ...) \ ({ \ const char *_p = (p); \ - char *_found = NULL, **_i; \ + char *_found = NULL; \ STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ _found = endswith(_p, *_i); \ if (_found) \ @@ -207,7 +218,7 @@ void strv_print(char * const *l); }) #define _FOREACH_STRING(uniq, x, y, ...) \ - for (char **UNIQ_T(l, uniq) = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \ + for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \ x; \ x = *(++UNIQ_T(l, uniq))) diff --git a/src/libnm-systemd-shared/src/basic/time-util.c b/src/libnm-systemd-shared/src/basic/time-util.c index d7ea2b38..8476a650 100644 --- a/src/libnm-systemd-shared/src/basic/time-util.c +++ b/src/libnm-systemd-shared/src/basic/time-util.c @@ -79,7 +79,7 @@ triple_timestamp* triple_timestamp_get(triple_timestamp *ts) { ts->realtime = now(CLOCK_REALTIME); ts->monotonic = now(CLOCK_MONOTONIC); - ts->boottime = clock_boottime_supported() ? now(CLOCK_BOOTTIME) : USEC_INFINITY; + ts->boottime = now(CLOCK_BOOTTIME); return ts; } @@ -128,7 +128,7 @@ usec_t map_clock_usec(usec_t from, clockid_t from_clock, clockid_t to_clock) { dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u) { assert(ts); - if (u == USEC_INFINITY || u == 0) { + if (!timestamp_is_set(u)) { ts->realtime = ts->monotonic = u; return ts; } @@ -143,7 +143,7 @@ triple_timestamp* triple_timestamp_from_realtime(triple_timestamp *ts, usec_t u) assert(ts); - if (u == USEC_INFINITY || u == 0) { + if (!timestamp_is_set(u)) { ts->realtime = ts->monotonic = ts->boottime = u; return ts; } @@ -152,9 +152,7 @@ triple_timestamp* triple_timestamp_from_realtime(triple_timestamp *ts, usec_t u) ts->realtime = u; ts->monotonic = map_clock_usec_internal(u, nowr, now(CLOCK_MONOTONIC)); - ts->boottime = clock_boottime_supported() ? - map_clock_usec_internal(u, nowr, now(CLOCK_BOOTTIME)) : - USEC_INFINITY; + ts->boottime = map_clock_usec_internal(u, nowr, now(CLOCK_BOOTTIME)); return ts; } @@ -172,8 +170,7 @@ dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u) { return ts; } -dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, usec_t u) { - clockid_t cid; +dual_timestamp* dual_timestamp_from_boottime(dual_timestamp *ts, usec_t u) { usec_t nowm; if (u == USEC_INFINITY) { @@ -181,14 +178,8 @@ dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, us return ts; } - cid = clock_boottime_or_monotonic(); - nowm = now(cid); - - if (cid == CLOCK_MONOTONIC) - ts->monotonic = u; - else - ts->monotonic = map_clock_usec_internal(u, nowm, now(CLOCK_MONOTONIC)); - + nowm = now(CLOCK_BOOTTIME); + ts->monotonic = map_clock_usec_internal(u, nowm, now(CLOCK_MONOTONIC)); ts->realtime = map_clock_usec_internal(u, nowm, now(CLOCK_REALTIME)); return ts; } @@ -323,11 +314,13 @@ char *format_timestamp_style( time_t sec; size_t n; bool utc = false, us = false; + int r; assert(buf); switch (style) { case TIMESTAMP_PRETTY: + case TIMESTAMP_UNIX: break; case TIMESTAMP_US: us = true; @@ -350,9 +343,17 @@ char *format_timestamp_style( 1 + 1 + /* space and shortest possible zone */ 1)) return NULL; /* Not enough space even for the shortest form. */ - if (t <= 0 || t == USEC_INFINITY) + if (!timestamp_is_set(t)) return NULL; /* Timestamp is unset */ + if (style == TIMESTAMP_UNIX) { + r = snprintf(buf, l, "@" USEC_FMT, t / USEC_PER_SEC); /* round down µs → s */ + if (r < 0 || (size_t) r >= l) + return NULL; /* Doesn't fit */ + + return buf; + } + /* Let's not format times with years > 9999 */ if (t > USEC_TIMESTAMP_FORMATTABLE_MAX) { assert(l >= STRLEN("--- XXXX-XX-XX XX:XX:XX") + 1); @@ -420,7 +421,7 @@ char *format_timestamp_relative(char *buf, size_t l, usec_t t) { const char *s; usec_t n, d; - if (t <= 0 || t == USEC_INFINITY) + if (!timestamp_is_set(t)) return NULL; n = now(CLOCK_REALTIME); @@ -793,6 +794,16 @@ static int parse_timestamp_impl(const char *t, usec_t *usec, bool with_tz) { goto from_tm; } + /* Support OUTPUT_SHORT and OUTPUT_SHORT_PRECISE formats */ + tm = copy; + k = strptime(t, "%b %d %H:%M:%S", &tm); + if (k) { + if (*k == '.') + goto parse_usec; + else if (*k == 0) + goto from_tm; + } + tm = copy; k = strptime(t, "%y-%m-%d %H:%M", &tm); if (k && *k == 0) { @@ -1447,33 +1458,6 @@ int verify_timezone(const char *name, int log_level) { return 0; } -bool clock_boottime_supported(void) { - static int supported = -1; - - /* Note that this checks whether CLOCK_BOOTTIME is available in general as well as available for timerfds()! */ - - if (supported < 0) { - int fd; - - fd = timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK|TFD_CLOEXEC); - if (fd < 0) - supported = false; - else { - safe_close(fd); - supported = true; - } - } - - return supported; -} - -clockid_t clock_boottime_or_monotonic(void) { - if (clock_boottime_supported()) - return CLOCK_BOOTTIME; - else - return CLOCK_MONOTONIC; -} - bool clock_supported(clockid_t clock) { struct timespec ts; @@ -1481,16 +1465,10 @@ bool clock_supported(clockid_t clock) { case CLOCK_MONOTONIC: case CLOCK_REALTIME: - return true; - case CLOCK_BOOTTIME: - return clock_boottime_supported(); - - case CLOCK_BOOTTIME_ALARM: - if (!clock_boottime_supported()) - return false; + /* These three are always available in our baseline, and work in timerfd, as of kernel 3.15 */ + return true; - _fallthrough_; default: /* For everything else, check properly */ return clock_gettime(clock, &ts) >= 0; @@ -1639,6 +1617,7 @@ static const char* const timestamp_style_table[_TIMESTAMP_STYLE_MAX] = { [TIMESTAMP_US] = "us", [TIMESTAMP_UTC] = "utc", [TIMESTAMP_US_UTC] = "us+utc", + [TIMESTAMP_UNIX] = "unix", }; /* Use the macro for enum → string to allow for aliases */ diff --git a/src/libnm-systemd-shared/src/basic/time-util.h b/src/libnm-systemd-shared/src/basic/time-util.h index 895af882..bf312442 100644 --- a/src/libnm-systemd-shared/src/basic/time-util.h +++ b/src/libnm-systemd-shared/src/basic/time-util.h @@ -34,6 +34,7 @@ typedef enum TimestampStyle { TIMESTAMP_US, TIMESTAMP_UTC, TIMESTAMP_US_UTC, + TIMESTAMP_UNIX, _TIMESTAMP_STYLE_MAX, _TIMESTAMP_STYLE_INVALID = -EINVAL, } TimestampStyle; @@ -81,7 +82,7 @@ usec_t map_clock_usec(usec_t from, clockid_t from_clock, clockid_t to_clock); dual_timestamp* dual_timestamp_get(dual_timestamp *ts); dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u); dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u); -dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, usec_t u); +dual_timestamp* dual_timestamp_from_boottime(dual_timestamp *ts, usec_t u); triple_timestamp* triple_timestamp_get(triple_timestamp *ts); triple_timestamp* triple_timestamp_from_realtime(triple_timestamp *ts, usec_t u); @@ -114,9 +115,13 @@ nsec_t timespec_load_nsec(const struct timespec *ts) _pure_; struct timespec* timespec_store(struct timespec *ts, usec_t u); struct timespec* timespec_store_nsec(struct timespec *ts, nsec_t n); +#define TIMESPEC_STORE(u) timespec_store(&(struct timespec) {}, (u)) + usec_t timeval_load(const struct timeval *tv) _pure_; struct timeval* timeval_store(struct timeval *tv, usec_t u); +#define TIMEVAL_STORE(u) timeval_store(&(struct timeval) {}, (u)) + char* format_timestamp_style(char *buf, size_t l, usec_t t, TimestampStyle style) _warn_unused_result_; char* format_timestamp_relative(char *buf, size_t l, usec_t t) _warn_unused_result_; char* format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) _warn_unused_result_; @@ -150,9 +155,7 @@ static inline bool timezone_is_valid(const char *name, int log_level) { return verify_timezone(name, log_level) >= 0; } -bool clock_boottime_supported(void); bool clock_supported(clockid_t clock); -clockid_t clock_boottime_or_monotonic(void); usec_t usec_shift_clock(usec_t, clockid_t from, clockid_t to); diff --git a/src/libnm-systemd-shared/src/basic/tmpfile-util.c b/src/libnm-systemd-shared/src/basic/tmpfile-util.c index dc5a49e2..57447a42 100644 --- a/src/libnm-systemd-shared/src/basic/tmpfile-util.c +++ b/src/libnm-systemd-shared/src/basic/tmpfile-util.c @@ -280,6 +280,28 @@ int open_tmpfile_linkable(const char *target, int flags, char **ret_path) { return fd; } +int fopen_tmpfile_linkable(const char *target, int flags, char **ret_path, FILE **ret_file) { + _cleanup_free_ char *path = NULL; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_close_ int fd = -1; + + assert(target); + assert(ret_file); + assert(ret_path); + + fd = open_tmpfile_linkable(target, flags, &path); + if (fd < 0) + return fd; + + f = take_fdopen(&fd, "w"); + if (!f) + return -ENOMEM; + + *ret_path = TAKE_PTR(path); + *ret_file = TAKE_PTR(f); + return 0; +} + int link_tmpfile(int fd, const char *path, const char *target) { assert(fd >= 0); assert(target); @@ -297,6 +319,23 @@ int link_tmpfile(int fd, const char *path, const char *target) { return RET_NERRNO(linkat(AT_FDCWD, FORMAT_PROC_FD_PATH(fd), AT_FDCWD, target, AT_SYMLINK_FOLLOW)); } +int flink_tmpfile(FILE *f, const char *path, const char *target) { + int fd, r; + + assert(f); + assert(target); + + fd = fileno(f); + if (fd < 0) /* Not all FILE* objects encapsulate fds */ + return -EBADF; + + r = fflush_sync_and_check(f); + if (r < 0) + return r; + + return link_tmpfile(fd, path, target); +} + int mkdtemp_malloc(const char *template, char **ret) { _cleanup_free_ char *p = NULL; int r; diff --git a/src/libnm-systemd-shared/src/basic/tmpfile-util.h b/src/libnm-systemd-shared/src/basic/tmpfile-util.h index 45255fc0..610cbaf8 100644 --- a/src/libnm-systemd-shared/src/basic/tmpfile-util.h +++ b/src/libnm-systemd-shared/src/basic/tmpfile-util.h @@ -13,7 +13,9 @@ int tempfn_random_child(const char *p, const char *extra, char **ret); int open_tmpfile_unlinkable(const char *directory, int flags); int open_tmpfile_linkable(const char *target, int flags, char **ret_path); +int fopen_tmpfile_linkable(const char *target, int flags, char **ret_path, FILE **ret_file); int link_tmpfile(int fd, const char *path, const char *target); +int flink_tmpfile(FILE *f, const char *path, const char *target); int mkdtemp_malloc(const char *template, char **ret); diff --git a/src/libnm-systemd-shared/src/basic/util.h b/src/libnm-systemd-shared/src/basic/util.h index dd1cb4f3..368e3e4f 100644 --- a/src/libnm-systemd-shared/src/basic/util.h +++ b/src/libnm-systemd-shared/src/basic/util.h @@ -9,6 +9,12 @@ extern int saved_argc; extern char **saved_argv; static inline void save_argc_argv(int argc, char **argv) { + + /* Protect against CVE-2021-4034 style attacks */ + assert_se(argc > 0); + assert_se(argv); + assert_se(argv[0]); + saved_argc = argc; saved_argv = argv; } diff --git a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h index d597c743..1c198f6a 100644 --- a/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h +++ b/src/libnm-systemd-shared/src/fundamental/macro-fundamental.h @@ -53,14 +53,16 @@ #define CONCATENATE(x, y) XCONCATENATE(x, y) #ifdef SD_BOOT + void efi_assert(const char *expr, const char *file, unsigned line, const char *function) _noreturn_; + #ifdef NDEBUG #define assert(expr) #define assert_not_reached() __builtin_unreachable() #else - void efi_assert(const char *expr, const char *file, unsigned line, const char *function) _noreturn_; #define assert(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); }) #define assert_not_reached() efi_assert("Code should not be reached", __FILE__, __LINE__, __PRETTY_FUNCTION__) #endif + #define assert_se(expr) ({ _likely_(expr) ? VOID_0 : efi_assert(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); }) #define memcpy(a, b, c) CopyMem((a), (b), (c)) #define free(a) FreePool(a) @@ -74,6 +76,13 @@ _expr_; \ }) +#define ASSERT_SE_PTR(expr) \ + ({ \ + typeof(expr) _expr_ = (expr); \ + assert_se(_expr_); \ + _expr_; \ + }) + #if defined(static_assert) #define assert_cc(expr) \ static_assert(expr, #expr) @@ -243,23 +252,23 @@ CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \ (CASE_F,__VA_ARGS__) -#define IN_SET(x, ...) \ - ({ \ - sd_bool _found = sd_false; \ +#define IN_SET(x, ...) \ + ({ \ + sd_bool _found = sd_false; \ /* If the build breaks in the line below, you need to extend the case macros. (We use "long double" as \ * type for the array, in the hope that checkers such as ubsan don't complain that the initializers for \ * the array are not representable by the base type. Ideally we'd use typeof(x) as base type, but that \ * doesn't work, as we want to use this on bitfields and gcc refuses typeof() on bitfields.) */ \ static const long double __assert_in_set[] _unused_ = { __VA_ARGS__ }; \ - assert_cc(ELEMENTSOF(__assert_in_set) <= 20); \ - switch(x) { \ - FOR_EACH_MAKE_CASE(__VA_ARGS__) \ - _found = sd_true; \ - break; \ - default: \ - break; \ - } \ - _found; \ + assert_cc(ELEMENTSOF(__assert_in_set) <= 20); \ + switch (x) { \ + FOR_EACH_MAKE_CASE(__VA_ARGS__) \ + _found = sd_true; \ + break; \ + default: \ + break; \ + } \ + _found; \ }) /* Takes inspiration from Rust's Option::take() method: reads and returns a pointer, but at the same time diff --git a/src/libnm-systemd-shared/src/shared/dns-domain.c b/src/libnm-systemd-shared/src/shared/dns-domain.c index b82a9a1c..e932b693 100644 --- a/src/libnm-systemd-shared/src/shared/dns-domain.c +++ b/src/libnm-systemd-shared/src/shared/dns-domain.c @@ -171,24 +171,18 @@ int dns_label_unescape_suffix(const char *name, const char **label_terminal, cha /* Skip current terminal character (and accept domain names ending it ".") */ if (*terminal == 0) - terminal--; + terminal = PTR_SUB1(terminal, name); if (terminal >= name && *terminal == '.') - terminal--; + terminal = PTR_SUB1(terminal, name); /* Point name to the last label, and terminal to the preceding terminal symbol (or make it a NULL pointer) */ - for (;;) { - if (terminal < name) { - /* Reached the first label, so indicate that there are no more */ - terminal = NULL; - break; - } - + while (terminal) { /* Find the start of the last label */ if (*terminal == '.') { const char *y; unsigned slashes = 0; - for (y = terminal - 1; y >= name && *y == '\\'; y--) + for (y = PTR_SUB1(terminal, name); y && *y == '\\'; y = PTR_SUB1(y, name)) slashes++; if (slashes % 2 == 0) { @@ -201,7 +195,7 @@ int dns_label_unescape_suffix(const char *name, const char **label_terminal, cha } } - terminal--; + terminal = PTR_SUB1(terminal, name); } r = dns_label_unescape(&name, dest, sz, 0); @@ -1424,4 +1418,19 @@ int dns_name_dot_suffixed(const char *name) { return false; } } + +bool dns_name_dont_resolve(const char *name) { + + /* Never respond to some of the domains listed in RFC6303 */ + if (dns_name_endswith(name, "0.in-addr.arpa") > 0 || + dns_name_equal(name, "255.255.255.255.in-addr.arpa") > 0 || + dns_name_equal(name, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa") > 0) + return true; + + /* Never respond to some of the domains listed in RFC6761 */ + if (dns_name_endswith(name, "invalid") > 0) + return true; + + return false; +} #endif /* NM_IGNORED */ diff --git a/src/libnm-systemd-shared/src/shared/dns-domain.h b/src/libnm-systemd-shared/src/shared/dns-domain.h index c237f761..ec174c0e 100644 --- a/src/libnm-systemd-shared/src/shared/dns-domain.h +++ b/src/libnm-systemd-shared/src/shared/dns-domain.h @@ -105,3 +105,5 @@ int dns_name_apply_idna(const char *name, char **ret); int dns_name_is_valid_or_address(const char *name); int dns_name_dot_suffixed(const char *name); + +bool dns_name_dont_resolve(const char *name); diff --git a/src/libnmc-base/nm-client-utils.c b/src/libnmc-base/nm-client-utils.c index 01b3df32..e2ed7fc2 100644 --- a/src/libnmc-base/nm-client-utils.c +++ b/src/libnmc-base/nm-client-utils.c @@ -732,7 +732,7 @@ nmc_print_qrcode(const char *str) * Example of @passwd_file contents: * wifi.psk:tajne heslo * 802-1x.password:krakonos - * 802-11-wireless-security:leap-password:my leap password + * 802-11-wireless-security.leap-password:my leap password * * Returns: (transfer full): hash table with parsed passwords, or %NULL on an error */ diff --git a/src/libnmc-base/nm-secret-agent-simple.c b/src/libnmc-base/nm-secret-agent-simple.c index 5651a15b..de3de05a 100644 --- a/src/libnmc-base/nm-secret-agent-simple.c +++ b/src/libnmc-base/nm-secret-agent-simple.c @@ -795,7 +795,6 @@ try_spawn_vpn_auth_helper(RequestData *request, GPtrArray *secrets) &auth_dialog_out_fd, NULL, &error)) { - g_warning("Failed to spawn the auth dialog%s\n", error->message); return FALSE; } diff --git a/src/libnmc-setting/nm-meta-setting-base-impl.c b/src/libnmc-setting/nm-meta-setting-base-impl.c index cd55779f..69daa76c 100644 --- a/src/libnmc-setting/nm-meta-setting-base-impl.c +++ b/src/libnmc-setting/nm-meta-setting-base-impl.c @@ -153,6 +153,68 @@ const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[] = { #undef _D }; +const NMSetting8021xSchemeVtable * +nm_setting_8021x_scheme_vtable_by_setting_key(const char *key) +{ + static const NMSetting8021xSchemeType sorted_index[] = { + NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CLIENT_CERT, + NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_PRIVATE_KEY, + NM_SETTING_802_1X_SCHEME_TYPE_PRIVATE_KEY, + }; + int imin, imax; + + nm_assert(key); + + if (NM_MORE_ASSERT_ONCE(5)) { + const NMSetting8021xSchemeVtable *vtable_prev = NULL; + int i, j; + + for (i = 0; i < (int) G_N_ELEMENTS(sorted_index); i++) { + const NMSetting8021xSchemeType t = sorted_index[i]; + const NMSetting8021xSchemeVtable *vtable; + + nm_assert(_NM_INT_NOT_NEGATIVE(t)); + nm_assert(t < G_N_ELEMENTS(nm_setting_8021x_scheme_vtable) - 1); + + for (j = 0; j < i; j++) + nm_assert(t != sorted_index[j]); + + vtable = &nm_setting_8021x_scheme_vtable[t]; + + nm_assert(vtable->scheme_type == t); + nm_assert(vtable->setting_key); + + if (vtable_prev) + nm_assert(strcmp(vtable_prev->setting_key, vtable->setting_key) < 0); + vtable_prev = vtable; + } + } + + imin = 0; + imax = G_N_ELEMENTS(sorted_index) - 1; + while (imin <= imax) { + const NMSetting8021xSchemeVtable *vtable; + const int imid = imin + (imax - imin) / 2; + int cmp; + + vtable = &nm_setting_8021x_scheme_vtable[sorted_index[imid]]; + + cmp = strcmp(vtable->setting_key, key); + if (cmp == 0) + return vtable; + + if (cmp < 0) + imin = imid + 1; + else + imax = imid - 1; + } + + return NULL; +} + /*****************************************************************************/ const NMMetaSettingInfo nm_meta_setting_infos[] = { diff --git a/src/libnmc-setting/nm-meta-setting-base-impl.h b/src/libnmc-setting/nm-meta-setting-base-impl.h index ea4f85ff..12688659 100644 --- a/src/libnmc-setting/nm-meta-setting-base-impl.h +++ b/src/libnmc-setting/nm-meta-setting-base-impl.h @@ -38,20 +38,20 @@ * * 10: NMSettingUser */ -typedef enum { /*< skip >*/ - NM_SETTING_PRIORITY_INVALID = 0, - NM_SETTING_PRIORITY_CONNECTION = 1, - NM_SETTING_PRIORITY_HW_BASE = 2, - NM_SETTING_PRIORITY_HW_NON_BASE = 3, - NM_SETTING_PRIORITY_HW_AUX = 4, - NM_SETTING_PRIORITY_AUX = 5, - NM_SETTING_PRIORITY_IP = 6, - NM_SETTING_PRIORITY_USER = 10, +typedef enum /*< skip >*/ { + NM_SETTING_PRIORITY_INVALID = 0, + NM_SETTING_PRIORITY_CONNECTION = 1, + NM_SETTING_PRIORITY_HW_BASE = 2, + NM_SETTING_PRIORITY_HW_NON_BASE = 3, + NM_SETTING_PRIORITY_HW_AUX = 4, + NM_SETTING_PRIORITY_AUX = 5, + NM_SETTING_PRIORITY_IP = 6, + NM_SETTING_PRIORITY_USER = 10, } NMSettingPriority; /*****************************************************************************/ -typedef enum { +typedef enum _nm_packed { NM_SETTING_802_1X_SCHEME_TYPE_CA_CERT, NM_SETTING_802_1X_SCHEME_TYPE_PHASE2_CA_CERT, NM_SETTING_802_1X_SCHEME_TYPE_CLIENT_CERT, @@ -92,6 +92,8 @@ typedef struct { extern const NMSetting8021xSchemeVtable nm_setting_8021x_scheme_vtable[_NM_SETTING_802_1X_SCHEME_TYPE_NUM + 1]; +const NMSetting8021xSchemeVtable *nm_setting_8021x_scheme_vtable_by_setting_key(const char *key); + /*****************************************************************************/ typedef enum _nm_packed { diff --git a/src/libnmc-setting/nm-meta-setting-desc.h b/src/libnmc-setting/nm-meta-setting-desc.h index 91905253..b08d4c08 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.h +++ b/src/libnmc-setting/nm-meta-setting-desc.h @@ -91,6 +91,7 @@ typedef enum { NM_META_COLOR_CONNECTION_INVISIBLE, NM_META_COLOR_CONNECTION_EXTERNAL, NM_META_COLOR_CONNECTION_UNKNOWN, + NM_META_COLOR_CONNECTION_DEPRECATED, NM_META_COLOR_CONNECTIVITY_FULL, NM_META_COLOR_CONNECTIVITY_LIMITED, NM_META_COLOR_CONNECTIVITY_NONE, @@ -126,6 +127,7 @@ typedef enum { NM_META_COLOR_WIFI_SIGNAL_GOOD, NM_META_COLOR_WIFI_SIGNAL_POOR, NM_META_COLOR_WIFI_SIGNAL_UNKNOWN, + NM_META_COLOR_WIFI_DEPRECATED, NM_META_COLOR_DISABLED, NM_META_COLOR_ENABLED, _NM_META_COLOR_NUM diff --git a/src/libnmc-setting/settings-docs-input.xml b/src/libnmc-setting/settings-docs-input.xml index 37ad35ba..f7552644 100644 --- a/src/libnmc-setting/settings-docs-input.xml +++ b/src/libnmc-setting/settings-docs-input.xml @@ -1,4 +1,4 @@ - + A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: @@ -52,7 +52,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -70,7 +71,7 @@ fixed priority. Example: priority 5 from 192.167.4.0/24 table 45 - + A list of IPv6 destination addresses, prefix length, optional IPv6 next hop addresses, optional route metric, optional attribute. The valid syntax is: @@ -120,7 +121,8 @@ Various attributes are supported: "type" - one of unicast, local, blackhole, -unavailable, prohibit. The default is unicast. +unavailable, prohibit, throw. +The default is unicast. "window" - an unsigned 32 bit integer. @@ -138,7 +140,7 @@ fixed priority. Example: priority 5 from 1:2:3::5/128 table 45 - + Array of TC queueing disciplines. qdisc is a basic block in the Linux traffic control subsystem diff --git a/src/libnmc-setting/settings-docs.h b/src/libnmc-setting/settings-docs.h index 5ba6302d..2a582ad7 100644 --- a/src/libnmc-setting/settings-docs.h +++ b/src/libnmc-setting/settings-docs.h @@ -152,7 +152,7 @@ #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD_FLAGS N_("Flags indicating how to handle the \"password\" property.") #define DESCRIBE_DOC_NM_SETTING_CDMA_USERNAME N_("The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTH_RETRIES N_("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.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT N_("Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See \"secondaries\" as an alternative to automatically connect VPN profiles.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT N_("Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See \"secondaries\" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better \"connection.autoconnect-priority\" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their \"connection.timestamp\" is identical, the choice is undefined. Depending on \"connection.multi-connect\", a profile can (auto)connect only once at a time or multiple times.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES N_("The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.") @@ -171,7 +171,7 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_READ_ONLY N_("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.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SECONDARIES N_("List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used 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.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used 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. See NetworkManager(8) manual about the secret-key and the host identity. 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.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TIMESTAMP N_("The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TYPE N_("Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, \"802-3-ethernet\" or \"802-11-wireless\" or \"bluetooth\", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \"vpn\" or \"bridge\", etc).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_UUID N_("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 \"-\").") @@ -255,7 +255,7 @@ #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ROUTES N_("A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: \"ip[/prefix] [next-hop] [metric] [attribute=val]...[,ip[/prefix]...]\". For example \"192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24\".") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ROUTING_RULES N_("A comma separated list of routing rules for policy routing.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE N_("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.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in increasing priority, meaning the last address will be the primary address.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5).") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_DUID N_("A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value \"lease\" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and \"dhclient\" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values \"llt\" and \"ll\" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values \"stable-llt\", \"stable-ll\" and \"stable-uuid\" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the \"${DEVICE}\" or \"${MAC}\" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of \"stable-ll\" and \"stable-llt\" will be a generated address derived from the stable id. The DUID-LLT time value in the \"stable-llt\" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in \"llt\"). When the property is unset, the global value provided for \"ipv6.dhcp-duid\" is used. If no global value is provided, the default \"lease\" value is assumed.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") @@ -340,7 +340,7 @@ #define DESCRIBE_DOC_NM_SETTING_PPPOE_USERNAME N_("Username used to authenticate with the PPPoE service.") #define DESCRIBE_DOC_NM_SETTING_PROXY_BROWSER_ONLY N_("Whether the proxy configuration is for browser only.") #define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)") -#define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("PAC script for the connection.") +#define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes \"file://\" and \"js://\" are supported to explicitly differentiate between the two.") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_URL N_("PAC URL for obtaining PAC file.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BAUD N_("Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BITS N_("Byte-width of the serial communication. The 8 in \"8n1\" for example.") diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in index 5ba6302d..2a582ad7 100644 --- a/src/libnmc-setting/settings-docs.h.in +++ b/src/libnmc-setting/settings-docs.h.in @@ -152,7 +152,7 @@ #define DESCRIBE_DOC_NM_SETTING_CDMA_PASSWORD_FLAGS N_("Flags indicating how to handle the \"password\" property.") #define DESCRIBE_DOC_NM_SETTING_CDMA_USERNAME N_("The username used to authenticate with the network, if required. Many providers do not require a username, or accept any username. But if a username is required, it is specified here.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTH_RETRIES N_("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.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT N_("Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See \"secondaries\" as an alternative to automatically connect VPN profiles.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT N_("Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See \"secondaries\" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better \"connection.autoconnect-priority\" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their \"connection.timestamp\" is identical, the choice is undefined. Depending on \"connection.multi-connect\", a profile can (auto)connect only once at a time or multiple times.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES N_("The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0.") @@ -171,7 +171,7 @@ #define DESCRIBE_DOC_NM_SETTING_CONNECTION_READ_ONLY N_("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.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SECONDARIES N_("List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave.") -#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used 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.") +#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used 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. See NetworkManager(8) manual about the secret-key and the host identity. 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.") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TIMESTAMP N_("The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_TYPE N_("Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, \"802-3-ethernet\" or \"802-11-wireless\" or \"bluetooth\", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \"vpn\" or \"bridge\", etc).") #define DESCRIBE_DOC_NM_SETTING_CONNECTION_UUID N_("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 \"-\").") @@ -255,7 +255,7 @@ #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ROUTES N_("A list of IPv4 destination addresses, prefix length, optional IPv4 next hop addresses, optional route metric, optional attribute. The valid syntax is: \"ip[/prefix] [next-hop] [metric] [attribute=val]...[,ip[/prefix]...]\". For example \"192.0.2.0/24 10.1.1.1 77, 198.51.100.0/24\".") #define DESCRIBE_DOC_NM_SETTING_IP4_CONFIG_ROUTING_RULES N_("A comma separated list of routing rules for policy routing.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE N_("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.") -#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in increasing priority, meaning the last address will be the primary address.") +#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_ADDRESSES N_("A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example \"2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64\". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5).") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DAD_TIMEOUT N_("Timeout in milliseconds used to check for the presence of duplicate IP addresses on the network. If an address conflict is detected, the activation will fail. A zero value means that no duplicate address detection is performed, -1 means the default value (either configuration ipvx.dad-timeout override or zero). A value greater than zero is a timeout in milliseconds. The property is currently implemented only for IPv4.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_DUID N_("A string containing the DHCPv6 Unique Identifier (DUID) used by the dhcp client to identify itself to DHCPv6 servers (RFC 3315). The DUID is carried in the Client Identifier option. If the property is a hex string ('aa:bb:cc') it is interpreted as a binary DUID and filled as an opaque value in the Client Identifier option. The special value \"lease\" will retrieve the DUID previously used from the lease file belonging to the connection. If no DUID is found and \"dhclient\" is the configured dhcp client, the DUID is searched in the system-wide dhclient lease file. If still no DUID is found, or another dhcp client is used, a global and permanent DUID-UUID (RFC 6355) will be generated based on the machine-id. The special values \"llt\" and \"ll\" will generate a DUID of type LLT or LL (see RFC 3315) based on the current MAC address of the device. In order to try providing a stable DUID-LLT, the time field will contain a constant timestamp that is used globally (for all profiles) and persisted to disk. The special values \"stable-llt\", \"stable-ll\" and \"stable-uuid\" will generate a DUID of the corresponding type, derived from the connection's stable-id and a per-host unique key. You may want to include the \"${DEVICE}\" or \"${MAC}\" specifier in the stable-id, in case this profile gets activated on multiple devices. So, the link-layer address of \"stable-ll\" and \"stable-llt\" will be a generated address derived from the stable id. The DUID-LLT time value in the \"stable-llt\" option will be picked among a static timespan of three years (the upper bound of the interval is the same constant timestamp used in \"llt\"). When the property is unset, the global value provided for \"ipv6.dhcp-duid\" is used. If no global value is provided, the default \"lease\" value is assumed.") #define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME N_("If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease. This property and \"dhcp-fqdn\" are mutually exclusive and cannot be set at the same time.") @@ -340,7 +340,7 @@ #define DESCRIBE_DOC_NM_SETTING_PPPOE_USERNAME N_("Username used to authenticate with the PPPoE service.") #define DESCRIBE_DOC_NM_SETTING_PROXY_BROWSER_ONLY N_("Whether the proxy configuration is for browser only.") #define DESCRIBE_DOC_NM_SETTING_PROXY_METHOD N_("Method for proxy configuration, Default is NM_SETTING_PROXY_METHOD_NONE (0)") -#define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("PAC script for the connection.") +#define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_SCRIPT N_("The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes \"file://\" and \"js://\" are supported to explicitly differentiate between the two.") #define DESCRIBE_DOC_NM_SETTING_PROXY_PAC_URL N_("PAC URL for obtaining PAC file.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BAUD N_("Speed to use for communication over the serial port. Note that this value usually has no effect for mobile broadband modems as they generally ignore speed settings and use the highest available speed.") #define DESCRIBE_DOC_NM_SETTING_SERIAL_BITS N_("Byte-width of the serial communication. The 8 in \"8n1\" for example.") diff --git a/src/linux-headers/nl80211-vnd-intel.h b/src/linux-headers/nl80211-vnd-intel.h new file mode 100644 index 00000000..4ed7d0b2 --- /dev/null +++ b/src/linux-headers/nl80211-vnd-intel.h @@ -0,0 +1,106 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (C) 2012-2014, 2018-2021 Intel Corporation + * Copyright (C) 2013-2015 Intel Mobile Communications GmbH + * Copyright (C) 2016-2017 Intel Deutschland GmbH + */ +#ifndef __VENDOR_CMD_INTEL_H__ +#define __VENDOR_CMD_INTEL_H__ + +#define INTEL_OUI 0x001735 + +/** + * enum iwl_mvm_vendor_cmd - supported vendor commands + * @IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO: reports CSME connection info. + * @IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP: asks for ownership on the device. + * This is useful when the CSME firmware owns the device and the kernel + * wants to use it. In case the CSME firmware has no connection active the + * kernel will manage on its own to get ownership of the device. + * When the CSME firmware has an active connection, the user space + * involvement is required. The kernel will assert the RFKILL signal with + * the "device not owned" reason so that nobody can touch the device. Then + * the user space can run the following flow to be able to get connected + * to the very same AP the CSME firmware is currently connected to: + * + * 1) The user space (NetworkManager) boots and sees that the device is + * in RFKILL because the host doesn't own the device + * 2) The user space asks the kernel what AP the CSME firmware is + * connected to (with %IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO) + * 3) The user space checks if it has a profile that matches the reply + * from the CSME firmware + * 4) The user space installs a network to the wpa_supplicant with a + * specific BSSID and a specific frequency + * 5) The user space prevents any type of full scan + * 6) The user space asks iwlmei to request ownership on the device (with + * this command) + * 7) iwlmei requests ownership from the CSME firmware + * 8) The CSME firmware grants ownership + * 9) iwlmei tells iwlwifi to lift the RFKILL + * 10) RFKILL OFF is reported to user space + * 11) The host boots the device, loads the firwmare, and connects to a + * specific BSSID without scanning including IP as fast as it can + * 12) The host reports to the CSME firmware that there is a connection + * 13) The TCP connection is preserved and the host has connectivity + * + * @IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT: notifies if roaming is allowed. + * It contains a &IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN and a + * &IWL_MVM_VENDOR_ATTR_VIF_ADDR attributes. + */ + +enum iwl_mvm_vendor_cmd { + IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO = 0x2d, + IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP = 0x30, + IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT = 0x32, +}; + +enum iwl_vendor_auth_akm_mode { + IWL_VENDOR_AUTH_OPEN, + IWL_VENDOR_AUTH_RSNA = 0x6, + IWL_VENDOR_AUTH_RSNA_PSK, + IWL_VENDOR_AUTH_SAE = 0x9, + IWL_VENDOR_AUTH_MAX, +}; + +/** + * enum iwl_mvm_vendor_attr - attributes used in vendor commands + * @__IWL_MVM_VENDOR_ATTR_INVALID: attribute 0 is invalid + * @IWL_MVM_VENDOR_ATTR_VIF_ADDR: interface MAC address + * @IWL_MVM_VENDOR_ATTR_ADDR: MAC address + * @IWL_MVM_VENDOR_ATTR_SSID: SSID (binary attribute, 0..32 octets) + * @IWL_MVM_VENDOR_ATTR_STA_CIPHER: the cipher to use for the station with the + * mac address specified in &IWL_MVM_VENDOR_ATTR_ADDR. + * @IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN: u8 attribute. Indicates whether + * roaming is forbidden or not. Value 1 means roaming is forbidden, + * 0 mean roaming is allowed. + * @IWL_MVM_VENDOR_ATTR_AUTH_MODE: u32 attribute. Authentication mode type + * as specified in &enum iwl_vendor_auth_akm_mode. + * @IWL_MVM_VENDOR_ATTR_CHANNEL_NUM: u8 attribute. Contains channel number. + * @IWL_MVM_VENDOR_ATTR_BAND: u8 attribute. + * 0 for 2.4 GHz band, 1 for 5.2GHz band and 2 for 6GHz band. + * @IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL: u32 attribute. Channel number of + * collocated AP. Relevant for 6GHz AP info. + * @IWL_MVM_VENDOR_ATTR_COLLOC_ADDR: MAC address of a collocated AP. + * Relevant for 6GHz AP info. + * + * @NUM_IWL_MVM_VENDOR_ATTR: number of vendor attributes + * @MAX_IWL_MVM_VENDOR_ATTR: highest vendor attribute number + + */ +enum iwl_mvm_vendor_attr { + __IWL_MVM_VENDOR_ATTR_INVALID = 0x00, + IWL_MVM_VENDOR_ATTR_VIF_ADDR = 0x02, + IWL_MVM_VENDOR_ATTR_ADDR = 0x0a, + IWL_MVM_VENDOR_ATTR_SSID = 0x3d, + IWL_MVM_VENDOR_ATTR_STA_CIPHER = 0x51, + IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN = 0x64, + IWL_MVM_VENDOR_ATTR_AUTH_MODE = 0x65, + IWL_MVM_VENDOR_ATTR_CHANNEL_NUM = 0x66, + IWL_MVM_VENDOR_ATTR_BAND = 0x69, + IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL = 0x70, + IWL_MVM_VENDOR_ATTR_COLLOC_ADDR = 0x71, + + NUM_IWL_MVM_VENDOR_ATTR, + MAX_IWL_MVM_VENDOR_ATTR = NUM_IWL_MVM_VENDOR_ATTR - 1, +}; + +#endif /* __VENDOR_CMD_INTEL_H__ */ diff --git a/src/meson.build b/src/meson.build index ab696915..f3c87f1a 100644 --- a/src/meson.build +++ b/src/meson.build @@ -78,6 +78,7 @@ subdir('libnm-systemd-core') subdir('libnm-udev-aux') subdir('libnm-base') subdir('libnm-platform') +subdir('libnm-crypto') subdir('libnm-core-public') subdir('libnm-core-intern') subdir('libnm-core-aux-intern') diff --git a/src/n-dhcp4/src/n-dhcp4-c-connection.c b/src/n-dhcp4/src/n-dhcp4-c-connection.c index 2f660e3b..65328286 100644 --- a/src/n-dhcp4/src/n-dhcp4-c-connection.c +++ b/src/n-dhcp4/src/n-dhcp4-c-connection.c @@ -1147,16 +1147,21 @@ int n_dhcp4_c_connection_dispatch_timer(NDhcp4CConnection *connection, int n_dhcp4_c_connection_dispatch_io(NDhcp4CConnection *connection, NDhcp4Incoming **messagep) { _c_cleanup_(n_dhcp4_incoming_freep) NDhcp4Incoming *message = NULL; + _c_cleanup_(c_freep) uint8_t *buffer = NULL; char serv_addr[INET_ADDRSTRLEN]; char client_addr[INET_ADDRSTRLEN]; uint8_t type = 0; int r; + buffer = malloc(UINT16_MAX); + if (!buffer) + return -ENOMEM; + switch (connection->state) { case N_DHCP4_C_CONNECTION_STATE_PACKET: r = n_dhcp4_c_socket_packet_recv(connection->fd_packet, - connection->scratch_buffer, - sizeof(connection->scratch_buffer), + buffer, + UINT16_MAX, &message); if (!r) break; @@ -1165,8 +1170,8 @@ int n_dhcp4_c_connection_dispatch_io(NDhcp4CConnection *connection, return N_DHCP4_E_AGAIN; case N_DHCP4_C_CONNECTION_STATE_DRAINING: r = n_dhcp4_c_socket_packet_recv(connection->fd_packet, - connection->scratch_buffer, - sizeof(connection->scratch_buffer), + buffer, + UINT16_MAX, &message); if (!r) break; @@ -1188,8 +1193,8 @@ int n_dhcp4_c_connection_dispatch_io(NDhcp4CConnection *connection, /* fall-through */ case N_DHCP4_C_CONNECTION_STATE_UDP: r = n_dhcp4_c_socket_udp_recv(connection->fd_udp, - connection->scratch_buffer, - sizeof(connection->scratch_buffer), + buffer, + UINT16_MAX, &message); if (!r) break; diff --git a/src/n-dhcp4/src/n-dhcp4-private.h b/src/n-dhcp4/src/n-dhcp4-private.h index 191e946e..858c3d3a 100644 --- a/src/n-dhcp4/src/n-dhcp4-private.h +++ b/src/n-dhcp4/src/n-dhcp4-private.h @@ -334,15 +334,6 @@ struct NDhcp4CConnection { uint32_t client_ip; /* client IP address, or 0 */ uint32_t server_ip; /* server IP address, or 0 */ uint16_t mtu; /* client mtu, or 0 */ - - /* - * When we get DHCP packets from the kernel, we need a buffer to read - * the data into. Since UDP packets can be up to 2^16 bytes in size, we - * avoid placing it on the stack and instead read into this scratch - * buffer. It is purely meant as stack replacement, no data is returned - * through this buffer. - */ - uint8_t scratch_buffer[UINT16_MAX]; }; #define N_DHCP4_C_CONNECTION_NULL(_x) { \ diff --git a/src/nm-cloud-setup/main.c b/src/nm-cloud-setup/main.c index f6acadca..0c452acf 100644 --- a/src/nm-cloud-setup/main.c +++ b/src/nm-cloud-setup/main.c @@ -625,12 +625,7 @@ main(int argc, const char *const *argv) sigterm_cancellable = g_cancellable_new(); - sigterm_source = nm_g_source_attach(nm_g_unix_signal_source_new(SIGTERM, - G_PRIORITY_DEFAULT, - sigterm_handler, - sigterm_cancellable, - NULL), - NULL); + sigterm_source = nm_g_unix_signal_add_source(SIGTERM, sigterm_handler, sigterm_cancellable); provider = _provider_detect(sigterm_cancellable); if (!provider) diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.c b/src/nm-cloud-setup/nm-cloud-setup-utils.c index bf705549..e505f8bd 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.c +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.c @@ -146,7 +146,7 @@ nmcs_wait_for_objects_iterate_until_done(GMainContext *context, int timeout_msec nm_auto_destroy_and_unref_gsource GSource *idle_source = NULL; idle_source = - nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT, + nm_g_source_attach(nm_g_idle_source_new(G_PRIORITY_DEFAULT_IDLE, _wait_for_objects_iterate_until_done_idle_cb, &data, NULL), @@ -364,7 +364,7 @@ nmcs_utils_poll(int poll_timeout_ms, } poll_task_data->source_next_poll = nm_g_source_attach( - nm_g_idle_source_new(G_PRIORITY_DEFAULT, _poll_start_cb, poll_task_data, NULL), + nm_g_idle_source_new(G_PRIORITY_DEFAULT_IDLE, _poll_start_cb, poll_task_data, NULL), poll_task_data->context); if (cancellable) { diff --git a/src/nm-cloud-setup/nm-http-client.c b/src/nm-cloud-setup/nm-http-client.c index 7ef9f38d..a0053d47 100644 --- a/src/nm-cloud-setup/nm-http-client.c +++ b/src/nm-cloud-setup/nm-http-client.c @@ -680,14 +680,13 @@ _mhandle_socketfunction_cb(CURL *e_handle, condition = 0; if (condition) { - source_socket = nm_g_unix_fd_source_new(fd, - condition, - G_PRIORITY_DEFAULT, - _mhandle_socket_cb, - self, - NULL); - g_source_attach(source_socket, priv->context); - + source_socket = _source_attach(self, + nm_g_unix_fd_source_new(fd, + condition, + G_PRIORITY_DEFAULT, + _mhandle_socket_cb, + self, + NULL)); g_hash_table_insert(priv->source_sockets_hashtable, GINT_TO_POINTER(fd), source_socket); } } diff --git a/src/nm-dispatcher/tests/test-dispatcher-envp.c b/src/nm-dispatcher/tests/test-dispatcher-envp.c index f53bb1c1..51d31544 100644 --- a/src/nm-dispatcher/tests/test-dispatcher-envp.c +++ b/src/nm-dispatcher/tests/test-dispatcher-envp.c @@ -530,8 +530,11 @@ test_generic(const char *file, const char *override_vpn_ip_iface) g_assert((!denv && error_message) || (denv && !error_message)); - if (error_message) + if (error_message) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER g_error("FAILED: %s", error_message); + NM_PRAGMA_WARNING_REENABLE + } if (g_strv_length(denv) != g_hash_table_size(expected_env)) { _print_env(NM_CAST_STRV_CC(denv), expected_env); @@ -552,8 +555,10 @@ test_generic(const char *file, const char *override_vpn_ip_iface) foo = g_hash_table_lookup(expected_env, i_value); if (!foo) { + NM_PRAGMA_WARNING_DISABLE_DANGLING_POINTER _print_env(NM_CAST_STRV_CC(denv), expected_env); g_error("Failed to find %s in environment", i_value); + NM_PRAGMA_WARNING_REENABLE } } diff --git a/src/nm-online/nm-online.c b/src/nm-online/nm-online.c index 340c2d19..ee4477db 100644 --- a/src/nm-online/nm-online.c +++ b/src/nm-online/nm-online.c @@ -246,7 +246,8 @@ main(int argc, char *argv[]) 0, G_OPTION_ARG_INT, &t_secs, - N_("Time to wait for a connection, in seconds (without the option, default value is 30)"), + N_("Time to wait for a connection, in seconds (without the option, default value is 30). " + "Maximum value is 2073600 seconds."), ""}, {"exit", 'x', @@ -289,7 +290,7 @@ main(int argc, char *argv[]) return EXIT_FAILURE_ERROR; } - if (t_secs < 0 || t_secs > 3600) { + if (t_secs < 0 || t_secs > 2073600) { g_printerr("%s: %s\n", argv[0], _("Invalid option. Please use --help to see a list of valid options.")); diff --git a/src/nmcli/common.c b/src/nmcli/common.c index 26398c84..f42f76e4 100644 --- a/src/nmcli/common.c +++ b/src/nmcli/common.c @@ -889,13 +889,7 @@ nmc_readline_helper(const NmcConfig *nmc_config, const char *prompt) nmc_set_in_readline(TRUE); - io_source = nm_g_unix_fd_source_new(STDIN_FILENO, - G_IO_IN, - G_PRIORITY_DEFAULT, - stdin_ready_cb, - NULL, - NULL); - g_source_attach(io_source, NULL); + io_source = nm_g_unix_fd_add_source(STDIN_FILENO, G_IO_IN, stdin_ready_cb, NULL); read_again: rl_string = NULL; diff --git a/src/nmcli/connections.c b/src/nmcli/connections.c index 025f96a1..ecf8e2e2 100644 --- a/src/nmcli/connections.c +++ b/src/nmcli/connections.c @@ -513,6 +513,40 @@ _con_show_fcn_get_type(NMConnection *c, NMActiveConnection *ac, NMMetaAccessorGe return connection_type_to_display(s, get_type); } +static const char * +_connection_check_deprecated(NMConnection *c) +{ + NMSettingWirelessSecurity *s_wsec; + const char *key_mgmt; + const char *type; + + type = nm_connection_get_connection_type(c); + + if (strcmp(type, NM_SETTING_WIMAX_SETTING_NAME) == 0) + return _("WiMax is no longer supported"); + + s_wsec = nm_connection_get_setting_wireless_security(c); + if (s_wsec) { + key_mgmt = nm_setting_wireless_security_get_key_mgmt(s_wsec); + if (NM_IN_STRSET(key_mgmt, "ieee8021x", "none")) + return _("WEP encryption is known to be insecure"); + } + + return NULL; +} + +static NMMetaColor +_connection_to_color(NMConnection *c, NMActiveConnection *ac) +{ + if (ac) + return nmc_active_connection_state_to_color(ac); + + if (_connection_check_deprecated(c)) + return NM_META_COLOR_CONNECTION_DEPRECATED; + + return NM_META_COLOR_CONNECTION_UNKNOWN; +} + static gconstpointer _metagen_con_show_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) { @@ -523,7 +557,7 @@ _metagen_con_show_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) const char *s; char *s_mut; - NMC_HANDLE_COLOR(nmc_active_connection_state_to_color(ac)); + NMC_HANDLE_COLOR(_connection_to_color(c, ac)); if (c) s_con = nm_connection_get_setting_connection(c); @@ -1197,10 +1231,10 @@ usage_connection_delete(void) { g_printerr(_("Usage: nmcli connection delete { ARGUMENTS | help }\n" "\n" - "ARGUMENTS := [id | uuid | path] \n" + "ARGUMENTS := [id | uuid | path] , ...\n" "\n" - "Delete a connection profile.\n" - "The profile is identified by its name, UUID or D-Bus path.\n\n")); + "Delete connection profiles.\n" + "The profiles are identified by their name, UUID or D-Bus path.\n\n")); } static void @@ -1260,6 +1294,17 @@ usage_connection_export(void) "The data are directed to standard output or to a file if a name is given.\n\n")); } +static void +usage_connection_migrate(void) +{ + g_printerr(_("Usage: nmcli connection migrate { ARGUMENTS | help }\n" + "\n" + "ARGUMENTS := [--plugin ] [id | uuid | path] , ...\n" + "\n" + "Migrate connection profiles to a different settings plugin,\n" + "such as \"keyfile\" (default) or \"ifcfg-rh\".\n\n")); +} + static void quit(void) { @@ -1410,13 +1455,13 @@ nmc_connection_profile_details(NMConnection *connection, NmCli *nmc) TRUE, &prop_array, &error); - if (error) { + if (!print_settings_array) { + g_return_val_if_fail(error, FALSE); g_string_printf(nmc->return_text, _("Error: 'connection show': %s"), error->message); g_error_free(error); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return FALSE; } - g_assert(print_settings_array); /* Main header */ { @@ -1478,9 +1523,6 @@ nmc_active_connection_state_to_color(NMActiveConnection *ac) { NMActiveConnectionState state; - if (!ac) - return NM_META_COLOR_CONNECTION_UNKNOWN; - if (NM_FLAGS_HAS(nm_active_connection_get_state_flags(ac), NM_ACTIVATION_STATE_FLAG_EXTERNAL)) return NM_META_COLOR_CONNECTION_EXTERNAL; @@ -1520,13 +1562,13 @@ nmc_active_connection_details(NMActiveConnection *acon, NmCli *nmc) TRUE, &group_fields, &error); - if (error) { + if (!print_groups) { + g_return_val_if_fail(error, FALSE); g_string_printf(nmc->return_text, _("Error: 'connection show': %s"), error->message); g_error_free(error); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return FALSE; } - g_assert(print_groups); /* Main header */ { @@ -1881,6 +1923,7 @@ con_show_get_items_cmp(gconstpointer pa, gconstpointer pb, gpointer user_data) } } + NM_CMP_DIRECT(!!_connection_check_deprecated(c_a), !!_connection_check_deprecated(c_b)); NM_CMP_DIRECT_STRCMP0(nm_connection_get_uuid(c_a), nm_connection_get_uuid(c_b)); NM_CMP_DIRECT_STRCMP0(nm_connection_get_path(c_a), nm_connection_get_path(c_b)); } @@ -2150,7 +2193,7 @@ do_connections_show(const NMCCommand *cmd, NmCli *nmc, int argc, const char *con goto finish; break; default: - g_assert_not_reached(); + g_return_if_reached(); break; } } @@ -2470,7 +2513,7 @@ find_device_for_connection(NmCli *nmc, g_return_val_if_fail(error == NULL || *error == NULL, FALSE); s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_val_if_fail(s_con, FALSE); con_type = nm_setting_connection_get_connection_type(s_con); if (nm_streq(con_type, NM_SETTING_VPN_SETTING_NAME)) { @@ -2959,7 +3002,7 @@ do_connection_up(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const gs_free char *line = NULL; /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); line = nmc_readline(&nmc->nmc_config, PROMPT_CONNECTION); nmc_string_to_arg_array(line, NULL, TRUE, &arg_arr, &arg_num); @@ -3215,7 +3258,7 @@ do_connection_down(const NMCCommand *cmd, NmCli *nmc, int argc, const char *cons if (argc == 0) { /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); if (nmc->ask) { gs_free char *line = NULL; @@ -3660,7 +3703,8 @@ is_setting_mandatory(NMConnection *connection, NMSetting *setting) guint i; s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_val_if_fail(s_con, FALSE); + c_type = nm_setting_connection_get_connection_type(s_con); s_type = nm_setting_connection_get_slave_type(s_con); @@ -3739,7 +3783,7 @@ normalized_master_for_slave(const GPtrArray *connections, for (i = 0; i < connections->len; i++) { connection = NM_CONNECTION(connections->pdata[i]); s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_val_if_fail(s_con, NULL); con_type = nm_setting_connection_get_connection_type(s_con); if (type && !nm_streq0(con_type, type)) continue; @@ -4243,7 +4287,7 @@ con_settings(NMConnection *connection, g_return_val_if_fail(slv_settings, FALSE); s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_val_if_fail(s_con, FALSE); con_type = nm_setting_connection_get_slave_type(s_con); *slv_settings = nm_meta_setting_info_valid_parts_for_slave_type(con_type, NULL); @@ -5208,6 +5252,46 @@ nmc_process_connection_properties(NmCli *nmc, return TRUE; } +static void +connection_warnings(NmCli *nmc, NMConnection *connection) +{ + const GPtrArray *connections; + guint i, found; + const char *id; + const char *deprecated; + + deprecated = _connection_check_deprecated(NM_CONNECTION(connection)); + if (deprecated) + g_printerr(_("Warning: %s.\n"), deprecated); + + connections = nm_client_get_connections(nmc->client); + if (!connections) + return; + + id = nm_connection_get_id(connection); + found = 0; + for (i = 0; i < connections->len; i++) { + NMConnection *candidate = NM_CONNECTION(connections->pdata[i]); + + if ((NMConnection *) connection == candidate) + continue; + if (nm_streq0(nm_connection_get_id(candidate), id)) + found++; + } + + if (found > 0) { + g_printerr(g_dngettext(GETTEXT_PACKAGE, + "Warning: There is another connection with the name '%1$s'. " + "Reference the connection by its uuid '%2$s'\n", + "Warning: There are %3$u other connections with the name " + "'%1$s'. Reference the connection by its uuid '%2$s'\n", + found), + id, + nm_connection_get_uuid(NM_CONNECTION(connection)), + found); + } +} + static void add_connection_cb(GObject *client, GAsyncResult *result, gpointer user_data) { @@ -5215,8 +5299,6 @@ add_connection_cb(GObject *client, GAsyncResult *result, gpointer user_data) NmCli *nmc = info->nmc; NMRemoteConnection *connection; GError *error = NULL; - const GPtrArray *connections; - guint i, found; connection = nm_client_add_connection2_finish(NM_CLIENT(client), result, NULL, &error); if (error) { @@ -5227,29 +5309,7 @@ add_connection_cb(GObject *client, GAsyncResult *result, gpointer user_data) g_error_free(error); nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION; } else { - connections = nm_client_get_connections(nmc->client); - if (connections) { - found = 0; - for (i = 0; i < connections->len; i++) { - NMConnection *candidate = NM_CONNECTION(connections->pdata[i]); - - if ((NMConnection *) connection == candidate) - continue; - if (nm_streq0(nm_connection_get_id(candidate), info->new_id)) - found++; - } - if (found > 0) { - g_printerr(g_dngettext(GETTEXT_PACKAGE, - "Warning: There is another connection with the name '%1$s'. " - "Reference the connection by its uuid '%2$s'\n", - "Warning: There are %3$u other connections with the name " - "'%1$s'. Reference the connection by its uuid '%2$s'\n", - found), - info->new_id, - nm_connection_get_uuid(NM_CONNECTION(connection)), - found); - } - } + connection_warnings(nmc, NM_CONNECTION(connection)); /* We print here human readable text, but as scripts might parse this output * (with LANG=C), this is important to not change in the future. At least @@ -7252,7 +7312,8 @@ editor_show_status_line(NMConnection *connection, gboolean dirty, gboolean temp) const char *con_type, *con_id, *con_uuid; s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_if_fail(s_con); + con_type = nm_setting_connection_get_connection_type(s_con); con_id = nm_connection_get_id(connection); con_uuid = nm_connection_get_uuid(connection); @@ -7595,15 +7656,18 @@ confirm_connection_saving(const NmcConfig *nmc_config, NMConnection *local, NMCo gboolean confirmed = TRUE; s_con_loc = nm_connection_get_setting_connection(local); - g_assert(s_con_loc); + g_return_val_if_fail(s_con_loc, FALSE); + ac_local = nm_setting_connection_get_autoconnect(s_con_loc); if (remote) { s_con_rem = nm_connection_get_setting_connection(remote); - g_assert(s_con_rem); + g_return_val_if_fail(s_con_rem, FALSE); + ac_remote = nm_setting_connection_get_autoconnect(s_con_rem); - } else + } else { ac_remote = FALSE; + } if (ac_local && !ac_remote) { gs_free char *answer = NULL; @@ -8280,9 +8344,12 @@ editor_menu_main(NmCli *nmc, NMConnection *connection, const char *connection_ty connection_changed = FALSE; } - source = g_timeout_source_new(10 * NM_UTILS_MSEC_PER_SEC); - g_source_set_callback(source, editor_save_timeout, &timeout, NULL); - g_source_attach(source, g_main_loop_get_context(loop)); + source = nm_g_source_attach(nm_g_timeout_source_new(10 * NM_UTILS_MSEC_PER_SEC, + G_PRIORITY_DEFAULT, + editor_save_timeout, + &timeout, + NULL), + g_main_loop_get_context(loop)); while (!nmc_editor_cb_called && !timeout) g_main_context_iteration(NULL, TRUE); @@ -8527,7 +8594,8 @@ editor_init_new_connection(NmCli *nmc, NMConnection *connection, const char *sla const char *con_type; s_con = nm_connection_get_setting_connection(connection); - g_assert(s_con); + g_return_if_fail(s_con); + con_type = nm_setting_connection_get_connection_type(s_con); /* Initialize new connection according to its type using sensible defaults. */ @@ -8851,6 +8919,8 @@ modify_connection_cb(GObject *connection, GAsyncResult *result, gpointer user_da error->message); nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; } else { + connection_warnings(nmc, NM_CONNECTION(connection)); + if (nmc->nmc_config.print_output == NMC_PRINT_PRETTY) { g_print(_("Connection '%s' (%s) successfully modified.\n"), nm_connection_get_id(NM_CONNECTION(connection)), @@ -8955,7 +9025,7 @@ do_connection_clone(const NMCCommand *cmd, NmCli *nmc, int argc, const char *con gs_free char *line = NULL; /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); line = nmc_readline(&nmc->nmc_config, PROMPT_CONNECTION); nmc_string_to_arg_array(line, NULL, TRUE, &arg_arr, &arg_num); @@ -9054,7 +9124,7 @@ do_connection_delete(const NMCCommand *cmd, NmCli *nmc, int argc, const char *co gs_free char *line = NULL; /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); line = nmc_readline(&nmc->nmc_config, PROMPT_CONNECTIONS); nmc_string_to_arg_array(line, NULL, TRUE, &arg_arr, &arg_num); @@ -9079,8 +9149,11 @@ do_connection_delete(const NMCCommand *cmd, NmCli *nmc, int argc, const char *co nmc->return_value = error->code; g_clear_error(&error); - if (nmc->return_value != NMC_RESULT_ERROR_NOT_FOUND) + if (nmc->return_value != NMC_RESULT_ERROR_NOT_FOUND) { + g_string_free(invalid_cons, TRUE); + invalid_cons = NULL; goto finish; + } if (!invalid_cons) invalid_cons = g_string_new(NULL); @@ -9133,7 +9206,6 @@ finish: g_string_printf(nmc->return_text, _("Error: cannot delete unknown connection(s): %s."), invalid_cons->str); - nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND; } } @@ -9192,7 +9264,7 @@ do_connection_monitor(const NMCCommand *cmd, NmCli *nmc, int argc, const char *c /* No connections specified. Monitor all. */ /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); connections = nm_client_get_connections(nmc->client); } else { @@ -9349,7 +9421,7 @@ do_connection_import(const NMCCommand *cmd, NmCli *nmc, int argc, const char *co if (argc == 0) { /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); if (nmc->ask) { type_ask = @@ -9492,7 +9564,7 @@ do_connection_export(const NMCCommand *cmd, NmCli *nmc, int argc, const char *co gs_free char *line = NULL; /* nmc_do_cmd() should not call this with argc=0. */ - g_assert(!nmc->complete); + g_return_if_fail(!nmc->complete); line = nmc_readline(&nmc->nmc_config, PROMPT_VPN_CONNECTION); nmc_string_to_arg_array(line, NULL, TRUE, &arg_arr, &arg_num); @@ -9586,6 +9658,154 @@ finish: unlink(path); } +static void +migrate_cb(GObject *obj, GAsyncResult *result, gpointer user_data) +{ + ConnectionCbInfo *info = (ConnectionCbInfo *) user_data; + NMConnection *connection = NM_CONNECTION(obj); + gs_unref_variant GVariant *res = NULL; + GError *error = NULL; + + res = nm_remote_connection_update2_finish(NM_REMOTE_CONNECTION(obj), result, &error); + if (!res) { + g_string_printf(info->nmc->return_text, _("Error: not all connections migrated.")); + g_printerr(_("Error: Connection migration failed: %s\n"), error->message); + g_error_free(error); + info->nmc->return_value = NMC_RESULT_ERROR_UNKNOWN; + } else { + g_print(_("Connection '%s' (%s) successfully migrated.\n"), + nm_connection_get_id(connection), + nm_connection_get_uuid(connection)); + } + connection_cb_info_finish(info, obj); +} + +static void +do_connection_migrate(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv) +{ + NMConnection *connection; + ConnectionCbInfo *info = NULL; + gs_strfreev char **arg_arr = NULL; + const char *const *arg_ptr; + guint i; + int arg_num; + nm_auto_free_gstring GString *invalid_cons = NULL; + gs_unref_ptrarray GPtrArray *found_cons = NULL; + GError *error = NULL; + const char *plugin = "keyfile"; + const GPtrArray *connections = NULL; + int option; + + if (nmc->timeout == -1) + nmc->timeout = 10; + + while ((option = next_arg(nmc, &argc, &argv, "--plugin", NULL)) > 0) { + switch (option) { + case 1: /* --plugin */ + argc--; + argv++; + if (!argc) { + g_set_error_literal(&error, NMCLI_ERROR, 0, _("'--plugin' argument is missing")); + goto finish; + } + plugin = *argv; + break; + default: + g_return_if_reached(); + break; + } + } + + arg_ptr = argv; + arg_num = argc; + if (argc == 0) { + if (nmc->ask) { + gs_free char *line = NULL; + + /* nmc_do_cmd() should not call this with argc=0. */ + g_return_if_fail(!nmc->complete); + + line = nmc_readline(&nmc->nmc_config, PROMPT_CONNECTIONS); + nmc_string_to_arg_array(line, NULL, TRUE, &arg_arr, &arg_num); + arg_ptr = (const char *const *) arg_arr; + } + } + + while (arg_num > 0) { + const char *cur_selector, *cur_value; + + connection = + get_connection(nmc, &arg_num, &arg_ptr, &cur_selector, &cur_value, &found_cons, &error); + if (!connection) { + if (!nmc->complete) + g_printerr(_("Error: %s.\n"), error->message); + g_string_printf(nmc->return_text, _("Error: not all connections found.")); + nmc->return_value = error->code; + g_clear_error(&error); + + if (nmc->return_value != NMC_RESULT_ERROR_NOT_FOUND) { + g_string_free(invalid_cons, TRUE); + invalid_cons = NULL; + goto finish; + } + + if (!invalid_cons) + invalid_cons = g_string_new(NULL); + if (cur_selector) + g_string_append_printf(invalid_cons, "%s '%s', ", cur_selector, cur_value); + else + g_string_append_printf(invalid_cons, "'%s', ", cur_value); + } + } + + if (nmc->complete) + goto finish; + + if (invalid_cons) + goto finish; + + if (!found_cons) { + /* No connections specified explicitly? Fine, add all. */ + found_cons = g_ptr_array_new(); + connections = nm_client_get_connections(nmc->client); + for (i = 0; i < connections->len; i++) { + connection = connections->pdata[i]; + g_ptr_array_add(found_cons, connection); + } + } + + info = g_slice_new0(ConnectionCbInfo); + info->nmc = nmc; + info->obj_list = g_ptr_array_sized_new(found_cons->len); + for (i = 0; i < found_cons->len; i++) { + connection = found_cons->pdata[i]; + g_ptr_array_add(info->obj_list, g_object_ref(connection)); + } + info->timeout_id = g_timeout_add_seconds(nmc->timeout, connection_op_timeout_cb, info); + info->cancellable = g_cancellable_new(); + + nmc->nowait_flag = (nmc->timeout == 0); + nmc->should_wait++; + + for (i = 0; i < found_cons->len; i++) { + nm_remote_connection_update2(NM_REMOTE_CONNECTION(found_cons->pdata[i]), + NULL, + 0, + g_variant_new_parsed("{'plugin': <%s>}", plugin), + info->cancellable, + migrate_cb, + info); + } + +finish: + if (invalid_cons) { + g_string_truncate(invalid_cons, invalid_cons->len - 2); /* truncate trailing ", " */ + g_string_printf(nmc->return_text, + _("Error: cannot migrate unknown connection(s): %s."), + invalid_cons->str); + } +} + static char * gen_func_connection_names(const char *text, int state) { @@ -9693,6 +9913,7 @@ nmc_command_func_connection(const NMCCommand *cmd, NmCli *nmc, int argc, const c {"clone", do_connection_clone, usage_connection_clone, TRUE, TRUE}, {"import", do_connection_import, usage_connection_import, TRUE, TRUE}, {"export", do_connection_export, usage_connection_export, TRUE, TRUE}, + {"migrate", do_connection_migrate, usage_connection_migrate, TRUE, TRUE}, {"monitor", do_connection_monitor, usage_connection_monitor, TRUE, TRUE}, {NULL, do_connections_show, usage, TRUE, TRUE}, }; diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index e23ef681..2bfc4cec 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -1216,12 +1216,30 @@ get_device(NmCli *nmc, int *argc, const char *const **argv, GError **error) return devices[i]; } +static bool +_ap_is_wep(NMAccessPoint *ap) +{ + NM80211ApFlags flags = nm_access_point_get_flags(ap); + NM80211ApSecurityFlags wpa_flags = nm_access_point_get_wpa_flags(ap); + NM80211ApSecurityFlags rsn_flags = nm_access_point_get_rsn_flags(ap); + + if ((flags & NM_802_11_AP_FLAGS_PRIVACY) && (wpa_flags == NM_802_11_AP_SEC_NONE) + && (rsn_flags == NM_802_11_AP_SEC_NONE)) { + return TRUE; + } + + return FALSE; +} + static int compare_aps(gconstpointer a, gconstpointer b, gpointer user_data) { NMAccessPoint *apa = *(NMAccessPoint **) a; NMAccessPoint *apb = *(NMAccessPoint **) b; + /* Sort the deprecated WEP connections last. */ + NM_CMP_DIRECT(_ap_is_wep(apb), _ap_is_wep(apa)); + NM_CMP_DIRECT(nm_access_point_get_strength(apb), nm_access_point_get_strength(apa)); NM_CMP_DIRECT(nm_access_point_get_frequency(apa), nm_access_point_get_frequency(apb)); NM_CMP_DIRECT(nm_access_point_get_max_bitrate(apb), nm_access_point_get_max_bitrate(apa)); @@ -1249,22 +1267,19 @@ sort_access_points(const GPtrArray *aps) } typedef struct { - NmCli *nmc; - int index; - guint32 output_flags; - const char *active_bssid; - const char *device; - GPtrArray *output_data; + NmCli *nmc; + NMAccessPoint *active_ap; + const char *device; + GPtrArray *output_data; + int *p_index; + guint32 output_flags; } APInfo; static void -fill_output_access_point(gpointer data, gpointer user_data) +fill_output_access_point(NMAccessPoint *ap, const APInfo *info) { - NMAccessPoint *ap = NM_ACCESS_POINT(data); - APInfo *info = (APInfo *) user_data; NmcOutputField *arr; - gboolean active = FALSE; - NM80211ApFlags flags; + gboolean active; NM80211ApSecurityFlags wpa_flags, rsn_flags; guint32 freq, bitrate; guint8 strength; @@ -1284,14 +1299,9 @@ fill_output_access_point(gpointer data, gpointer user_data) const char *sig_bars; NMMetaColor color; - if (info->active_bssid) { - const char *current_bssid = nm_access_point_get_bssid(ap); - if (current_bssid && !strcmp(current_bssid, info->active_bssid)) - active = TRUE; - } + active = (info->active_ap == ap); /* Get AP properties */ - flags = nm_access_point_get_flags(ap); wpa_flags = nm_access_point_get_wpa_flags(ap); rsn_flags = nm_access_point_get_rsn_flags(ap); ssid = nm_access_point_get_ssid(ap); @@ -1320,26 +1330,27 @@ fill_output_access_point(gpointer data, gpointer user_data) security_str = g_string_new(NULL); - if ((flags & NM_802_11_AP_FLAGS_PRIVACY) && (wpa_flags == NM_802_11_AP_SEC_NONE) - && (rsn_flags == NM_802_11_AP_SEC_NONE)) { + if (_ap_is_wep(ap)) { g_string_append(security_str, "WEP "); - } - if (wpa_flags != NM_802_11_AP_SEC_NONE) { - g_string_append(security_str, "WPA1 "); - } - if ((rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_PSK) - || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { - g_string_append(security_str, "WPA2 "); - } - if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_SAE) { - g_string_append(security_str, "WPA3 "); - } - if (NM_FLAGS_ANY(rsn_flags, NM_802_11_AP_SEC_KEY_MGMT_OWE | NM_802_11_AP_SEC_KEY_MGMT_OWE_TM)) { - g_string_append(security_str, "OWE "); - } - if ((wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X) - || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { - g_string_append(security_str, "802.1X "); + } else { + if (wpa_flags != NM_802_11_AP_SEC_NONE) { + g_string_append(security_str, "WPA1 "); + } + if ((rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_PSK) + || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { + g_string_append(security_str, "WPA2 "); + } + if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_SAE) { + g_string_append(security_str, "WPA3 "); + } + if (NM_FLAGS_ANY(rsn_flags, + NM_802_11_AP_SEC_KEY_MGMT_OWE | NM_802_11_AP_SEC_KEY_MGMT_OWE_TM)) { + g_string_append(security_str, "OWE "); + } + if ((wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X) + || (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { + g_string_append(security_str, "802.1X "); + } } if (security_str->len > 0) @@ -1348,7 +1359,7 @@ fill_output_access_point(gpointer data, gpointer user_data) arr = nmc_dup_fields_array((const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list, info->output_flags); - ap_name = g_strdup_printf("AP[%d]", info->index++); /* AP */ + ap_name = g_strdup_printf("AP[%d]", ++(*info->p_index)); /* AP */ set_val_str(arr, 0, ap_name); set_val_str(arr, 1, ssid_str); set_val_str(arr, 2, ssid_hex_str); @@ -1374,6 +1385,8 @@ fill_output_access_point(gpointer data, gpointer user_data) /* Set colors */ color = wifi_signal_to_color(strength); + if (_ap_is_wep(ap)) + color = NM_META_COLOR_WIFI_DEPRECATED; set_val_color_all(arr, color); if (active) arr[15].color = NM_META_COLOR_CONNECTION_ACTIVATED; @@ -1381,6 +1394,12 @@ fill_output_access_point(gpointer data, gpointer user_data) g_ptr_array_add(info->output_data, arr); } +static void +fill_output_access_point_void(gpointer data, gpointer user_data) +{ + fill_output_access_point(data, user_data); +} + static char * bluetooth_caps_to_string(NMBluetoothCapabilities caps) { @@ -1679,18 +1698,14 @@ show_device_info(NMDevice *device, NmCli *nmc) /* Wireless specific information */ if ((NM_IS_DEVICE_WIFI(device))) { - NMAccessPoint *active_ap = NULL; - const char *active_bssid = NULL; - /* section AP */ if (!g_ascii_strcasecmp(nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[4]->name)) { + NMAccessPoint *active_ap = NULL; NMC_OUTPUT_DATA_DEFINE_SCOPED(out); - if (state == NM_DEVICE_STATE_ACTIVATED) { - active_ap = nm_device_wifi_get_active_access_point(NM_DEVICE_WIFI(device)); - active_bssid = active_ap ? nm_access_point_get_bssid(active_ap) : NULL; - } + if (state == NM_DEVICE_STATE_ACTIVATED) + active_ap = nm_device_wifi_get_active_access_point(NM_DEVICE_WIFI(device)); tmpl = (const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list; out_indices = @@ -1703,19 +1718,20 @@ show_device_info(NMDevice *device, NmCli *nmc) g_ptr_array_add(out.output_data, arr); { - gs_unref_ptrarray GPtrArray *aps = NULL; - APInfo info = { + gs_unref_ptrarray GPtrArray *aps = NULL; + int info_index = 0; + const APInfo info = { .nmc = nmc, - .index = 1, + .p_index = &info_index, .output_flags = NMC_OF_FLAG_SECTION_PREFIX, - .active_bssid = active_bssid, + .active_ap = active_ap, .device = nm_device_get_iface(device), .output_data = out.output_data, }; aps = sort_access_points( nm_device_wifi_get_access_points(NM_DEVICE_WIFI(device))); - g_ptr_array_foreach(aps, fill_output_access_point, &info); + g_ptr_array_foreach(aps, fill_output_access_point_void, (gpointer) &info); } print_data_prepare_width(out.output_data); @@ -2991,32 +3007,30 @@ find_ap_on_device(NMDevice *device, const char *bssid, const char *ssid, gboolea static void show_access_point_info(NMDeviceWifi *wifi, NmCli *nmc, NmcOutputData *out) { - NMAccessPoint *active_ap = NULL; - const char *active_bssid = NULL; + NMAccessPoint *active_ap = NULL; NmcOutputField *arr; - if (nm_device_get_state(NM_DEVICE(wifi)) == NM_DEVICE_STATE_ACTIVATED) { - active_ap = nm_device_wifi_get_active_access_point(wifi); - active_bssid = active_ap ? nm_access_point_get_bssid(active_ap) : NULL; - } + if (nm_device_get_state(NM_DEVICE(wifi)) == NM_DEVICE_STATE_ACTIVATED) + active_ap = nm_device_wifi_get_active_access_point(wifi); arr = nmc_dup_fields_array((const NMMetaAbstractInfo *const *) nmc_fields_dev_wifi_list, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES); g_ptr_array_add(out->output_data, arr); { - gs_unref_ptrarray GPtrArray *aps = NULL; - APInfo info = { + gs_unref_ptrarray GPtrArray *aps = NULL; + int info_index = 0; + const APInfo info = { .nmc = nmc, - .index = 1, + .p_index = &info_index, .output_flags = 0, - .active_bssid = active_bssid, + .active_ap = active_ap, .device = nm_device_get_iface(NM_DEVICE(wifi)), .output_data = out->output_data, }; aps = sort_access_points(nm_device_wifi_get_access_points(wifi)); - g_ptr_array_foreach(aps, fill_output_access_point, &info); + g_ptr_array_foreach(aps, fill_output_access_point_void, (gpointer) &info); } print_data_prepare_width(out->output_data); @@ -3032,7 +3046,6 @@ wifi_print_aps(NMDeviceWifi *wifi, { NMAccessPoint *ap = NULL; const GPtrArray *aps; - APInfo *info; guint i; NmcOutputField *arr; const char *base_hdr = _("Wi-Fi scan list"); @@ -3061,23 +3074,23 @@ wifi_print_aps(NMDeviceWifi *wifi, ap = candidate_ap; } if (ap) { + int info_index = 0; + const APInfo info = { + .nmc = nmc, + .p_index = &info_index, + .output_flags = 0, + .device = nm_device_get_iface(NM_DEVICE(wifi)), + .output_data = out.output_data, + }; + /* Add headers (field names) */ arr = nmc_dup_fields_array(tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES); g_ptr_array_add(out.output_data, arr); - info = g_malloc0(sizeof(APInfo)); - info->nmc = nmc; - info->index = 1; - info->output_flags = 0; - info->active_bssid = NULL; - info->device = nm_device_get_iface(NM_DEVICE(wifi)); - info->output_data = out.output_data; - - fill_output_access_point(ap, info); + fill_output_access_point(ap, &info); print_data_prepare_width(out.output_data); print_data(&nmc->nmc_config, &nmc->pager_data, out_indices, header_name, 0, &out); - g_free(info); *bssid_found = TRUE; empty_line = TRUE; diff --git a/src/nmcli/general.c b/src/nmcli/general.c index 65437e79..d5a6788f 100644 --- a/src/nmcli/general.c +++ b/src/nmcli/general.c @@ -145,12 +145,22 @@ _metagen_general_status_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARGS) v_bool = nm_client_networking_get_enabled(nmc->client); goto enabled_out; case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_WIFI_HW: + if (!(nm_client_get_radio_flags(nmc->client) & NM_RADIO_FLAG_WLAN_AVAILABLE)) { + NMC_HANDLE_COLOR(NM_META_COLOR_NONE); + value = N_("missing"); + goto translate_and_out; + } v_bool = nm_client_wireless_hardware_get_enabled(nmc->client); goto enabled_out; case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_WIFI: v_bool = nm_client_wireless_get_enabled(nmc->client); goto enabled_out; case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_WWAN_HW: + if (!(nm_client_get_radio_flags(nmc->client) & NM_RADIO_FLAG_WWAN_AVAILABLE)) { + NMC_HANDLE_COLOR(NM_META_COLOR_NONE); + value = N_("missing"); + goto translate_and_out; + } v_bool = nm_client_wwan_hardware_get_enabled(nmc->client); goto enabled_out; case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_WWAN: diff --git a/src/nmcli/generate-docs-nm-settings-nmcli.xml b/src/nmcli/generate-docs-nm-settings-nmcli.xml index 1d329305..525b36b6 100644 --- a/src/nmcli/generate-docs-nm-settings-nmcli.xml +++ b/src/nmcli/generate-docs-nm-settings-nmcli.xml @@ -371,7 +371,7 @@ + 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. See NetworkManager(8) manual about the secret-key and the host identity. 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." /> @@ -380,7 +380,7 @@ 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." /> + description="Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times." /> + description="A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5)." /> @@ -911,7 +911,7 @@ description="PAC URL for obtaining PAC file." /> + description="The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two." /> + 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. See NetworkManager(8) manual about the secret-key and the host identity. 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." /> @@ -380,7 +380,7 @@ 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." /> + description="Whether or not the connection should be automatically connected by NetworkManager when the resources for the connection are available. TRUE to automatically activate the connection, FALSE to require manual intervention to activate the connection. Autoconnect happens when the circumstances are suitable. That means for example that the device is currently managed and not active. Autoconnect thus never replaces or competes with an already active profile. Note that autoconnect is not implemented for VPN profiles. See "secondaries" as an alternative to automatically connect VPN profiles. If multiple profiles are ready to autoconnect on the same device, the one with the better "connection.autoconnect-priority" is chosen. If the priorities are equal, then the most recently connected profile is activated. If the profiles were not connected earlier or their "connection.timestamp" is identical, the choice is undefined. Depending on "connection.multi-connect", a profile can (auto)connect only once at a time or multiple times." /> + description="A list of IPv6 addresses and their prefix length. Multiple addresses can be separated by comma. For example "2001:db8:85a3::8a2e:370:7334/64, 2001:db8:85a3::5/64". The addresses are listed in decreasing priority, meaning the first address will be the primary address. This can make a difference with IPv6 source address selection (RFC 6724, section 5)." /> @@ -911,7 +911,7 @@ description="PAC URL for obtaining PAC file." /> + description="The PAC script. In the profile this must be an UTF-8 encoded javascript code that defines a FindProxyForURL() function. When setting the property in nmcli, a filename is accepted too. In that case, nmcli will read the content of the file and set the script. The prefixes "file://" and "js://" are supported to explicitly differentiate between the two." /> #include #include -#include #include #include #if HAVE_EDITLINE_READLINE @@ -44,6 +43,7 @@ [NM_META_COLOR_CONNECTION_DISCONNECTING] = "31", \ [NM_META_COLOR_CONNECTION_INVISIBLE] = "2", \ [NM_META_COLOR_CONNECTION_EXTERNAL] = "32;2", \ + [NM_META_COLOR_CONNECTION_DEPRECATED] = "2", \ [NM_META_COLOR_CONNECTIVITY_FULL] = "32", \ [NM_META_COLOR_CONNECTIVITY_LIMITED] = "33", \ [NM_META_COLOR_CONNECTIVITY_NONE] = "31", \ @@ -74,6 +74,7 @@ [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "33", \ [NM_META_COLOR_WIFI_SIGNAL_POOR] = "36", \ [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "2", \ + [NM_META_COLOR_WIFI_DEPRECATED] = "2", \ [NM_META_COLOR_ENABLED] = "32", \ [NM_META_COLOR_DISABLED] = "31", \ }, \ @@ -118,8 +119,7 @@ typedef struct { } ArgsInfo; /* --- Global variables --- */ -GMainLoop *loop = NULL; -struct termios termios_orig; +GMainLoop *loop = NULL; NM_CACHED_QUARK_FCN("nmcli-error-quark", nmcli_error_quark); @@ -551,6 +551,7 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"connection-external", NM_META_COLOR_CONNECTION_EXTERNAL}, {"connection-invisible", NM_META_COLOR_CONNECTION_INVISIBLE}, {"connection-unknown", NM_META_COLOR_CONNECTION_UNKNOWN}, + {"connection-deprecated", NM_META_COLOR_CONNECTION_DEPRECATED}, {"connectivity-full", NM_META_COLOR_CONNECTIVITY_FULL}, {"connectivity-limited", NM_META_COLOR_CONNECTIVITY_LIMITED}, {"connectivity-none", NM_META_COLOR_CONNECTIVITY_NONE}, @@ -587,7 +588,8 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE( {"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}, ); + {"wifi-signal-unknown", NM_META_COLOR_WIFI_SIGNAL_UNKNOWN}, + {"wifi-deprecated", NM_META_COLOR_WIFI_DEPRECATED}, ); static gboolean parse_color_scheme(char *palette_buffer, NmcColorPalette *out_palette, GError **error) @@ -935,7 +937,6 @@ nmc_clear_sigint(void) void nmc_exit(void) { - tcsetattr(STDIN_FILENO, TCSADRAIN, &termios_orig); nmc_cleanup_readline(); exit(1); } @@ -1026,9 +1027,6 @@ main(int argc, char *argv[]) textdomain(GETTEXT_PACKAGE); #endif - /* Save terminal settings */ - tcgetattr(STDIN_FILENO, &termios_orig); - nm_cli.return_text = g_string_new(_("Success")); loop = g_main_loop_new(NULL, FALSE); diff --git a/src/nmcli/utils.c b/src/nmcli/utils.c index 7645a08c..209a5b69 100644 --- a/src/nmcli/utils.c +++ b/src/nmcli/utils.c @@ -156,7 +156,7 @@ next_arg(NmCli *nmc, int *argc, const char *const **argv, ...) va_list args; const char *cmd_option; - g_assert(*argc >= 0); + g_return_val_if_fail(*argc >= 0, -1); do { int cmd_option_pos = 1; @@ -1229,7 +1229,7 @@ _print_do(const NmcConfig *nmc_config, guint i_row, i_col; nm_auto_free_gstring GString *str = NULL; - g_assert(col_len); + g_return_if_fail(col_len); /* Main header */ if (nmc_config->print_output == NMC_PRINT_PRETTY && header_name_no_l10n) { @@ -1628,7 +1628,7 @@ print_required_fields(const NmcConfig *nmc_config, gboolean is_array = field_values[idx].value_is_array; /* section prefix can't be an array */ - g_assert(!is_array || !section_prefix || idx != 0); + g_return_if_fail(!is_array || !section_prefix || idx != 0); if (section_prefix && idx == 0) /* The first field is section prefix */ continue; diff --git a/src/nmtui/nmt-address-list.c b/src/nmtui/nmt-address-list.c index 1678f33f..dba8e790 100644 --- a/src/nmtui/nmt-address-list.c +++ b/src/nmtui/nmt-address-list.c @@ -121,19 +121,20 @@ nmt_address_list_create_widget(NmtWidgetList *list, int num) NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE(list); NmtNewtWidget *entry; - if (priv->list_type == NMT_ADDRESS_LIST_IP4_WITH_PREFIX) + if (priv->list_type == NMT_ADDRESS_LIST_IP4_WITH_PREFIX) { entry = nmt_ip_entry_new(25, AF_INET, TRUE, FALSE); - else if (priv->list_type == NMT_ADDRESS_LIST_IP4) + } else if (priv->list_type == NMT_ADDRESS_LIST_IP4) { entry = nmt_ip_entry_new(25, AF_INET, FALSE, FALSE); - else if (priv->list_type == NMT_ADDRESS_LIST_IP6_WITH_PREFIX) + } else if (priv->list_type == NMT_ADDRESS_LIST_IP6_WITH_PREFIX) { entry = nmt_ip_entry_new(25, AF_INET6, TRUE, FALSE); - else if (priv->list_type == NMT_ADDRESS_LIST_IP6) + } else if (priv->list_type == NMT_ADDRESS_LIST_IP6) { entry = nmt_ip_entry_new(25, AF_INET6, FALSE, FALSE); - else if (priv->list_type == NMT_ADDRESS_LIST_HOSTNAME) { + } else if (priv->list_type == NMT_ADDRESS_LIST_HOSTNAME) { entry = nmt_newt_entry_new(25, NMT_NEWT_ENTRY_NONEMPTY); nmt_newt_entry_set_filter(NMT_NEWT_ENTRY(entry), hostname_filter, list); - } else - g_assert_not_reached(); + } else { + g_return_val_if_reached(NULL); + } g_object_bind_property_full(list, "strings", diff --git a/src/nmtui/nmt-editor-grid.c b/src/nmtui/nmt-editor-grid.c index bb257805..b4beda92 100644 --- a/src/nmtui/nmt-editor-grid.c +++ b/src/nmtui/nmt-editor-grid.c @@ -232,7 +232,7 @@ nmt_editor_grid_get_components(NmtNewtWidget *widget) if (rows[i].label) { child_cos = nmt_newt_widget_get_components(rows[i].label); - g_assert(child_cos[0] && !child_cos[1]); + g_return_val_if_fail(child_cos[0] && !child_cos[1], NULL); g_ptr_array_add(cos, child_cos[0]); g_free(child_cos); } diff --git a/src/nmtui/nmt-editor.c b/src/nmtui/nmt-editor.c index 8e6a760c..427ac017 100644 --- a/src/nmtui/nmt-editor.c +++ b/src/nmtui/nmt-editor.c @@ -377,7 +377,7 @@ nmt_editor_constructed(GObject *object) else if (nm_connection_is_type(priv->edit_connection, NM_SETTING_WIREGUARD_SETTING_NAME)) page = nmt_page_wireguard_new(priv->edit_connection, deventry); else - g_assert_not_reached(); + g_return_if_reached(); add_sections_for_page(editor, grid, page); nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL); diff --git a/src/nmtui/nmt-mac-entry.h b/src/nmtui/nmt-mac-entry.h index 0ed5a28c..de44fb9d 100644 --- a/src/nmtui/nmt-mac-entry.h +++ b/src/nmtui/nmt-mac-entry.h @@ -9,9 +9,9 @@ #include "nm-utils.h" #include "libnmt-newt/nmt-newt.h" -typedef enum { /*< skip >*/ - NMT_MAC_ENTRY_TYPE_MAC, - NMT_MAC_ENTRY_TYPE_CLONED, +typedef enum { + NMT_MAC_ENTRY_TYPE_MAC, + NMT_MAC_ENTRY_TYPE_CLONED, } NmtMacEntryType; #define NMT_TYPE_MAC_ENTRY (nmt_mac_entry_get_type()) diff --git a/tools/generate-docs-nm-settings-docs-gir.py b/tools/generate-docs-nm-settings-docs-gir.py index 6df85190..8fc6db70 100755 --- a/tools/generate-docs-nm-settings-docs-gir.py +++ b/tools/generate-docs-nm-settings-docs-gir.py @@ -149,7 +149,13 @@ def get_docs(propxml): doc = re.sub(r"#([A-Z]\w*)", r"\1", doc) # Remove sentences that refer to functions - doc = re.sub(r"\.\s+[^.]*\w\(\)[^.]*\.", r".", doc) + if "FindProxyForURL()" in doc: + # FIXME: this would break the description for "proxy.pac-script" + # Work around. But really the entire approach here is flawed + # and needs improvement. + pass + else: + doc = re.sub(r"\.\s+[^.]*\w\(\)[^.]*\.", r".", doc) return doc -- cgit 1.3.0-6-gf8a5 From 3917b77bbf1354a1e9374bce817fbbd7d00250ef Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 15:38:52 +0200 Subject: New upstream version 1.37.92 (1.38 rc3) --- debian/changelog | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 80402463..b1aad882 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +network-manager (1.37.92-1) UNRELEASED; urgency=medium + + * New upstream version 1.37.92 (1.38 rc3) + + -- Michael Biebl Wed, 04 May 2022 15:38:10 +0200 + network-manager (1.36.4-2) unstable; urgency=medium * supplicant: enable WPA3 transition mode only when interface supports PMF. @@ -35,7 +41,7 @@ network-manager (1.36.0-1) unstable; urgency=medium network-manager (1.35.92-1) unstable; urgency=medium - * New upstream version 1.35.92 ((1.36 rc3) + * New upstream version 1.35.92 (1.36 rc3) * Rename polkit rules file to org.freedesktop.NetworkManager.rules * Set path to nft binary * Demote iptables to Suggests -- cgit 1.3.0-6-gf8a5 From a87b4908083d09f67c4ec868aa8b9800380369a5 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 15:42:51 +0200 Subject: Rebase patches --- ...Force-online-state-with-unmanaged-devices.patch | 22 ++-- debian/patches/series | 2 - .../supplicant-add-BIP-interface-capability.patch | 117 --------------------- ...e-WPA3-transition-mode-only-when-interfac.patch | 58 ---------- 4 files changed, 11 insertions(+), 188 deletions(-) delete mode 100644 debian/patches/supplicant-add-BIP-interface-capability.patch delete mode 100644 debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch diff --git a/debian/patches/Force-online-state-with-unmanaged-devices.patch b/debian/patches/Force-online-state-with-unmanaged-devices.patch index 4765891f..e6b80752 100644 --- a/debian/patches/Force-online-state-with-unmanaged-devices.patch +++ b/debian/patches/Force-online-state-with-unmanaged-devices.patch @@ -12,7 +12,7 @@ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=512286 1 file changed, 115 insertions(+) diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c -index 6c73d23..9a73a16 100644 +index 5215369..462b887 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -51,6 +51,8 @@ @@ -24,7 +24,7 @@ index 6c73d23..9a73a16 100644 /*****************************************************************************/ typedef struct { -@@ -186,6 +188,10 @@ typedef struct { +@@ -191,6 +193,10 @@ typedef struct { GFileMonitor *fw_monitor; guint fw_changed_id; @@ -35,7 +35,7 @@ index 6c73d23..9a73a16 100644 guint timestamp_update_id; guint devices_inited_id; -@@ -1477,6 +1483,27 @@ find_best_device_state(NMManager *manager) +@@ -1491,6 +1497,27 @@ find_best_device_state(NMManager *manager) return best_state; } @@ -63,7 +63,7 @@ index 6c73d23..9a73a16 100644 static void nm_manager_update_metered(NMManager *self) { -@@ -1523,6 +1550,9 @@ nm_manager_update_state(NMManager *self) +@@ -1537,6 +1564,9 @@ nm_manager_update_state(NMManager *self) else new_state = find_best_device_state(self); @@ -73,7 +73,7 @@ index 6c73d23..9a73a16 100644 if (new_state >= NM_STATE_CONNECTED_LOCAL && priv->connectivity_state == NM_CONNECTIVITY_FULL) { new_state = NM_STATE_CONNECTED_GLOBAL; } -@@ -6673,6 +6703,62 @@ impl_manager_get_logging(NMDBusObject *obj, +@@ -6872,6 +6902,62 @@ impl_manager_get_logging(NMDBusObject *obj, g_variant_new("(ss)", nm_logging_level_to_string(), nm_logging_domains_to_string())); } @@ -136,7 +136,7 @@ index 6c73d23..9a73a16 100644 typedef struct { NMManager *self; GDBusMethodInvocation *context; -@@ -6987,6 +7073,9 @@ nm_manager_start(NMManager *self, GError **error) +@@ -7182,6 +7268,9 @@ nm_manager_start(NMManager *self, GError **error) nm_clear_g_source(&priv->devices_inited_id); priv->devices_inited_id = g_idle_add_full(G_PRIORITY_LOW + 10, devices_inited_cb, self, NULL); @@ -146,7 +146,7 @@ index 6c73d23..9a73a16 100644 return TRUE; } -@@ -7984,6 +8073,22 @@ nm_manager_init(NMManager *self) +@@ -8035,6 +8124,22 @@ nm_manager_init(NMManager *self) _LOGW(LOGD_CORE, "failed to monitor kernel firmware directory '%s'.", KERNEL_FIRMWARE_DIR); } @@ -166,10 +166,10 @@ index 6c73d23..9a73a16 100644 + IFUPDOWN_STATE_FILE); + } + - /* Update timestamps in active connections */ - priv->timestamp_update_id = - g_timeout_add_seconds(300, -@@ -8269,6 +8374,16 @@ dispose(GObject *object) + priv->metered = NM_METERED_UNKNOWN; + priv->sleep_devices = g_hash_table_new(nm_direct_hash, NULL); + } +@@ -8317,6 +8422,16 @@ dispose(GObject *object) g_clear_object(&priv->fw_monitor); } diff --git a/debian/patches/series b/debian/patches/series index c61b47cb..a2d7e06d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1 @@ Force-online-state-with-unmanaged-devices.patch -supplicant-add-BIP-interface-capability.patch -supplicant-enable-WPA3-transition-mode-only-when-interfac.patch diff --git a/debian/patches/supplicant-add-BIP-interface-capability.patch b/debian/patches/supplicant-add-BIP-interface-capability.patch deleted file mode 100644 index e1cc05e2..00000000 --- a/debian/patches/supplicant-add-BIP-interface-capability.patch +++ /dev/null @@ -1,117 +0,0 @@ -From: Beniamino Galvani -Date: Fri, 1 Apr 2022 15:32:34 +0200 -Subject: supplicant: add BIP interface capability - -Introduce a new capability indicating whether the interface supports -any of the BIP ciphers that can be used for 802.11w (PMF). - -(cherry picked from commit cd1e0193abcf26f523bd52d83af5aab086ceaa92) -(cherry picked from commit 55ee796c3b14cb6bb7ff4916d6580202a95a00d1) ---- - src/core/supplicant/nm-supplicant-interface.c | 28 +++++++++++++++++++++++++-- - src/core/supplicant/nm-supplicant-types.h | 4 ++++ - 2 files changed, 30 insertions(+), 2 deletions(-) - -diff --git a/src/core/supplicant/nm-supplicant-interface.c b/src/core/supplicant/nm-supplicant-interface.c -index d827614..e502ae8 100644 ---- a/src/core/supplicant/nm-supplicant-interface.c -+++ b/src/core/supplicant/nm-supplicant-interface.c -@@ -1225,8 +1225,10 @@ parse_capabilities(NMSupplicantInterface *self, GVariant *capabilities) - const guint32 old_max_scan_ssids = priv->max_scan_ssids; - gboolean have_ft = FALSE; - gboolean have_sae = FALSE; -+ gboolean have_bip = FALSE; - gint32 max_scan_ssids; - const char **array; -+ guint i; - - nm_assert(capabilities && g_variant_is_of_type(capabilities, G_VARIANT_TYPE_VARDICT)); - -@@ -1236,12 +1238,28 @@ parse_capabilities(NMSupplicantInterface *self, GVariant *capabilities) - g_free(array); - } - -+ if (g_variant_lookup(capabilities, "GroupMgmt", "^a&s", &array)) { -+ for (i = 0; array[i]; i++) { -+ if (NM_IN_STRSET(array[i], -+ "aes-128-cmac", -+ "bip-gmac-128", -+ "bip-gmac-256", -+ "bip-cmac-256")) { -+ have_bip = TRUE; -+ break; -+ } -+ } -+ } -+ - priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, - NM_SUPPL_CAP_TYPE_FT, - have_ft ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); - priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, - NM_SUPPL_CAP_TYPE_SAE, - have_sae ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); -+ priv->iface_capabilities = NM_SUPPL_CAP_MASK_SET(priv->iface_capabilities, -+ NM_SUPPL_CAP_TYPE_BIP, -+ have_bip ? NM_TERNARY_TRUE : NM_TERNARY_FALSE); - - if (g_variant_lookup(capabilities, "Modes", "^a&s", &array)) { - /* Setting p2p_capable might toggle _prop_p2p_available_get(). However, -@@ -1317,10 +1335,12 @@ _starting_check_ready(NMSupplicantInterface *self) - " AP%c" - " FT%c" - " SAE%c" -+ " BIP%c" - "", - NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_AP), - NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_FT), -- NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_SAE)); -+ NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_SAE), -+ NM_SUPPL_CAP_TO_CHAR(priv->iface_capabilities, NM_SUPPL_CAP_TYPE_BIP)); - - /* Other global properties are set in constructed() because they don't - * depend on interface capabilities. */ -@@ -1362,6 +1382,7 @@ _get_capability(NMSupplicantInterfacePrivate *priv, NMSupplCapType type) - } - break; - case NM_SUPPL_CAP_TYPE_SAE: -+ case NM_SUPPL_CAP_TYPE_BIP: - nm_assert(NM_SUPPL_CAP_MASK_GET(priv->global_capabilities, type) == NM_TERNARY_DEFAULT); - value = NM_SUPPL_CAP_MASK_GET(priv->iface_capabilities, type); - break; -@@ -1395,10 +1416,13 @@ nm_supplicant_interface_get_capabilities(NMSupplicantInterface *self) - caps = NM_SUPPL_CAP_MASK_SET(caps, - NM_SUPPL_CAP_TYPE_SAE, - _get_capability(priv, NM_SUPPL_CAP_TYPE_SAE)); -+ caps = NM_SUPPL_CAP_MASK_SET(caps, -+ NM_SUPPL_CAP_TYPE_BIP, -+ _get_capability(priv, NM_SUPPL_CAP_TYPE_BIP)); - - nm_assert(!NM_FLAGS_ANY(priv->iface_capabilities, - ~(NM_SUPPL_CAP_MASK_T_AP_MASK | NM_SUPPL_CAP_MASK_T_FT_MASK -- | NM_SUPPL_CAP_MASK_T_SAE_MASK))); -+ | NM_SUPPL_CAP_MASK_T_SAE_MASK | NM_SUPPL_CAP_MASK_T_BIP_MASK))); - - #if NM_MORE_ASSERTS > 10 - { -diff --git a/src/core/supplicant/nm-supplicant-types.h b/src/core/supplicant/nm-supplicant-types.h -index d5cf1bf..8904372 100644 ---- a/src/core/supplicant/nm-supplicant-types.h -+++ b/src/core/supplicant/nm-supplicant-types.h -@@ -48,6 +48,9 @@ typedef enum { - NM_SUPPL_CAP_TYPE_FAST, - NM_SUPPL_CAP_TYPE_WFD, - NM_SUPPL_CAP_TYPE_SUITEB192, -+ NM_SUPPL_CAP_TYPE_BIP, -+ /* Note: if you're adding a capability here, log its presence at the -+ * bottom of _dbus_get_capabilities_cb(). */ - _NM_SUPPL_CAP_TYPE_NUM, - } NMSupplCapType; - -@@ -75,6 +78,7 @@ typedef enum { - _NM_SUPPL_CAP_MASK_DEFINE(FT), - _NM_SUPPL_CAP_MASK_DEFINE(SAE), - _NM_SUPPL_CAP_MASK_DEFINE(SHA384), -+ _NM_SUPPL_CAP_MASK_DEFINE(BIP), - #undef _NM_SUPPL_CAP_MASK_DEFINE - } NMSupplCapMask; - diff --git a/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch b/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch deleted file mode 100644 index 2e79268b..00000000 --- a/debian/patches/supplicant-enable-WPA3-transition-mode-only-when-interfac.patch +++ /dev/null @@ -1,58 +0,0 @@ -From: Beniamino Galvani -Date: Fri, 1 Apr 2022 15:49:13 +0200 -Subject: supplicant: enable WPA3 transition mode only when interface supports - PMF - -We have some reports of APs that advertise WPA2/WPA3 with -MFP-required=0/MFP-capable=0, and reject the association when the -client doesn't support 802.11w. - -According to WPA3_Specification_v3.0 section 2.3, when operating in -WPA3-Personal transition mode a STA: - -- should allow AKM suite selector: 00-0F-AC:6 (WPA-PSK-SHA256) to be - selected for an association; - -- shall negotiate PMF when associating to an AP using SAE. - -The first is guaranteed by capability PMF; the second by checking that -the interface supports BIP ciphers suitable for PMF. - -https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/964 -https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003907 -(cherry picked from commit 1a7db1d7f712d7696f64b089011bc45fc86e7924) -(cherry picked from commit 4dbf7778acef65fb7f5258e5b69d321bc79a490e) ---- - src/core/supplicant/nm-supplicant-config.c | 19 ++++++++++++++++++- - 1 file changed, 18 insertions(+), 1 deletion(-) - -diff --git a/src/core/supplicant/nm-supplicant-config.c b/src/core/supplicant/nm-supplicant-config.c -index 96c2357..8626042 100644 ---- a/src/core/supplicant/nm-supplicant-config.c -+++ b/src/core/supplicant/nm-supplicant-config.c -@@ -854,7 +854,24 @@ nm_supplicant_config_add_setting_wireless_security(NMSupplicantConfig - g_string_append(key_mgmt_conf, " WPA-PSK-SHA256"); - if (_get_capability(priv, NM_SUPPL_CAP_TYPE_FT)) - g_string_append(key_mgmt_conf, " FT-PSK"); -- if (_get_capability(priv, NM_SUPPL_CAP_TYPE_SAE)) { -+ -+ /* For NM "key-mgmt=wpa-psk" doesn't strictly mean WPA1/wPA2 only, -+ * but also allows WPA3 (SAE), so that existing connections can -+ * benefit from the improved security when the AP gets upgraded. -+ * -+ * According to WPA3_Specification_v3.0 section 2.3, when operating -+ * in WPA3-Personal transition mode a STA: -+ * -+ * - should allow AKM suite selector: 00-0F-AC:6 (WPA-PSK-SHA256) to -+ * be selected for an association; -+ * - shall negotiate PMF when associating to an AP using SAE. -+ * -+ * Those conditions are met when the interface has capabilities -+ * SAE, PMF, BIP. -+ */ -+ if (_get_capability(priv, NM_SUPPL_CAP_TYPE_SAE) -+ && _get_capability(priv, NM_SUPPL_CAP_TYPE_PMF) -+ && _get_capability(priv, NM_SUPPL_CAP_TYPE_BIP)) { - g_string_append(key_mgmt_conf, " SAE"); - if (_get_capability(priv, NM_SUPPL_CAP_TYPE_FT)) - g_string_append(key_mgmt_conf, " FT-SAE"); -- cgit 1.3.0-6-gf8a5 From d71d738bbb29ca8c78dfacb247e12b31bfbd1076 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 15:55:59 +0200 Subject: Update network-manager.docs --- debian/network-manager.docs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/network-manager.docs b/debian/network-manager.docs index eb9b151c..d379acf2 100644 --- a/debian/network-manager.docs +++ b/debian/network-manager.docs @@ -1,3 +1,3 @@ NEWS -README +README.md AUTHORS -- cgit 1.3.0-6-gf8a5 From f873b990628c74a8d322976e6fd240881d7da417 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 16:45:18 +0200 Subject: Update symbols file for libnm0 --- debian/libnm0.symbols | 3 +++ 1 file changed, 3 insertions(+) diff --git a/debian/libnm0.symbols b/debian/libnm0.symbols index 9efe8fac..4808948d 100644 --- a/debian/libnm0.symbols +++ b/debian/libnm0.symbols @@ -29,6 +29,7 @@ libnm.so.0 libnm0 #MINVER# libnm_1_32_4@libnm_1_32_4 1.32.12 libnm_1_34_0@libnm_1_34_0 1.34.0 libnm_1_36_0@libnm_1_36_0 1.36.0 + libnm_1_38_0@libnm_1_38_0 1.37.92 libnm_1_4_0@libnm_1_4_0 1.4.0 libnm_1_6_0@libnm_1_6_0 1.6.0 libnm_1_8_0@libnm_1_8_0 1.8.0 @@ -156,6 +157,7 @@ libnm.so.0 libnm0 #MINVER# nm_client_get_permission_result@libnm_1_0_0 1.0.0 nm_client_get_permissions_state@libnm_1_24_0 1.24.0 nm_client_get_primary_connection@libnm_1_0_0 1.0.0 + nm_client_get_radio_flags@libnm_1_38_0 1.37.92 nm_client_get_startup@libnm_1_0_0 1.0.0 nm_client_get_state@libnm_1_0_0 1.0.0 nm_client_get_type@libnm_1_0_0 1.0.0 @@ -630,6 +632,7 @@ libnm.so.0 libnm0 #MINVER# nm_object_get_client@libnm_1_24_0 1.24.0 nm_object_get_path@libnm_1_0_0 1.0.0 nm_object_get_type@libnm_1_0_0 1.0.0 + nm_radio_flags_get_type@libnm_1_38_0 1.37.92 nm_remote_connection_commit_changes@libnm_1_0_0 1.0.0 nm_remote_connection_commit_changes_async@libnm_1_0_0 1.0.0 nm_remote_connection_commit_changes_finish@libnm_1_0_0 1.0.0 -- cgit 1.3.0-6-gf8a5 From d26308b229deb999da934f582aa8f3d5caaa63c0 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 4 May 2022 16:46:07 +0200 Subject: Release version 1.37.92-1 to unstable --- debian/changelog | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index b1aad882..c4466b6d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,11 @@ -network-manager (1.37.92-1) UNRELEASED; urgency=medium +network-manager (1.37.92-1) unstable; urgency=medium * New upstream version 1.37.92 (1.38 rc3) + * Rebase patches + * Update network-manager.docs + * Update symbols file for libnm0 - -- Michael Biebl Wed, 04 May 2022 15:38:10 +0200 + -- Michael Biebl Wed, 04 May 2022 16:45:54 +0200 network-manager (1.36.4-2) unstable; urgency=medium -- cgit 1.3.0-6-gf8a5 From 87d61411bb3453587d21487da04fcf770fee7d55 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 13 May 2022 15:11:15 +0200 Subject: New upstream version 1.38.0 --- NEWS | 5 - configure | 28 +-- configure.ac | 4 +- docs/api/html/index.html | 2 +- docs/api/html/nm-dbus-types.html | 2 +- docs/api/version.xml | 2 +- docs/libnm/html/NMClient.html | 2 +- docs/libnm/html/NMDevice.html | 4 +- docs/libnm/html/NMDeviceWifi.html | 2 +- docs/libnm/html/NMDeviceWifiP2P.html | 2 +- docs/libnm/html/NMDeviceWimax.html | 2 +- docs/libnm/html/api-index-full.html | 350 ++++++++++++++-------------- docs/libnm/html/index.html | 2 +- docs/libnm/html/usage.html | 2 +- docs/libnm/version.xml | 2 +- man/NetworkManager-dispatcher.8 | 4 +- man/NetworkManager-wait-online.service.8 | 4 +- man/NetworkManager.8 | 6 +- man/NetworkManager.conf.5 | 6 +- man/nm-cloud-setup.8 | 6 +- man/nm-initrd-generator.8 | 6 +- man/nm-online.1 | 6 +- man/nm-openvswitch.7 | 6 +- man/nm-settings-dbus.5 | 6 +- man/nm-settings-dbus.xml | 2 +- man/nm-settings-ifcfg-rh.5 | 6 +- man/nm-settings-ifcfg-rh.xml | 2 +- man/nm-settings-keyfile.5 | 6 +- man/nm-settings-keyfile.xml | 2 +- man/nm-settings-nmcli.5 | 6 +- man/nm-settings-nmcli.xml | 2 +- man/nmcli-examples.7 | 6 +- man/nmcli.1 | 6 +- man/nmtui.1 | 6 +- meson.build | 2 +- src/core/devices/nm-device.c | 3 +- src/core/dhcp/nm-dhcp-dhclient.c | 21 +- src/core/dhcp/nm-dhcp-systemd.c | 74 +++--- src/core/dhcp/nm-dhcp-utils.c | 12 +- src/core/ndisc/tests/test-ndisc-fake.c | 6 +- src/core/nm-audit-manager.c | 7 +- src/core/nm-l3cfg.c | 35 ++- src/libnm-core-impl/nm-setting-infiniband.c | 34 ++- src/libnm-core-public/nm-version-macros.h | 4 +- src/libnm-glib-aux/nm-shared-utils.h | 6 + src/libnm-platform/nm-platform.c | 91 ++++++-- src/libnm-platform/nm-platform.h | 42 +--- src/n-dhcp4/src/n-dhcp4-c-probe.c | 3 +- src/nm-cloud-setup/nmcs-provider-aliyun.c | 109 ++++++--- src/nm-cloud-setup/nmcs-provider-azure.c | 4 +- src/nm-cloud-setup/nmcs-provider-ec2.c | 33 ++- src/nm-cloud-setup/nmcs-provider-gcp.c | 4 +- src/nm-cloud-setup/nmcs-provider.c | 32 ++- src/nm-cloud-setup/nmcs-provider.h | 43 +++- src/nmcli/connections.c | 11 +- src/nmcli/connections.h | 2 + src/nmcli/devices.c | 8 +- 57 files changed, 641 insertions(+), 450 deletions(-) diff --git a/NEWS b/NEWS index 2f703b3a..8aae2324 100644 --- a/NEWS +++ b/NEWS @@ -3,11 +3,6 @@ NetworkManager-1.38 Overview of changes since NetworkManager-1.36 ============================================= -This is a snapshot of NetworkManager development. 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! - * Add support for route type "throw". * Fix bug setting priority for IP addresses. * Static IPv6 addresses from "ipv6.addresses" are now preferred over diff --git a/configure b/configure index 20631292..40aec3a2 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for NetworkManager 1.37.92. +# Generated by GNU Autoconf 2.69 for NetworkManager 1.38.0. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='NetworkManager' PACKAGE_TARNAME='NetworkManager' -PACKAGE_VERSION='1.37.92' -PACKAGE_STRING='NetworkManager 1.37.92' +PACKAGE_VERSION='1.38.0' +PACKAGE_STRING='NetworkManager 1.38.0' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager' PACKAGE_URL='' @@ -1744,7 +1744,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures NetworkManager 1.37.92 to adapt to many kinds of systems. +\`configure' configures NetworkManager 1.38.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1816,7 +1816,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of NetworkManager 1.37.92:";; + short | recursive ) echo "Configuration of NetworkManager 1.38.0:";; esac cat <<\_ACEOF @@ -2167,7 +2167,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -NetworkManager configure 1.37.92 +NetworkManager configure 1.38.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2940,7 +2940,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by NetworkManager $as_me 1.37.92, which was +It was created by NetworkManager $as_me 1.38.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3810,7 +3810,7 @@ fi # Define the identity of the package. PACKAGE='NetworkManager' - VERSION='1.37.92' + VERSION='1.38.0' cat >>confdefs.h <<_ACEOF @@ -17993,9 +17993,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu NM_MAJOR_VERSION=1 -NM_MINOR_VERSION=37 -NM_MICRO_VERSION=92 -NM_VERSION=1.37.92 +NM_MINOR_VERSION=38 +NM_MICRO_VERSION=0 +NM_VERSION=1.38.0 @@ -18003,7 +18003,7 @@ NM_VERSION=1.37.92 -NM_GIT_SHA=a845a3425f9500f85fad62a9f2f08f320241b0fa +NM_GIT_SHA=5704730a6c4e6851d4ba5471ea439502f7b72949 if test """" != "no-config-h" ; then @@ -30460,7 +30460,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by NetworkManager $as_me 1.37.92, which was +This file was extended by NetworkManager $as_me 1.38.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30526,7 +30526,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -NetworkManager config.status 1.37.92 +NetworkManager config.status 1.38.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 038cda33..09c69720 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], [37]) -m4_define([nm_micro_version], [92]) +m4_define([nm_minor_version], [38]) +m4_define([nm_micro_version], [0]) m4_define([nm_version], [nm_major_version.nm_minor_version.nm_micro_version]) diff --git a/docs/api/html/index.html b/docs/api/html/index.html index 1fbe7a13..34b74087 100644 --- a/docs/api/html/index.html +++ b/docs/api/html/index.html @@ -16,7 +16,7 @@

    - for NetworkManager 1.37.92 + for NetworkManager 1.38.0 The latest version of this documentation can be found on-line at https://networkmanager.dev/docs/api/latest/. diff --git a/docs/api/html/nm-dbus-types.html b/docs/api/html/nm-dbus-types.html index 6ee39f84..673eb0e4 100644 --- a/docs/api/html/nm-dbus-types.html +++ b/docs/api/html/nm-dbus-types.html @@ -3070,7 +3070,7 @@


    enum NMMetered

    -

    The NMMetered enum has two different purposes: one is to configure "connection.metered" setting of a connection profile in NMSettingConnection, and the other is to express the actual metered state of the NMDevice at a given moment.

    +

    The NMMetered enum has two different purposes: one is to configure "connection.metered" setting of a connection profile in NMSettingConnection, and the other is to express the actual metered state of the NMDevice at a given moment.

    For the connection profile only NM_METERED_UNKNOWN, NM_METERED_NO and NM_METERED_YES are allowed.

    The device's metered state at runtime is determined by the profile which is currently active. If the profile explicitly specifies NM_METERED_NO or NM_METERED_YES, then the device's metered state is as such. If the connection profile leaves it undecided at NM_METERED_UNKNOWN (the default), then NetworkManager tries to guess the metered state, for example based on the device type or on DHCP options (like Android devices exposing a "ANDROID_METERED" DHCP vendor option). This then leads to either NM_METERED_GUESS_NO or NM_METERED_GUESS_YES.

    Most applications probably should treat the runtime state NM_METERED_GUESS_YES like NM_METERED_YES, and all other states as not metered.

    diff --git a/docs/api/version.xml b/docs/api/version.xml index f2363fea..ebeef2f2 100644 --- a/docs/api/version.xml +++ b/docs/api/version.xml @@ -1 +1 @@ -1.37.92 +1.38.0 diff --git a/docs/libnm/html/NMClient.html b/docs/libnm/html/NMClient.html index 2e9f557a..f74bf1f3 100644 --- a/docs/libnm/html/NMClient.html +++ b/docs/libnm/html/NMClient.html @@ -2885,7 +2885,7 @@ nm_client_get_active_connections (

    Returns

    a GPtrArray -containing all the active NMActiveConnections. +containing all the active NMActiveConnections. The returned array is owned by the client and should not be modified.

    [transfer none][element-type NMActiveConnection]

    diff --git a/docs/libnm/html/NMDevice.html b/docs/libnm/html/NMDevice.html index 98ecddb8..c12e7f5c 100644 --- a/docs/libnm/html/NMDevice.html +++ b/docs/libnm/html/NMDevice.html @@ -1439,7 +1439,7 @@ not part of an active connection.

    nm_device_get_available_connections ()

    const GPtrArray *
     nm_device_get_available_connections (NMDevice *device);
    -

    Gets the NMRemoteConnections currently known to the daemon that could +

    Gets the NMRemoteConnections currently known to the daemon that could be activated on device .

    @@ -1460,7 +1460,7 @@ be activated on device

    Returns

    the GPtrArray -containing NMRemoteConnections. This is the internal copy used by +containing NMRemoteConnections. This is the internal copy used by the connection, and must not be modified.

    [element-type NMRemoteConnection]

    diff --git a/docs/libnm/html/NMDeviceWifi.html b/docs/libnm/html/NMDeviceWifi.html index b479313b..4654723b 100644 --- a/docs/libnm/html/NMDeviceWifi.html +++ b/docs/libnm/html/NMDeviceWifi.html @@ -424,7 +424,7 @@ nm_device_wifi_get_access_points (

    Returns

    a GPtrArray containing all the -scanned NMAccessPoints. +scanned NMAccessPoints. The returned array is owned by the client and should not be modified.

    [element-type NMAccessPoint]

    diff --git a/docs/libnm/html/NMDeviceWifiP2P.html b/docs/libnm/html/NMDeviceWifiP2P.html index e40f0699..eaccdedf 100644 --- a/docs/libnm/html/NMDeviceWifiP2P.html +++ b/docs/libnm/html/NMDeviceWifiP2P.html @@ -191,7 +191,7 @@ nm_device_wifi_p2p_get_peers (

    Returns

    a GPtrArray containing all the -found NMWifiP2PPeers. +found NMWifiP2PPeers. The returned array is owned by the client and should not be modified.

    [element-type NMWifiP2PPeer]

    diff --git a/docs/libnm/html/NMDeviceWimax.html b/docs/libnm/html/NMDeviceWimax.html index dea41ffe..f863b3d3 100644 --- a/docs/libnm/html/NMDeviceWimax.html +++ b/docs/libnm/html/NMDeviceWimax.html @@ -287,7 +287,7 @@ nm_device_wimax_get_nsps (

    Returns

    a GPtrArray containing -all the scanned NMWimaxNsps. +all the scanned NMWimaxNsps. The returned array is owned by the client and should not be modified.

    [element-type NMWimaxNsp]

    diff --git a/docs/libnm/html/api-index-full.html b/docs/libnm/html/api-index-full.html index 7f5d1fe9..77648858 100644 --- a/docs/libnm/html/api-index-full.html +++ b/docs/libnm/html/api-index-full.html @@ -49,7 +49,7 @@ NETWORKMANAGER_COMPILATION, macro in nm-default-libnm
    -NMAccessPoint, struct in NMDeviceOvs +NMAccessPoint, struct in NMDeviceOvs
    @@ -101,11 +101,11 @@ NMAccessPoint, struct in NMDeviceOvs
    -NMActiveConnection, struct in NMDeviceOvs +NMActiveConnection, struct in NMDeviceOvs
    -NMActiveConnection::state-changed, object signal in NMDeviceOvs +NMActiveConnection::state-changed, object signal in NMDeviceOvs
    @@ -149,7 +149,7 @@ NMActiveConnection::state-changed, object signal in NMDeviceOvs
    -NMActiveConnection:specific-object-path, object property in NMDeviceOvs +NMActiveConnection:specific-object-path, object property in NMDeviceOvs
    @@ -157,7 +157,7 @@ NMActiveConnection:specific-object-path, object property in NMDeviceOvs
    -NMActiveConnection:state-flags, object property in NMDeviceOvs +NMActiveConnection:state-flags, object property in NMDeviceOvs
    @@ -197,19 +197,19 @@ NMActiveConnectionClass, struct in
    -NMCheckpoint, struct in NMDeviceOvs +NMCheckpoint, struct in NMDeviceOvs
    -NMCheckpoint:created, object property in NMDeviceOvs +NMCheckpoint:created, object property in NMDeviceOvs
    -NMCheckpoint:devices, object property in NMDeviceOvs +NMCheckpoint:devices, object property in NMDeviceOvs
    -NMCheckpoint:rollback-timeout, object property in NMDeviceOvs +NMCheckpoint:rollback-timeout, object property in NMDeviceOvs
    @@ -217,15 +217,15 @@ NMCheckpoint:rollback-timeout, object property in NMDeviceOvs
    -NMClient, struct in NMDeviceOvs +NMClient, struct in NMDeviceOvs
    -NMClient::active-connection-added, object signal in NMDeviceOvs +NMClient::active-connection-added, object signal in NMDeviceOvs
    -NMClient::active-connection-removed, object signal in NMDeviceOvs +NMClient::active-connection-removed, object signal in NMDeviceOvs
    @@ -237,11 +237,11 @@ NMClient::active-connection-removed, object signal in NMDeviceOvs
    -NMClient::connection-added, object signal in NMDeviceOvs +NMClient::connection-added, object signal in NMDeviceOvs
    -NMClient::connection-removed, object signal in NMDeviceOvs +NMClient::connection-removed, object signal in NMDeviceOvs
    @@ -269,19 +269,19 @@ NMClient::connection-removed, object signal in NMDeviceOvs
    -NMClient:can-modify, object property in NMDeviceOvs +NMClient:can-modify, object property in NMDeviceOvs
    -NMClient:capabilities, object property in NMDeviceOvs +NMClient:capabilities, object property in NMDeviceOvs
    -NMClient:checkpoints, object property in NMDeviceOvs +NMClient:checkpoints, object property in NMDeviceOvs
    -NMClient:connections, object property in NMDeviceOvs +NMClient:connections, object property in NMDeviceOvs
    @@ -289,23 +289,23 @@ NMClient:connections, object property in NMDeviceOvs
    -NMClient:connectivity-check-available, object property in NMDeviceOvs +NMClient:connectivity-check-available, object property in NMDeviceOvs
    -NMClient:connectivity-check-enabled, object property in NMDeviceOvs +NMClient:connectivity-check-enabled, object property in NMDeviceOvs
    -NMClient:connectivity-check-uri, object property in NMDeviceOvs +NMClient:connectivity-check-uri, object property in NMDeviceOvs
    -NMClient:dbus-connection, object property in NMDeviceOvs +NMClient:dbus-connection, object property in NMDeviceOvs
    -NMClient:dbus-name-owner, object property in NMDeviceOvs +NMClient:dbus-name-owner, object property in NMDeviceOvs
    @@ -313,27 +313,27 @@ NMClient:dbus-name-owner, object property in NMDeviceOvs
    -NMClient:dns-configuration, object property in NMDeviceOvs +NMClient:dns-configuration, object property in NMDeviceOvs
    -NMClient:dns-mode, object property in NMDeviceOvs +NMClient:dns-mode, object property in NMDeviceOvs
    -NMClient:dns-rc-manager, object property in NMDeviceOvs +NMClient:dns-rc-manager, object property in NMDeviceOvs
    -NMClient:hostname, object property in NMDeviceOvs +NMClient:hostname, object property in NMDeviceOvs
    -NMClient:instance-flags, object property in NMDeviceOvs +NMClient:instance-flags, object property in NMDeviceOvs
    -NMClient:metered, object property in NMDeviceOvs +NMClient:metered, object property in NMDeviceOvs
    @@ -341,11 +341,11 @@ NMClient:metered, object property in NMDeviceOvs
    -NMClient:nm-running, object property in NMDeviceOvs +NMClient:nm-running, object property in NMDeviceOvs
    -NMClient:permissions-state, object property in NMDeviceOvs +NMClient:permissions-state, object property in NMDeviceOvs
    @@ -353,7 +353,7 @@ NMClient:permissions-state, object property in NMDeviceOvs
    -NMClient:radio-flags, object property in NMDeviceOvs +NMClient:radio-flags, object property in NMDeviceOvs
    @@ -469,15 +469,15 @@ NMClientNotifyEventWithPtrCb, user_function in NMDevice, struct in NMDeviceOvs
    -NMDevice6Lowpan, struct in NMDeviceOvs +NMDevice6Lowpan, struct in NMDeviceOvs
    -NMDevice6Lowpan:parent, object property in NMDeviceOvs +NMDevice6Lowpan:parent, object property in NMDeviceOvs
    @@ -529,7 +529,7 @@ NMDevice6Lowpan:parent, object property in NMDeviceOvs
    -NMDevice:hw-address, object property in NMDeviceOvs +NMDevice:hw-address, object property in NMDeviceOvs
    @@ -537,7 +537,7 @@ NMDevice:hw-address, object property in NMDeviceOvs
    -NMDevice:interface-flags, object property in NMDeviceOvs +NMDevice:interface-flags, object property in NMDeviceOvs
    @@ -549,7 +549,7 @@ NMDevice:interface-flags, object property in NMDeviceOvs
    -NMDevice:ip4-connectivity, object property in NMDeviceOvs +NMDevice:ip4-connectivity, object property in NMDeviceOvs
    @@ -557,11 +557,11 @@ NMDevice:ip4-connectivity, object property in NMDeviceOvs
    -NMDevice:ip6-connectivity, object property in NMDeviceOvs +NMDevice:ip6-connectivity, object property in NMDeviceOvs
    -NMDevice:lldp-neighbors, object property in NMDeviceOvs +NMDevice:lldp-neighbors, object property in NMDeviceOvs
    @@ -569,7 +569,7 @@ NMDevice:lldp-neighbors, object property in NMDeviceOvs
    -NMDevice:metered, object property in NMDeviceOvs +NMDevice:metered, object property in NMDeviceOvs
    @@ -577,11 +577,11 @@ NMDevice:metered, object property in NMDeviceOvs
    -NMDevice:nm-plugin-missing, object property in NMDeviceOvs +NMDevice:nm-plugin-missing, object property in NMDeviceOvs
    -NMDevice:path, object property in NMDeviceOvs +NMDevice:path, object property in NMDeviceOvs
    @@ -589,7 +589,7 @@ NMDevice:path, object property in NMDeviceOvs
    -NMDevice:ports, object property in NMDeviceOvs +NMDevice:ports, object property in NMDeviceOvs
    @@ -617,7 +617,7 @@ NMDevice:ports, object property in NMDeviceOvs
    -NMDeviceAdsl, struct in NMDeviceOvs +NMDeviceAdsl, struct in NMDeviceOvs
    @@ -625,7 +625,7 @@ NMDeviceAdsl, struct in NMDeviceOvs
    -NMDeviceBond, struct in NMDeviceOvs +NMDeviceBond, struct in NMDeviceOvs
    @@ -637,7 +637,7 @@ NMDeviceBond, struct in NMDeviceOvs
    -NMDeviceBridge, struct in NMDeviceOvs +NMDeviceBridge, struct in NMDeviceOvs
    @@ -649,7 +649,7 @@ NMDeviceBridge, struct in NMDeviceOvs
    -NMDeviceBt, struct in NMDeviceOvs +NMDeviceBt, struct in NMDeviceOvs
    @@ -669,7 +669,7 @@ NMDeviceClass, struct in NMDeviceDummy, struct in NMDeviceOvs
    @@ -677,7 +677,7 @@ NMDeviceDummy, struct in NMDeviceOvs
    -NMDeviceEthernet, struct in NMDeviceOvs +NMDeviceEthernet, struct in NMDeviceOvs
    @@ -689,7 +689,7 @@ NMDeviceEthernet, struct in NMDeviceOvs
    -NMDeviceEthernet:s390-subchannels, object property in NMDeviceOvs +NMDeviceEthernet:s390-subchannels, object property in NMDeviceOvs
    @@ -701,7 +701,7 @@ NMDeviceEthernetClass, struct in NMDeviceGeneric, struct in NMDeviceOvs
    @@ -709,7 +709,7 @@ NMDeviceGeneric, struct in NMDeviceOvs
    -NMDeviceInfiniband, struct in NMDeviceOvs +NMDeviceInfiniband, struct in NMDeviceOvs
    @@ -721,139 +721,139 @@ NMDeviceInfiniband, struct in NMDeviceOvs
    -NMDeviceIPTunnel, struct in NMDeviceOvs +NMDeviceIPTunnel, struct in NMDeviceOvs
    -NMDeviceIPTunnel:encapsulation-limit, object property in NMDeviceOvs +NMDeviceIPTunnel:encapsulation-limit, object property in NMDeviceOvs
    -NMDeviceIPTunnel:flags, object property in NMDeviceOvs +NMDeviceIPTunnel:flags, object property in NMDeviceOvs
    -NMDeviceIPTunnel:flow-label, object property in NMDeviceOvs +NMDeviceIPTunnel:flow-label, object property in NMDeviceOvs
    -NMDeviceIPTunnel:input-key, object property in NMDeviceOvs +NMDeviceIPTunnel:input-key, object property in NMDeviceOvs
    -NMDeviceIPTunnel:local, object property in NMDeviceOvs +NMDeviceIPTunnel:local, object property in NMDeviceOvs
    -NMDeviceIPTunnel:mode, object property in NMDeviceOvs +NMDeviceIPTunnel:mode, object property in NMDeviceOvs
    -NMDeviceIPTunnel:output-key, object property in NMDeviceOvs +NMDeviceIPTunnel:output-key, object property in NMDeviceOvs
    -NMDeviceIPTunnel:parent, object property in NMDeviceOvs +NMDeviceIPTunnel:parent, object property in NMDeviceOvs
    -NMDeviceIPTunnel:path-mtu-discovery, object property in NMDeviceOvs +NMDeviceIPTunnel:path-mtu-discovery, object property in NMDeviceOvs
    -NMDeviceIPTunnel:remote, object property in NMDeviceOvs +NMDeviceIPTunnel:remote, object property in NMDeviceOvs
    -NMDeviceIPTunnel:tos, object property in NMDeviceOvs +NMDeviceIPTunnel:tos, object property in NMDeviceOvs
    -NMDeviceIPTunnel:ttl, object property in NMDeviceOvs +NMDeviceIPTunnel:ttl, object property in NMDeviceOvs
    -NMDeviceMacsec, struct in NMDeviceOvs +NMDeviceMacsec, struct in NMDeviceOvs
    -NMDeviceMacsec:cipher-suite, object property in NMDeviceOvs +NMDeviceMacsec:cipher-suite, object property in NMDeviceOvs
    -NMDeviceMacsec:encoding-sa, object property in NMDeviceOvs +NMDeviceMacsec:encoding-sa, object property in NMDeviceOvs
    -NMDeviceMacsec:encrypt, object property in NMDeviceOvs +NMDeviceMacsec:encrypt, object property in NMDeviceOvs
    -NMDeviceMacsec:es, object property in NMDeviceOvs +NMDeviceMacsec:es, object property in NMDeviceOvs
    -NMDeviceMacsec:icv-length, object property in NMDeviceOvs +NMDeviceMacsec:icv-length, object property in NMDeviceOvs
    -NMDeviceMacsec:include-sci, object property in NMDeviceOvs +NMDeviceMacsec:include-sci, object property in NMDeviceOvs
    -NMDeviceMacsec:parent, object property in NMDeviceOvs +NMDeviceMacsec:parent, object property in NMDeviceOvs
    -NMDeviceMacsec:protect, object property in NMDeviceOvs +NMDeviceMacsec:protect, object property in NMDeviceOvs
    -NMDeviceMacsec:replay-protect, object property in NMDeviceOvs +NMDeviceMacsec:replay-protect, object property in NMDeviceOvs
    -NMDeviceMacsec:scb, object property in NMDeviceOvs +NMDeviceMacsec:scb, object property in NMDeviceOvs
    -NMDeviceMacsec:sci, object property in NMDeviceOvs +NMDeviceMacsec:sci, object property in NMDeviceOvs
    -NMDeviceMacsec:validation, object property in NMDeviceOvs +NMDeviceMacsec:validation, object property in NMDeviceOvs
    -NMDeviceMacsec:window, object property in NMDeviceOvs +NMDeviceMacsec:window, object property in NMDeviceOvs
    -NMDeviceMacvlan, struct in NMDeviceOvs +NMDeviceMacvlan, struct in NMDeviceOvs
    -NMDeviceMacvlan:mode, object property in NMDeviceOvs +NMDeviceMacvlan:mode, object property in NMDeviceOvs
    -NMDeviceMacvlan:no-promisc, object property in NMDeviceOvs +NMDeviceMacvlan:no-promisc, object property in NMDeviceOvs
    -NMDeviceMacvlan:parent, object property in NMDeviceOvs +NMDeviceMacvlan:parent, object property in NMDeviceOvs
    -NMDeviceMacvlan:tap, object property in NMDeviceOvs +NMDeviceMacvlan:tap, object property in NMDeviceOvs
    -NMDeviceModem, struct in NMDeviceOvs +NMDeviceModem, struct in NMDeviceOvs
    -NMDeviceModem:apn, object property in NMDeviceOvs +NMDeviceModem:apn, object property in NMDeviceOvs
    @@ -861,7 +861,7 @@ NMDeviceModem:apn, object property in NMDeviceOvs
    -NMDeviceModem:device-id, object property in NMDeviceOvs +NMDeviceModem:device-id, object property in NMDeviceOvs
    @@ -869,7 +869,7 @@ NMDeviceModem:device-id, object property in NMDeviceOvs
    -NMDeviceModem:operator-code, object property in NMDeviceOvs +NMDeviceModem:operator-code, object property in NMDeviceOvs
    @@ -877,7 +877,7 @@ NMDeviceModem:operator-code, object property in NMDeviceOvs
    -NMDeviceOlpcMesh, struct in NMDeviceOvs +NMDeviceOlpcMesh, struct in NMDeviceOvs
    @@ -889,27 +889,27 @@ NMDeviceOlpcMesh, struct in NMDeviceOvs
    -NMDeviceOvsBridge, struct in NMDeviceOvs +NMDeviceOvsBridge, struct in NMDeviceOvs
    -NMDeviceOvsBridge:slaves, object property in NMDeviceOvs +NMDeviceOvsBridge:slaves, object property in NMDeviceOvs
    -NMDeviceOvsInterface, struct in NMDeviceOvs +NMDeviceOvsInterface, struct in NMDeviceOvs
    -NMDeviceOvsPort, struct in NMDeviceOvs +NMDeviceOvsPort, struct in NMDeviceOvs
    -NMDeviceOvsPort:slaves, object property in NMDeviceOvs +NMDeviceOvsPort:slaves, object property in NMDeviceOvs
    -NMDevicePpp, struct in NMDeviceOvs +NMDevicePpp, struct in NMDeviceOvs
    @@ -921,7 +921,7 @@ NMDevicePpp, struct in NMDeviceOvs
    -NMDeviceTeam, struct in NMDeviceOvs +NMDeviceTeam, struct in NMDeviceOvs
    @@ -929,7 +929,7 @@ NMDeviceTeam, struct in NMDeviceOvs
    -NMDeviceTeam:config, object property in NMDeviceOvs +NMDeviceTeam:config, object property in NMDeviceOvs
    @@ -937,31 +937,31 @@ NMDeviceTeam:config, object property in NMDeviceOvs
    -NMDeviceTun, struct in NMDeviceOvs +NMDeviceTun, struct in NMDeviceOvs
    -NMDeviceTun:group, object property in NMDeviceOvs +NMDeviceTun:group, object property in NMDeviceOvs
    -NMDeviceTun:mode, object property in NMDeviceOvs +NMDeviceTun:mode, object property in NMDeviceOvs
    -NMDeviceTun:multi-queue, object property in NMDeviceOvs +NMDeviceTun:multi-queue, object property in NMDeviceOvs
    -NMDeviceTun:no-pi, object property in NMDeviceOvs +NMDeviceTun:no-pi, object property in NMDeviceOvs
    -NMDeviceTun:owner, object property in NMDeviceOvs +NMDeviceTun:owner, object property in NMDeviceOvs
    -NMDeviceTun:vnet-hdr, object property in NMDeviceOvs +NMDeviceTun:vnet-hdr, object property in NMDeviceOvs
    @@ -969,15 +969,15 @@ NMDeviceTun:vnet-hdr, object property in NMDeviceOvs
    -NMDeviceVeth, struct in NMDeviceOvs +NMDeviceVeth, struct in NMDeviceOvs
    -NMDeviceVeth:peer, object property in NMDeviceOvs +NMDeviceVeth:peer, object property in NMDeviceOvs
    -NMDeviceVlan, struct in NMDeviceOvs +NMDeviceVlan, struct in NMDeviceOvs
    @@ -993,87 +993,87 @@ NMDeviceVlan, struct in NMDeviceOvs
    -NMDeviceVrf, struct in NMDeviceOvs +NMDeviceVrf, struct in NMDeviceOvs
    -NMDeviceVrf:table, object property in NMDeviceOvs +NMDeviceVrf:table, object property in NMDeviceOvs
    -NMDeviceVxlan, struct in NMDeviceOvs +NMDeviceVxlan, struct in NMDeviceOvs
    -NMDeviceVxlan:ageing, object property in NMDeviceOvs +NMDeviceVxlan:ageing, object property in NMDeviceOvs
    -NMDeviceVxlan:carrier, object property in NMDeviceOvs +NMDeviceVxlan:carrier, object property in NMDeviceOvs
    -NMDeviceVxlan:dst-port, object property in NMDeviceOvs +NMDeviceVxlan:dst-port, object property in NMDeviceOvs
    -NMDeviceVxlan:group, object property in NMDeviceOvs +NMDeviceVxlan:group, object property in NMDeviceOvs
    -NMDeviceVxlan:id, object property in NMDeviceOvs +NMDeviceVxlan:id, object property in NMDeviceOvs
    -NMDeviceVxlan:l2miss, object property in NMDeviceOvs +NMDeviceVxlan:l2miss, object property in NMDeviceOvs
    -NMDeviceVxlan:l3miss, object property in NMDeviceOvs +NMDeviceVxlan:l3miss, object property in NMDeviceOvs
    -NMDeviceVxlan:learning, object property in NMDeviceOvs +NMDeviceVxlan:learning, object property in NMDeviceOvs
    -NMDeviceVxlan:limit, object property in NMDeviceOvs +NMDeviceVxlan:limit, object property in NMDeviceOvs
    -NMDeviceVxlan:local, object property in NMDeviceOvs +NMDeviceVxlan:local, object property in NMDeviceOvs
    -NMDeviceVxlan:parent, object property in NMDeviceOvs +NMDeviceVxlan:parent, object property in NMDeviceOvs
    -NMDeviceVxlan:proxy, object property in NMDeviceOvs +NMDeviceVxlan:proxy, object property in NMDeviceOvs
    -NMDeviceVxlan:rsc, object property in NMDeviceOvs +NMDeviceVxlan:rsc, object property in NMDeviceOvs
    -NMDeviceVxlan:src-port-max, object property in NMDeviceOvs +NMDeviceVxlan:src-port-max, object property in NMDeviceOvs
    -NMDeviceVxlan:src-port-min, object property in NMDeviceOvs +NMDeviceVxlan:src-port-min, object property in NMDeviceOvs
    -NMDeviceVxlan:tos, object property in NMDeviceOvs +NMDeviceVxlan:tos, object property in NMDeviceOvs
    -NMDeviceVxlan:ttl, object property in NMDeviceOvs +NMDeviceVxlan:ttl, object property in NMDeviceOvs
    -NMDeviceWifi, struct in NMDeviceOvs +NMDeviceWifi, struct in NMDeviceOvs
    @@ -1097,7 +1097,7 @@ NMDeviceWifi, struct in NMDeviceOvs
    -NMDeviceWifi:last-scan, object property in NMDeviceOvs +NMDeviceWifi:last-scan, object property in NMDeviceOvs
    @@ -1117,23 +1117,23 @@ NMDeviceWifi:last-scan, object property in NMDeviceOvs
    -NMDeviceWifiP2P, struct in NMDeviceOvs +NMDeviceWifiP2P, struct in NMDeviceOvs
    -NMDeviceWifiP2P::peer-added, object signal in NMDeviceOvs +NMDeviceWifiP2P::peer-added, object signal in NMDeviceOvs
    -NMDeviceWifiP2P::peer-removed, object signal in NMDeviceOvs +NMDeviceWifiP2P::peer-removed, object signal in NMDeviceOvs
    -NMDeviceWifiP2P:peers, object property in NMDeviceOvs +NMDeviceWifiP2P:peers, object property in NMDeviceOvs
    -NMDeviceWimax, struct in NMDeviceOvs +NMDeviceWimax, struct in NMDeviceOvs
    @@ -1177,35 +1177,35 @@ NMDeviceWimax, struct in NMDeviceOvs
    -NMDeviceWireGuard, struct in NMDeviceOvs +NMDeviceWireGuard, struct in NMDeviceOvs
    -NMDeviceWireGuard:fwmark, object property in NMDeviceOvs +NMDeviceWireGuard:fwmark, object property in NMDeviceOvs
    -NMDeviceWireGuard:listen-port, object property in NMDeviceOvs +NMDeviceWireGuard:listen-port, object property in NMDeviceOvs
    -NMDeviceWireGuard:public-key, object property in NMDeviceOvs +NMDeviceWireGuard:public-key, object property in NMDeviceOvs
    -NMDeviceWpan, struct in NMDeviceOvs +NMDeviceWpan, struct in NMDeviceOvs
    -NMDhcpConfig, struct in NMDeviceOvs +NMDhcpConfig, struct in NMDeviceOvs
    -NMDhcpConfig:family, object property in NMDeviceOvs +NMDhcpConfig:family, object property in NMDeviceOvs
    -NMDhcpConfig:options, object property in NMDeviceOvs +NMDhcpConfig:options, object property in NMDeviceOvs
    @@ -1221,39 +1221,39 @@ NMDhcpConfigClass, struct in NMIPConfig, struct in NMDeviceOvs
    -NMIPConfig:addresses, object property in NMDeviceOvs +NMIPConfig:addresses, object property in NMDeviceOvs
    -NMIPConfig:domains, object property in NMDeviceOvs +NMIPConfig:domains, object property in NMDeviceOvs
    -NMIPConfig:family, object property in NMDeviceOvs +NMIPConfig:family, object property in NMDeviceOvs
    -NMIPConfig:gateway, object property in NMDeviceOvs +NMIPConfig:gateway, object property in NMDeviceOvs
    -NMIPConfig:nameservers, object property in NMDeviceOvs +NMIPConfig:nameservers, object property in NMDeviceOvs
    -NMIPConfig:routes, object property in NMDeviceOvs +NMIPConfig:routes, object property in NMDeviceOvs
    -NMIPConfig:searches, object property in NMDeviceOvs +NMIPConfig:searches, object property in NMDeviceOvs
    -NMIPConfig:wins-servers, object property in NMDeviceOvs +NMIPConfig:wins-servers, object property in NMDeviceOvs
    @@ -1581,15 +1581,15 @@ NML_NMCLIENT_LOG_W, macro in NMObject, struct in NMDeviceOvs
    -NMObject:client, object property in NMDeviceOvs +NMObject:client, object property in NMDeviceOvs
    -NMObject:path, object property in NMDeviceOvs +NMObject:path, object property in NMDeviceOvs
    @@ -1613,15 +1613,15 @@ _NMObjectClassFieldInfo, struct in
    -NMRemoteConnection, struct in NMDeviceOvs +NMRemoteConnection, struct in NMDeviceOvs
    -NMRemoteConnection:filename, object property in NMDeviceOvs +NMRemoteConnection:filename, object property in NMDeviceOvs
    -NMRemoteConnection:flags, object property in NMDeviceOvs +NMRemoteConnection:flags, object property in NMDeviceOvs
    @@ -1629,7 +1629,7 @@ NMRemoteConnection:flags, object property in NMDeviceOvs
    -NMRemoteConnection:visible, object property in NMDeviceOvs +NMRemoteConnection:visible, object property in NMDeviceOvs
    @@ -3721,19 +3721,19 @@ NMUtilsPredicateStr, user_function in NMSettingOvs
    -NMVpnConnection, struct in NMDeviceOvs +NMVpnConnection, struct in NMDeviceOvs
    -NMVpnConnection::vpn-state-changed, object signal in NMDeviceOvs +NMVpnConnection::vpn-state-changed, object signal in NMDeviceOvs
    -NMVpnConnection:banner, object property in NMDeviceOvs +NMVpnConnection:banner, object property in NMDeviceOvs
    -NMVpnConnection:vpn-state, object property in NMDeviceOvs +NMVpnConnection:vpn-state, object property in NMDeviceOvs
    @@ -3913,51 +3913,51 @@ NMVpnConnection:vpn-state, object property in NMDeviceOvs
    -NMWifiP2PPeer, struct in NMDeviceOvs +NMWifiP2PPeer, struct in NMDeviceOvs
    -NMWifiP2PPeer:flags, object property in NMDeviceOvs +NMWifiP2PPeer:flags, object property in NMDeviceOvs
    -NMWifiP2PPeer:hw-address, object property in NMDeviceOvs +NMWifiP2PPeer:hw-address, object property in NMDeviceOvs
    -NMWifiP2PPeer:last-seen, object property in NMDeviceOvs +NMWifiP2PPeer:last-seen, object property in NMDeviceOvs
    -NMWifiP2PPeer:manufacturer, object property in NMDeviceOvs +NMWifiP2PPeer:manufacturer, object property in NMDeviceOvs
    -NMWifiP2PPeer:model, object property in NMDeviceOvs +NMWifiP2PPeer:model, object property in NMDeviceOvs
    -NMWifiP2PPeer:model-number, object property in NMDeviceOvs +NMWifiP2PPeer:model-number, object property in NMDeviceOvs
    -NMWifiP2PPeer:name, object property in NMDeviceOvs +NMWifiP2PPeer:name, object property in NMDeviceOvs
    -NMWifiP2PPeer:serial, object property in NMDeviceOvs +NMWifiP2PPeer:serial, object property in NMDeviceOvs
    -NMWifiP2PPeer:strength, object property in NMDeviceOvs +NMWifiP2PPeer:strength, object property in NMDeviceOvs
    -NMWifiP2PPeer:wfd-ies, object property in NMDeviceOvs +NMWifiP2PPeer:wfd-ies, object property in NMDeviceOvs
    -NMWimaxNsp, struct in NMDeviceOvs +NMWimaxNsp, struct in NMDeviceOvs
    diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html index 4299ae49..c43edfd5 100644 --- a/docs/libnm/html/index.html +++ b/docs/libnm/html/index.html @@ -15,7 +15,7 @@

    - for libnm 1.37.92 + for libnm 1.38.0 The latest version of this documentation can be found on-line at https://networkmanager.dev/docs/libnm/latest/. diff --git a/docs/libnm/html/usage.html b/docs/libnm/html/usage.html index afb7ceb1..eb8c2bb8 100644 --- a/docs/libnm/html/usage.html +++ b/docs/libnm/html/usage.html @@ -96,7 +96,7 @@

    $ cc $(pkg-config --libs --cflags libnm) -o hello-nm hello-nm.c
       $ ./hello-nm
    -  NetworkManager version: 1.37.92
    +  NetworkManager version: 1.38.0
     
       $ 

    diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml index f2363fea..ebeef2f2 100644 --- a/docs/libnm/version.xml +++ b/docs/libnm/version.xml @@ -1 +1 @@ -1.37.92 +1.38.0 diff --git a/man/NetworkManager-dispatcher.8 b/man/NetworkManager-dispatcher.8 index b992cf3b..7fd3a192 100644 --- a/man/NetworkManager-dispatcher.8 +++ b/man/NetworkManager-dispatcher.8 @@ -2,9 +2,9 @@ .\" Title: NetworkManager-dispatcher .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager-dispatcher 1.37.92 +.\" Source: NetworkManager-dispatcher 1.38.0 .\" Language: English .\" .TH "NETWORKMANAGER\-DISPATCHER" "8" "" "NetworkManager\-dispatcher 1\&" "Network management daemons" diff --git a/man/NetworkManager-wait-online.service.8 b/man/NetworkManager-wait-online.service.8 index 3b1be909..07d562d5 100644 --- a/man/NetworkManager-wait-online.service.8 +++ b/man/NetworkManager-wait-online.service.8 @@ -2,9 +2,9 @@ .\" Title: NetworkManager-wait-online.service .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager-wait-online.service 1.37.92 +.\" Source: NetworkManager-wait-online.service 1.38.0 .\" Language: English .\" .TH "NETWORKMANAGER\-WAIT\-ONLINE\&" "8" "" "NetworkManager\-wait\-online\&" "Network management daemons" diff --git a/man/NetworkManager.8 b/man/NetworkManager.8 index 504aba97..c3947f1e 100644 --- a/man/NetworkManager.8 +++ b/man/NetworkManager.8 @@ -2,12 +2,12 @@ .\" Title: NetworkManager .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Network management daemons -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.37\&.92" "Network management daemons" +.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.38\&.0" "Network management daemons" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5 index 48c85f81..361b6c4a 100644 --- a/man/NetworkManager.conf.5 +++ b/man/NetworkManager.conf.5 @@ -2,12 +2,12 @@ .\" Title: NetworkManager.conf .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" +.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.38\&.0" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-cloud-setup.8 b/man/nm-cloud-setup.8 index 6d5a7e1d..4edd192d 100644 --- a/man/nm-cloud-setup.8 +++ b/man/nm-cloud-setup.8 @@ -2,12 +2,12 @@ .\" Title: nm-cloud-setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Automatic Network Configuration in Cloud with NetworkManager -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.37\&.92" "Automatic Network Configuratio" +.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.38\&.0" "Automatic Network Configuratio" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-initrd-generator.8 b/man/nm-initrd-generator.8 index 9eaf533b..1ea9b588 100644 --- a/man/nm-initrd-generator.8 +++ b/man/nm-initrd-generator.8 @@ -2,12 +2,12 @@ .\" Title: nm-initrd-generator .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: System Administration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.37\&.92" "System Administration" +.TH "NM\-INITRD\-GENERATOR" "8" "" "NetworkManager 1\&.38\&.0" "System Administration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-online.1 b/man/nm-online.1 index c3460319..0ca058e2 100644 --- a/man/nm-online.1 +++ b/man/nm-online.1 @@ -2,12 +2,12 @@ .\" Title: nm-online .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" +.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.38\&.0" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-openvswitch.7 b/man/nm-openvswitch.7 index 975bd18d..f46b7dca 100644 --- a/man/nm-openvswitch.7 +++ b/man/nm-openvswitch.7 @@ -2,12 +2,12 @@ .\" Title: nm-openvswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Open vSwitch support overview -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.37\&.92" "Open vSwitch support overview" +.TH "NM\-OPENVSWITCH" "7" "" "NetworkManager 1\&.38\&.0" "Open vSwitch support overview" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.5 b/man/nm-settings-dbus.5 index d664fa95..d979773f 100644 --- a/man/nm-settings-dbus.5 +++ b/man/nm-settings-dbus.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-dbus .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" +.TH "NM\-SETTINGS\-DBUS" "5" "" "NetworkManager 1\&.38\&.0" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-dbus.xml b/man/nm-settings-dbus.xml index 590bd892..20ca0b7e 100644 --- a/man/nm-settings-dbus.xml +++ b/man/nm-settings-dbus.xml @@ -1,6 +1,6 @@ -nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.37.92nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription +nm-settings-dbusNetworkManager developersnm-settings-dbus5NetworkManagerConfiguration1.38.0nm-settings-dbusDescription of settings and properties of NetworkManager connection profiles on the D-Bus APIDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5 index 3edc7f2a..d7611706 100644 --- a/man/nm-settings-ifcfg-rh.5 +++ b/man/nm-settings-ifcfg-rh.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-ifcfg-rh .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" +.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.38\&.0" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml index b1643a0a..86d0a841 100644 --- a/man/nm-settings-ifcfg-rh.xml +++ b/man/nm-settings-ifcfg-rh.xml @@ -1,6 +1,6 @@ -nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.37.92nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription +nm-settings-ifcfg-rhNetworkManager developersnm-settings-ifcfg-rh5NetworkManagerConfiguration1.38.0nm-settings-ifcfg-rhDescription of ifcfg-rh settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-keyfile.5 b/man/nm-settings-keyfile.5 index 26acc9c8..16a6dd0f 100644 --- a/man/nm-settings-keyfile.5 +++ b/man/nm-settings-keyfile.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-keyfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" +.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.38\&.0" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml index c66cc34b..8c763a7c 100644 --- a/man/nm-settings-keyfile.xml +++ b/man/nm-settings-keyfile.xml @@ -1,6 +1,6 @@ -nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.37.92nm-settings-keyfileDescription of keyfile settings pluginDescription +nm-settings-keyfileNetworkManager developersnm-settings-keyfile5NetworkManagerConfiguration1.38.0nm-settings-keyfileDescription of keyfile settings pluginDescription NetworkManager is based on the concept of connection profiles that contain network configuration (see nm-settings5 for details). The profiles can be stored in various formats. NetworkManager uses plugins for reading and writing diff --git a/man/nm-settings-nmcli.5 b/man/nm-settings-nmcli.5 index 1be2d443..d330957f 100644 --- a/man/nm-settings-nmcli.5 +++ b/man/nm-settings-nmcli.5 @@ -2,12 +2,12 @@ .\" Title: nm-settings-nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Configuration -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.37\&.92" "Configuration" +.TH "NM\-SETTINGS\-NMCLI" "5" "" "NetworkManager 1\&.38\&.0" "Configuration" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nm-settings-nmcli.xml b/man/nm-settings-nmcli.xml index bec71310..cf5f825d 100644 --- a/man/nm-settings-nmcli.xml +++ b/man/nm-settings-nmcli.xml @@ -1,6 +1,6 @@ -nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.37.92nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription +nm-settings-nmcliNetworkManager developersnm-settings-nmcli5NetworkManagerConfiguration1.38.0nm-settings-nmcliDescription of settings and properties of NetworkManager connection profiles for nmcliDescription NetworkManager is based on a concept of connection profiles, sometimes referred to as connections only. These connection profiles contain a network configuration. When NetworkManager activates a connection profile on a network device the configuration will diff --git a/man/nmcli-examples.7 b/man/nmcli-examples.7 index 06b7e27e..6f2c9961 100644 --- a/man/nmcli-examples.7 +++ b/man/nmcli-examples.7 @@ -2,12 +2,12 @@ .\" Title: nmcli-examples .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: Examples -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.37\&.92" "Examples" +.TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.38\&.0" "Examples" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmcli.1 b/man/nmcli.1 index b041795f..6a861766 100644 --- a/man/nmcli.1 +++ b/man/nmcli.1 @@ -2,12 +2,12 @@ .\" Title: nmcli .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NMCLI" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" +.TH "NMCLI" "1" "" "NetworkManager 1\&.38\&.0" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/nmtui.1 b/man/nmtui.1 index bede5b9a..09088cd9 100644 --- a/man/nmtui.1 +++ b/man/nmtui.1 @@ -2,12 +2,12 @@ .\" Title: nmtui .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot -.\" Date: 05/04/2022 +.\" Date: 05/13/2022 .\" Manual: General Commands Manual -.\" Source: NetworkManager 1.37.92 +.\" Source: NetworkManager 1.38.0 .\" Language: English .\" -.TH "NMTUI" "1" "" "NetworkManager 1\&.37\&.92" "General Commands Manual" +.TH "NMTUI" "1" "" "NetworkManager 1\&.38\&.0" "General Commands Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/meson.build b/meson.build index df7eb948..7a7eb176 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project( # - add corresponding NM_VERSION_x_y_z macros in # "src/libnm-core-public/nm-version-macros.h.in" # - update number in configure.ac - version: '1.37.92', + version: '1.38.0', license: 'GPL2+', default_options: [ 'buildtype=debugoptimized', diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 1d9f235a..70b52b1a 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -6585,7 +6585,8 @@ device_link_changed(gpointer user_data) * so that it theoretically would also work for NMVpnConnection (although, * NMVpnConnection should become like a regular device, akin to NMDevicePpp). */ - if (!nm_device_sys_iface_state_is_external(self)) + if (priv->state >= NM_DEVICE_STATE_IP_CONFIG && priv->state <= NM_DEVICE_STATE_ACTIVATED + && !nm_device_sys_iface_state_is_external(self)) nm_device_l3cfg_commit(self, NM_L3_CFG_COMMIT_TYPE_REAPPLY, FALSE); } diff --git a/src/core/dhcp/nm-dhcp-dhclient.c b/src/core/dhcp/nm-dhcp-dhclient.c index 28d40c07..d0cd5ebd 100644 --- a/src/core/dhcp/nm-dhcp-dhclient.c +++ b/src/core/dhcp/nm-dhcp-dhclient.c @@ -330,7 +330,7 @@ create_dhclient_config(NMDhcpDhclient *self, static gboolean dhclient_start(NMDhcpClient *client, - const char *mode_opt, + gboolean set_mode, gboolean release, pid_t *out_pid, GError **error) @@ -439,14 +439,19 @@ dhclient_start(NMDhcpClient *client, } if (addr_family == AF_INET6) { - guint prefixes = client_config->v6.needed_prefixes; + guint prefixes = client_config->v6.needed_prefixes; + const char *mode_opt; g_ptr_array_add(argv, (gpointer) "-6"); - if (prefixes > 0 && nm_streq0(mode_opt, "-S")) { - /* -S is incompatible with -P, only use the latter */ + if (!set_mode) + mode_opt = NULL; + else if (!client_config->v6.info_only) + mode_opt = "-N"; + else if (prefixes == 0) + mode_opt = "-S"; + else mode_opt = NULL; - } if (mode_opt) g_ptr_array_add(argv, (gpointer) mode_opt); @@ -546,7 +551,7 @@ ip4_start(NMDhcpClient *client, GError **error) nm_assert(!client_config->client_id); nm_dhcp_client_set_effective_client_id(client, new_client_id); } - return dhclient_start(client, NULL, FALSE, NULL, error); + return dhclient_start(client, FALSE, FALSE, NULL, error); } static gboolean @@ -581,7 +586,7 @@ ip6_start(NMDhcpClient *client, const struct in6_addr *ll_addr, GError **error) return FALSE; } - return dhclient_start(client, config->v6.needed_prefixes ? "-S" : "-N", FALSE, NULL, error); + return dhclient_start(client, TRUE, FALSE, NULL, error); } static void @@ -615,7 +620,7 @@ stop(NMDhcpClient *client, gboolean release) if (release) { pid_t rpid = -1; - if (dhclient_start(client, NULL, TRUE, &rpid, NULL)) { + if (dhclient_start(client, FALSE, TRUE, &rpid, NULL)) { /* Wait a few seconds for the release to happen */ nm_dhcp_client_stop_pid(rpid, nm_dhcp_client_get_iface(client)); } diff --git a/src/core/dhcp/nm-dhcp-systemd.c b/src/core/dhcp/nm-dhcp-systemd.c index 14a121e7..4a718de9 100644 --- a/src/core/dhcp/nm-dhcp-systemd.c +++ b/src/core/dhcp/nm-dhcp-systemd.c @@ -751,14 +751,12 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx, gs_unref_hashtable GHashTable *options = NULL; struct in6_addr tmp_addr; const struct in6_addr *dns; - uint32_t lft_pref, lft_valid; char addr_str[NM_UTILS_INET_ADDRSTRLEN]; char **domains; char **ntp_fqdns; const struct in6_addr *ntp_addrs; const char *s; - nm_auto_free_gstring GString *str = NULL; - gboolean has_any_addresses = FALSE; + nm_auto_free_gstring GString *str = NULL; int num, i; nm_assert(lease); @@ -767,36 +765,45 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx, options = nm_dhcp_option_create_options_dict(); - sd_dhcp6_lease_reset_address_iter(lease); - nm_gstring_prepare(&str); - while (sd_dhcp6_lease_get_address(lease, &tmp_addr, &lft_pref, &lft_valid) >= 0) { - const NMPlatformIP6Address address = { - .plen = 128, - .address = tmp_addr, - .timestamp = ts, - .lifetime = lft_valid, - .preferred = lft_pref, - .addr_source = NM_IP_CONFIG_SOURCE_DHCP, - }; - - nm_l3_config_data_add_address_6(l3cd, &address); + if (!info_only) { + gboolean has_any_addresses = FALSE; + uint32_t lft_pref; + uint32_t lft_valid; - _nm_utils_inet6_ntop(&tmp_addr, addr_str); - g_string_append(nm_gstring_add_space_delimiter(str), addr_str); + sd_dhcp6_lease_reset_address_iter(lease); + nm_gstring_prepare(&str); + while (sd_dhcp6_lease_get_address(lease, &tmp_addr, &lft_pref, &lft_valid) >= 0) { + const NMPlatformIP6Address address = { + .plen = 128, + .address = tmp_addr, + .timestamp = ts, + .lifetime = lft_valid, + .preferred = lft_pref, + .addr_source = NM_IP_CONFIG_SOURCE_DHCP, + }; + + nm_l3_config_data_add_address_6(l3cd, &address); + + _nm_utils_inet6_ntop(&tmp_addr, addr_str); + g_string_append(nm_gstring_add_space_delimiter(str), addr_str); - has_any_addresses = TRUE; - } + has_any_addresses = TRUE; + } - if (str->len) { - nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS, str->str); - } + if (str->len) { + nm_dhcp_option_add_option(options, + AF_INET6, + NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS, + str->str); + } - if (!info_only && !has_any_addresses) { - g_set_error_literal(error, - NM_MANAGER_ERROR, - NM_MANAGER_ERROR_FAILED, - "no address received in managed mode"); - return NULL; + if (!has_any_addresses) { + g_set_error_literal(error, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_FAILED, + "no address received in managed mode"); + return NULL; + } } num = sd_dhcp6_lease_get_dns(lease, &dns); @@ -966,11 +973,10 @@ ip6_start(NMDhcpClient *client, const struct in6_addr *ll_addr, GError **error) _LOGT("dhcp-client6: set %p", sd_client); - if (client_config->v6.info_only) { - sd_dhcp6_client_set_address_request(sd_client, 0); - if (client_config->v6.needed_prefixes == 0) - sd_dhcp6_client_set_information_request(sd_client, 1); - } + sd_dhcp6_client_set_address_request(sd_client, !client_config->v6.info_only); + sd_dhcp6_client_set_information_request(sd_client, + client_config->v6.info_only + && client_config->v6.needed_prefixes == 0); r = sd_dhcp6_client_set_iaid(sd_client, client_config->v6.iaid); if (r < 0) { diff --git a/src/core/dhcp/nm-dhcp-utils.c b/src/core/dhcp/nm-dhcp-utils.c index a0eec6e0..081e2841 100644 --- a/src/core/dhcp/nm-dhcp-utils.c +++ b/src/core/dhcp/nm-dhcp-utils.c @@ -669,8 +669,13 @@ nm_dhcp_utils_ip6_config_from_options(NMDedupMultiIndex *multi_idx, _LOG2I(LOGD_DHCP6, iface, " preferred_lft %u", address.preferred); } - str = g_hash_table_lookup(options, "ip6_address"); - if (str) { + if (!info_only) { + str = g_hash_table_lookup(options, "ip6_address"); + if (!str) { + /* No address in Managed mode is a hard error */ + return NULL; + } + if (!inet_pton(AF_INET6, str, &tmp_addr)) { _LOG2W(LOGD_DHCP6, iface, "(%s): DHCP returned invalid address '%s'", iface, str); return NULL; @@ -680,9 +685,6 @@ nm_dhcp_utils_ip6_config_from_options(NMDedupMultiIndex *multi_idx, address.addr_source = NM_IP_CONFIG_SOURCE_DHCP; nm_l3_config_data_add_address_6(l3cd, &address); _LOG2I(LOGD_DHCP6, iface, " address %s", str); - } else if (info_only == FALSE) { - /* No address in Managed mode is a hard error */ - return NULL; } str = g_hash_table_lookup(options, "host_name"); diff --git a/src/core/ndisc/tests/test-ndisc-fake.c b/src/core/ndisc/tests/test-ndisc-fake.c index 0763b64e..457dcf19 100644 --- a/src/core/ndisc/tests/test-ndisc-fake.c +++ b/src/core/ndisc/tests/test-ndisc-fake.c @@ -646,7 +646,11 @@ test_dns_solicit_loop(void) nm_ndisc_start(NM_NDISC(ndisc)); if (nmtst_main_loop_run(data.loop, 10000)) g_error("we expect to run the loop until timeout. What is wrong?"); - g_assert_cmpint(data.counter, ==, 3); + if (data.counter == 2) { + /* Hm. I saw this too. Odd. But as there are dependencies on the run time, + * I guess it can just happen. It's probably fine. */ + } else + g_assert_cmpint(data.counter, ==, 3); g_assert_cmpint(data.rs_counter, ==, 1); } diff --git a/src/core/nm-audit-manager.c b/src/core/nm-audit-manager.c index dd96d834..4e134d1a 100644 --- a/src/core/nm-audit-manager.c +++ b/src/core/nm-audit-manager.c @@ -135,10 +135,13 @@ build_message(NMStrBuf *strbuf, AuditBackend backend, GPtrArray *fields) #if HAVE_LIBAUDIT if (backend == BACKEND_AUDITD) { if (field->need_encoding) { - gs_free char *value = NULL; + nm_auto_free char *value = NULL; value = audit_encode_nv_string(field->name, str, 0); - nm_str_buf_append(strbuf, value); + if (value) + nm_str_buf_append(strbuf, value); + else + nm_str_buf_append_printf(strbuf, "%s=???", field->name); } else nm_str_buf_append_printf(strbuf, "%s=%s", field->name, str); continue; diff --git a/src/core/nm-l3cfg.c b/src/core/nm-l3cfg.c index 6b7e6f4b..38b9d822 100644 --- a/src/core/nm-l3cfg.c +++ b/src/core/nm-l3cfg.c @@ -4186,6 +4186,7 @@ _l3_commit_one(NML3Cfg *self, gboolean final_failure_for_temporary_not_available = FALSE; char sbuf_commit_type[50]; gboolean success = TRUE; + guint i; nm_assert(NM_IS_L3CFG(self)); nm_assert(NM_IN_SET(commit_type, @@ -4218,11 +4219,35 @@ _l3_commit_one(NML3Cfg *self, route_table_sync = NM_IP_ROUTE_TABLE_SYNC_MODE_MAIN; if (commit_type == NM_L3_CFG_COMMIT_TYPE_REAPPLY) { - addresses_prune = nm_platform_ip_address_get_prune_list(self->priv.platform, - addr_family, - self->priv.ifindex, - TRUE); - routes_prune = nm_platform_ip_route_get_prune_list(self->priv.platform, + gs_unref_array GArray *ipv6_temp_addrs_keep = NULL; + + nm_platform_process_events(self->priv.platform); + + if (!IS_IPv4 && addresses) { + for (i = 0; i < addresses->len; i++) { + const NMPlatformIP6Address *addr = NMP_OBJECT_CAST_IP6_ADDRESS(addresses->pdata[i]); + + if (!NM_FLAGS_HAS(addr->n_ifa_flags, IFA_F_MANAGETEMPADDR)) + continue; + + nm_assert(addr->plen == 64); + + /* Construct a list of all IPv6 prefixes for which we (still) set + * IFA_F_MANAGETEMPADDR (that is, for which we will have temporary addresses). + * Those should not be pruned during reapply. */ + if (!ipv6_temp_addrs_keep) + ipv6_temp_addrs_keep = g_array_new(FALSE, FALSE, sizeof(struct in6_addr)); + g_array_append_val(ipv6_temp_addrs_keep, addr->address); + } + } + addresses_prune = + nm_platform_ip_address_get_prune_list(self->priv.platform, + addr_family, + self->priv.ifindex, + nm_g_array_data(ipv6_temp_addrs_keep), + nm_g_array_len(ipv6_temp_addrs_keep)); + + routes_prune = nm_platform_ip_route_get_prune_list(self->priv.platform, addr_family, self->priv.ifindex, route_table_sync); diff --git a/src/libnm-core-impl/nm-setting-infiniband.c b/src/libnm-core-impl/nm-setting-infiniband.c index eb6c9536..787b838b 100644 --- a/src/libnm-core-impl/nm-setting-infiniband.c +++ b/src/libnm-core-impl/nm-setting-infiniband.c @@ -241,6 +241,14 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) g_prefix_error(error, "%s: ", NM_SETTING_INFINIBAND_PARENT); return FALSE; } + if (NM_IN_SET(priv->p_key, 0, 0x8000)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("the values 0 and 0x8000 are not allowed")); + g_prefix_error(error, "%s: ", NM_SETTING_INFINIBAND_P_KEY); + return FALSE; + } } if (connection) @@ -254,17 +262,27 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) virtual_iface_name = nm_setting_infiniband_get_virtual_interface_name(NM_SETTING_INFINIBAND(setting)); - if (!nm_streq(interface_name, virtual_iface_name)) { + if (!nm_streq0(interface_name, virtual_iface_name)) { /* We don't support renaming software infiniband devices. Later we might, but * for now just reject such connections. **/ - g_set_error(error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("interface name of software infiniband device must be '%s' or unset " - "(instead it is '%s')"), - virtual_iface_name, - interface_name); + if (virtual_iface_name) { + g_set_error( + error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("interface name of software infiniband device must be '%s' or unset " + "(instead it is '%s')"), + virtual_iface_name, + interface_name); + } else { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("interface name of software infiniband device with MAC address " + "must be unset (instead it is '%s')"), + interface_name); + } g_prefix_error(error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, diff --git a/src/libnm-core-public/nm-version-macros.h b/src/libnm-core-public/nm-version-macros.h index b10be844..07c259a7 100644 --- a/src/libnm-core-public/nm-version-macros.h +++ b/src/libnm-core-public/nm-version-macros.h @@ -22,7 +22,7 @@ * Evaluates to the minor version number of NetworkManager which this source * is compiled against. */ -#define NM_MINOR_VERSION (37) +#define NM_MINOR_VERSION (38) /** * NM_MICRO_VERSION: @@ -30,7 +30,7 @@ * Evaluates to the micro version number of NetworkManager which this source * compiled against. */ -#define NM_MICRO_VERSION (92) +#define NM_MICRO_VERSION (0) /** * NM_CHECK_VERSION: diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index 941312bd..daefa068 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -2127,6 +2127,12 @@ char *nm_utils_g_slist_strlist_join(const GSList *a, const char *separator); /*****************************************************************************/ +static inline gpointer +nm_g_array_data(const GArray *arr) +{ + return arr ? arr->data : NULL; +} + static inline guint nm_g_array_len(const GArray *arr) { diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c index 8866a436..090af26d 100644 --- a/src/libnm-platform/nm-platform.c +++ b/src/libnm-platform/nm-platform.c @@ -4459,15 +4459,25 @@ gboolean nm_platform_ip_address_flush(NMPlatform *self, int addr_family, int ifindex) { gboolean success = TRUE; + int IS_IPv4; _CHECK_SELF(self, klass, FALSE); - nm_assert(NM_IN_SET(addr_family, AF_UNSPEC, AF_INET, AF_INET6)); + nm_assert_addr_family_or_unspec(addr_family); + + for (IS_IPv4 = 1; IS_IPv4 >= 0; IS_IPv4--) { + gs_unref_ptrarray GPtrArray *addresses_prune = NULL; + const int addr_family2 = IS_IPv4 ? AF_INET : AF_INET6; + + if (!NM_IN_SET(addr_family, AF_UNSPEC, addr_family2)) + continue; - if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET)) - success &= nm_platform_ip4_address_sync(self, ifindex, NULL); - if (NM_IN_SET(addr_family, AF_UNSPEC, AF_INET6)) - success &= nm_platform_ip6_address_sync(self, ifindex, NULL, TRUE); + addresses_prune = + nm_platform_ip_address_get_prune_list(self, addr_family2, ifindex, NULL, 0); + + if (!nm_platform_ip_address_sync(self, addr_family2, ifindex, NULL, addresses_prune)) + success = FALSE; + } return success; } @@ -4509,17 +4519,31 @@ _err_inval_due_to_ipv6_tentative_pref_src(NMPlatform *self, const NMPObject *obj return TRUE; } -GPtrArray * -nm_platform_ip_address_get_prune_list(NMPlatform *self, - int addr_family, - int ifindex, - gboolean exclude_ipv6_temporary_addrs) +static guint +_ipv6_temporary_addr_prefixes_keep_hash(gconstpointer ptr) { - const int IS_IPv4 = NM_IS_IPv4(addr_family); - const NMDedupMultiHeadEntry *head_entry; - NMPLookup lookup; - GPtrArray *result = NULL; - CList *iter; + return nm_hash_mem(1161670183u, ptr, 8); +} + +static gboolean +_ipv6_temporary_addr_prefixes_keep_equal(gconstpointer ptr_a, gconstpointer ptr_b) +{ + return !memcmp(ptr_a, ptr_b, 8); +} + +GPtrArray * +nm_platform_ip_address_get_prune_list(NMPlatform *self, + int addr_family, + int ifindex, + const struct in6_addr *ipv6_temporary_addr_prefixes_keep, + guint ipv6_temporary_addr_prefixes_keep_len) +{ + gs_unref_hashtable GHashTable *ipv6_temporary_addr_prefixes_keep_idx = NULL; + const int IS_IPv4 = NM_IS_IPv4(addr_family); + const NMDedupMultiHeadEntry *head_entry; + NMPLookup lookup; + GPtrArray *result = NULL; + CList *iter; nmp_lookup_init_object(&lookup, NMP_OBJECT_TYPE_IP_ADDRESS(NM_IS_IPv4(addr_family)), ifindex); @@ -4532,9 +4556,40 @@ nm_platform_ip_address_get_prune_list(NMPlatform *self, const NMPObject *obj = c_list_entry(iter, NMDedupMultiEntry, lst_entries)->obj; if (!IS_IPv4) { - if (exclude_ipv6_temporary_addrs - && NM_FLAGS_HAS(NMP_OBJECT_CAST_IP_ADDRESS(obj)->n_ifa_flags, IFA_F_SECONDARY)) - continue; + const NMPlatformIP6Address *a6 = NMP_OBJECT_CAST_IP6_ADDRESS(obj); + + if (NM_FLAGS_HAS(a6->n_ifa_flags, IFA_F_SECONDARY) + && ipv6_temporary_addr_prefixes_keep_len > 0 && a6->plen == 64) { + gboolean keep = FALSE; + guint i; + + if (ipv6_temporary_addr_prefixes_keep_len < 10) { + for (i = 0; i < ipv6_temporary_addr_prefixes_keep_len; i++) { + if (memcmp(&ipv6_temporary_addr_prefixes_keep[i], &a6->address, 8) == 0) { + keep = TRUE; + break; + } + } + } else { + /* We have a larger number of addresses. We want that our functions are O(n), + * so build a lookup index. */ + if (!ipv6_temporary_addr_prefixes_keep_idx) { + ipv6_temporary_addr_prefixes_keep_idx = + g_hash_table_new(_ipv6_temporary_addr_prefixes_keep_hash, + _ipv6_temporary_addr_prefixes_keep_equal); + for (i = 0; i < ipv6_temporary_addr_prefixes_keep_len; i++) { + g_hash_table_add(ipv6_temporary_addr_prefixes_keep_idx, + (gpointer) &ipv6_temporary_addr_prefixes_keep[i]); + } + } + if (g_hash_table_contains(ipv6_temporary_addr_prefixes_keep_idx, &a6->address)) + keep = TRUE; + } + if (keep) { + /* This IPv6 temporary address has a prefix that we want to keep. */ + continue; + } + } } if (!result) diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h index 246d6ff6..5c72fade 100644 --- a/src/libnm-platform/nm-platform.h +++ b/src/libnm-platform/nm-platform.h @@ -2187,42 +2187,12 @@ gboolean nm_platform_ip_address_sync(NMPlatform *self, GPtrArray *known_addresses, GPtrArray *addresses_prune); -GPtrArray *nm_platform_ip_address_get_prune_list(NMPlatform *self, - int addr_family, - int ifindex, - gboolean exclude_ipv6_temporary_addrs); - -static inline gboolean -_nm_platform_ip_address_sync(NMPlatform *self, - int addr_family, - int ifindex, - GPtrArray *known_addresses, - gboolean full_sync) -{ - gs_unref_ptrarray GPtrArray *addresses_prune = NULL; - - addresses_prune = nm_platform_ip_address_get_prune_list(self, addr_family, ifindex, !full_sync); - return nm_platform_ip_address_sync(self, - addr_family, - ifindex, - known_addresses, - addresses_prune); -} - -static inline gboolean -nm_platform_ip4_address_sync(NMPlatform *self, int ifindex, GPtrArray *known_addresses) -{ - return _nm_platform_ip_address_sync(self, AF_INET, ifindex, known_addresses, TRUE); -} - -static inline gboolean -nm_platform_ip6_address_sync(NMPlatform *self, - int ifindex, - GPtrArray *known_addresses, - gboolean full_sync) -{ - return _nm_platform_ip_address_sync(self, AF_INET6, ifindex, known_addresses, full_sync); -} +GPtrArray * +nm_platform_ip_address_get_prune_list(NMPlatform *self, + int addr_family, + int ifindex, + const struct in6_addr *ipv6_temporary_addr_prefixes_keep, + guint ipv6_temporary_addr_prefixes_keep_len); gboolean nm_platform_ip_address_flush(NMPlatform *self, int addr_family, int ifindex); diff --git a/src/n-dhcp4/src/n-dhcp4-c-probe.c b/src/n-dhcp4/src/n-dhcp4-c-probe.c index 7f20ac05..283c1693 100644 --- a/src/n-dhcp4/src/n-dhcp4-c-probe.c +++ b/src/n-dhcp4/src/n-dhcp4-c-probe.c @@ -995,14 +995,13 @@ static int n_dhcp4_client_probe_transition_nak(NDhcp4ClientProbe *probe) { case N_DHCP4_CLIENT_PROBE_STATE_RENEWING: case N_DHCP4_CLIENT_PROBE_STATE_REBINDING: - /* XXX */ - r = n_dhcp4_client_probe_raise(probe, NULL, N_DHCP4_CLIENT_EVENT_RETRACTED); if (r) return r; + probe->current_lease = n_dhcp4_client_lease_unref(probe->current_lease); probe->state = N_DHCP4_CLIENT_PROBE_STATE_INIT; probe->ns_deferred = n_dhcp4_gettime(CLOCK_BOOTTIME) + probe->ns_nak_restart_delay; probe->ns_nak_restart_delay = C_CLAMP(probe->ns_nak_restart_delay * 2u, diff --git a/src/nm-cloud-setup/nmcs-provider-aliyun.c b/src/nm-cloud-setup/nmcs-provider-aliyun.c index 31c9830d..1a5e5459 100644 --- a/src/nm-cloud-setup/nmcs-provider-aliyun.c +++ b/src/nm-cloud-setup/nmcs-provider-aliyun.c @@ -123,29 +123,26 @@ detect(NMCSProvider *provider, GTask *task) typedef enum { GET_CONFIG_FETCH_DONE_TYPE_SUBNET_VPC_CIDR_BLOCK, GET_CONFIG_FETCH_DONE_TYPE_PRIVATE_IPV4S, + GET_CONFIG_FETCH_DONE_TYPE_PRIMARY_IP_ADDRESS, GET_CONFIG_FETCH_DONE_TYPE_NETMASK, GET_CONFIG_FETCH_DONE_TYPE_GATEWAY, } GetConfigFetchDoneType; static void -_get_config_fetch_done_cb(NMHttpClient *http_client, - GAsyncResult *result, - gpointer user_data, - GetConfigFetchDoneType fetch_type) +_get_config_fetch_done_cb(NMHttpClient *http_client, + GAsyncResult *result, + NMCSProviderGetConfigIfaceData *config_iface_data, + GetConfigFetchDoneType fetch_type) { - NMCSProviderGetConfigTaskData *get_config_data; - gs_unref_bytes GBytes *response = NULL; - gs_free_error GError *error = NULL; - NMCSProviderGetConfigIfaceData *config_iface_data; - in_addr_t tmp_addr; - int tmp_prefix; - in_addr_t netmask_bin; - in_addr_t gateway_bin; - gs_free const char **s_addrs = NULL; - gsize i; - gsize len; - - nm_utils_user_data_unpack(user_data, &get_config_data, &config_iface_data); + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError *error = NULL; + in_addr_t tmp_addr; + int tmp_prefix; + in_addr_t netmask_bin; + in_addr_t gateway_bin; + gs_free const char **s_addrs = NULL; + gsize i; + gsize len; nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error); @@ -177,6 +174,16 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, } break; + case GET_CONFIG_FETCH_DONE_TYPE_PRIMARY_IP_ADDRESS: + + if (nm_utils_parse_inaddr_bin(AF_INET, g_bytes_get_data(response, NULL), NULL, &tmp_addr)) { + nm_assert(config_iface_data->priv.aliyun.primary_ip_address == 0); + nm_assert(!config_iface_data->priv.aliyun.has_primary_ip_address); + config_iface_data->priv.aliyun.primary_ip_address = tmp_addr; + config_iface_data->priv.aliyun.has_primary_ip_address = TRUE; + } + break; + case GET_CONFIG_FETCH_DONE_TYPE_SUBNET_VPC_CIDR_BLOCK: if (nm_utils_parse_inaddr_prefix_bin(AF_INET, @@ -212,9 +219,30 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, break; } + if (!config_iface_data->priv.aliyun.ipv4s_arr_ordered + && config_iface_data->priv.aliyun.has_primary_ip_address + && config_iface_data->ipv4s_len > 0) { + for (i = 0; i < config_iface_data->ipv4s_len; i++) { + if (config_iface_data->ipv4s_arr[i] + != config_iface_data->priv.aliyun.primary_ip_address) + continue; + if (i > 0) { + /* OK, at position [i] we found the primary address. + * Move the elements from [0..(i-1)] to [1..i] and then set [0]. */ + memmove(&config_iface_data->ipv4s_arr[1], + &config_iface_data->ipv4s_arr[0], + i * sizeof(in_addr_t)); + config_iface_data->ipv4s_arr[0] = config_iface_data->priv.aliyun.primary_ip_address; + } + break; + } + config_iface_data->priv.aliyun.ipv4s_arr_ordered = TRUE; + } + out: - get_config_data->n_pending--; - _nmcs_provider_get_config_task_maybe_return(get_config_data, g_steal_pointer(&error)); + config_iface_data->get_config_data->n_pending--; + _nmcs_provider_get_config_task_maybe_return(config_iface_data->get_config_data, + g_steal_pointer(&error)); } static void @@ -235,6 +263,17 @@ _get_config_fetch_done_cb_private_ipv4s(GObject *source, GAsyncResult *result, g GET_CONFIG_FETCH_DONE_TYPE_PRIVATE_IPV4S); } +static void +_get_config_fetch_done_cb_primary_ip_address(GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + _get_config_fetch_done_cb(NM_HTTP_CLIENT(source), + result, + user_data, + GET_CONFIG_FETCH_DONE_TYPE_PRIMARY_IP_ADDRESS); +} + static void _get_config_fetch_done_cb_netmask(GObject *source, GAsyncResult *result, gpointer user_data) { @@ -297,6 +336,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us gs_free char *uri2 = NULL; gs_free char *uri3 = NULL; gs_free char *uri4 = NULL; + gs_free char *uri5 = NULL; config_iface_data = g_hash_table_lookup(get_config_data->result_dict, v_hwaddr); @@ -309,9 +349,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us } config_iface_data = - nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, - FALSE, - v_hwaddr); + nmcs_provider_get_config_iface_data_create(get_config_data, FALSE, v_hwaddr); } nm_assert(config_iface_data->iface_idx == -1); @@ -338,7 +376,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_vpc_cidr_block, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); get_config_data->n_pending++; nm_http_client_poll_get( @@ -355,12 +393,29 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_private_ipv4s, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); get_config_data->n_pending++; nm_http_client_poll_get( http_client, (uri3 = _aliyun_uri_interfaces(v_mac_data->path, + NM_STR_HAS_SUFFIX(v_mac_data->path, "/") ? "" : "/", + "primary-ip-address")), + HTTP_TIMEOUT_MS, + 512 * 1024, + 10000, + 1000, + NULL, + get_config_data->intern_cancellable, + NULL, + NULL, + _get_config_fetch_done_cb_primary_ip_address, + config_iface_data); + + get_config_data->n_pending++; + nm_http_client_poll_get( + http_client, + (uri4 = _aliyun_uri_interfaces(v_mac_data->path, NM_STR_HAS_SUFFIX(v_mac_data->path, "/") ? "" : "/", "netmask")), HTTP_TIMEOUT_MS, @@ -372,12 +427,12 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_netmask, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); get_config_data->n_pending++; nm_http_client_poll_get( http_client, - (uri4 = _aliyun_uri_interfaces(v_mac_data->path, + (uri5 = _aliyun_uri_interfaces(v_mac_data->path, NM_STR_HAS_SUFFIX(v_mac_data->path, "/") ? "" : "/", "gateway")), HTTP_TIMEOUT_MS, @@ -389,7 +444,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_gateway, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); } _nmcs_provider_get_config_task_maybe_return(get_config_data, NULL); diff --git a/src/nm-cloud-setup/nmcs-provider-azure.c b/src/nm-cloud-setup/nmcs-provider-azure.c index 06f23ea7..9b27af28 100644 --- a/src/nm-cloud-setup/nmcs-provider-azure.c +++ b/src/nm-cloud-setup/nmcs-provider-azure.c @@ -387,9 +387,7 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) goto out_done; } iface_data->iface_get_config = - nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, - FALSE, - v_hwaddr); + nmcs_provider_get_config_iface_data_create(get_config_data, FALSE, v_hwaddr); } else { if (iface_data->iface_get_config->iface_idx >= 0) { _LOGI("interface[%" G_GSSIZE_FORMAT "]: duplicate MAC address %s returned", diff --git a/src/nm-cloud-setup/nmcs-provider-ec2.c b/src/nm-cloud-setup/nmcs-provider-ec2.c index ee4e2a95..d6fa0311 100644 --- a/src/nm-cloud-setup/nmcs-provider-ec2.c +++ b/src/nm-cloud-setup/nmcs-provider-ec2.c @@ -116,19 +116,15 @@ detect(NMCSProvider *provider, GTask *task) /*****************************************************************************/ static void -_get_config_fetch_done_cb(NMHttpClient *http_client, - GAsyncResult *result, - gpointer user_data, - gboolean is_local_ipv4) +_get_config_fetch_done_cb(NMHttpClient *http_client, + GAsyncResult *result, + NMCSProviderGetConfigIfaceData *config_iface_data, + gboolean is_local_ipv4) { - NMCSProviderGetConfigTaskData *get_config_data; - gs_unref_bytes GBytes *response = NULL; - gs_free_error GError *error = NULL; - NMCSProviderGetConfigIfaceData *config_iface_data; - in_addr_t tmp_addr; - int tmp_prefix; - - nm_utils_user_data_unpack(user_data, &get_config_data, &config_iface_data); + gs_unref_bytes GBytes *response = NULL; + gs_free_error GError *error = NULL; + in_addr_t tmp_addr; + int tmp_prefix; nm_http_client_poll_get_finish(http_client, result, NULL, &response, &error); @@ -173,8 +169,9 @@ _get_config_fetch_done_cb(NMHttpClient *http_client, } out: - get_config_data->n_pending--; - _nmcs_provider_get_config_task_maybe_return(get_config_data, g_steal_pointer(&error)); + config_iface_data->get_config_data->n_pending--; + _nmcs_provider_get_config_task_maybe_return(config_iface_data->get_config_data, + g_steal_pointer(&error)); } static void @@ -244,9 +241,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us continue; } config_iface_data = - nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, - FALSE, - v_hwaddr); + nmcs_provider_get_config_iface_data_create(get_config_data, FALSE, v_hwaddr); } nm_assert(config_iface_data->iface_idx == -1); @@ -273,7 +268,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_subnet_ipv4_cidr_block, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); get_config_data->n_pending++; nm_http_client_poll_get( @@ -290,7 +285,7 @@ _get_config_metadata_ready_cb(GObject *source, GAsyncResult *result, gpointer us NULL, NULL, _get_config_fetch_done_cb_local_ipv4s, - nm_utils_user_data_pack(get_config_data, config_iface_data)); + config_iface_data); } _nmcs_provider_get_config_task_maybe_return(get_config_data, NULL); diff --git a/src/nm-cloud-setup/nmcs-provider-gcp.c b/src/nm-cloud-setup/nmcs-provider-gcp.c index 0df2bdd6..a325f31a 100644 --- a/src/nm-cloud-setup/nmcs-provider-gcp.c +++ b/src/nm-cloud-setup/nmcs-provider-gcp.c @@ -282,9 +282,7 @@ _get_config_iface_cb(GObject *source, GAsyncResult *result, gpointer user_data) goto out_done; } iface_data->iface_get_config = - nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, - FALSE, - v_hwaddr); + nmcs_provider_get_config_iface_data_create(get_config_data, FALSE, v_hwaddr); is_requested = FALSE; } else { if (iface_data->iface_get_config->iface_idx >= 0) { diff --git a/src/nm-cloud-setup/nmcs-provider.c b/src/nm-cloud-setup/nmcs-provider.c index f14a3d02..fd9a61b8 100644 --- a/src/nm-cloud-setup/nmcs-provider.c +++ b/src/nm-cloud-setup/nmcs-provider.c @@ -174,24 +174,38 @@ nmcs_provider_detect_finish(NMCSProvider *self, GAsyncResult *result, GError **e /*****************************************************************************/ NMCSProviderGetConfigIfaceData * -nmcs_provider_get_config_iface_data_create(GHashTable *iface_datas, - gboolean was_requested, - const char *hwaddr) +nmcs_provider_get_config_iface_data_create(NMCSProviderGetConfigTaskData *get_config_data, + gboolean was_requested, + const char *hwaddr) { NMCSProviderGetConfigIfaceData *iface_data; nm_assert(hwaddr); + nm_assert(get_config_data); + nm_assert(NMCS_IS_PROVIDER(get_config_data->self)); iface_data = g_slice_new(NMCSProviderGetConfigIfaceData); *iface_data = (NMCSProviderGetConfigIfaceData){ - .hwaddr = g_strdup(hwaddr), - .iface_idx = -1, - .was_requested = was_requested, + .get_config_data = get_config_data, + .hwaddr = g_strdup(hwaddr), + .iface_idx = -1, + .was_requested = was_requested, }; + /* "priv" is a union, and according to C, it might not be properly initialized + * that all union members are set to false/0/NULL/0.0. We need to know which + * union field we are going to use, and that depends on the type of "self". + * Also, knowing the type would allow us to initialize to something other than + * false/0/NULL/0.0. */ + if (G_OBJECT_TYPE(get_config_data->self) == nmcs_provider_aliyun_get_type()) { + iface_data->priv.aliyun = (typeof(iface_data->priv.aliyun)){ + .has_primary_ip_address = FALSE, + }; + } + /* the has does not own the key (iface_datta->hwaddr), the lifetime of the * key is associated with the iface_data instance. */ - g_hash_table_replace(iface_datas, (char *) iface_data->hwaddr, iface_data); + g_hash_table_replace(get_config_data->result_dict, (char *) iface_data->hwaddr, iface_data); return iface_data; } @@ -280,6 +294,8 @@ nmcs_provider_get_config(NMCSProvider *self, get_config_data = g_slice_new(NMCSProviderGetConfigTaskData); *get_config_data = (NMCSProviderGetConfigTaskData){ + /* "self" is kept alive by "task". */ + .self = self, .task = nm_g_task_new(self, cancellable, nmcs_provider_get_config, callback, user_data), .any = any, .result_dict = g_hash_table_new_full(nm_str_hash, g_str_equal, NULL, _iface_data_free), @@ -288,7 +304,7 @@ nmcs_provider_get_config(NMCSProvider *self, nmcs_wait_for_objects_register(get_config_data->task); for (; hwaddrs && hwaddrs[0]; hwaddrs++) - nmcs_provider_get_config_iface_data_create(get_config_data->result_dict, TRUE, hwaddrs[0]); + nmcs_provider_get_config_iface_data_create(get_config_data, TRUE, hwaddrs[0]); if (cancellable) { gulong cancelled_id; diff --git a/src/nm-cloud-setup/nmcs-provider.h b/src/nm-cloud-setup/nmcs-provider.h index bce41dcb..502f1d03 100644 --- a/src/nm-cloud-setup/nmcs-provider.h +++ b/src/nm-cloud-setup/nmcs-provider.h @@ -9,11 +9,16 @@ /*****************************************************************************/ +struct _NMCSProvider; +struct _NMCSProviderGetConfigTaskData; + typedef struct { /* And it's exactly the same pointer that is also the key for the iface_datas * dictionary. */ const char *hwaddr; + struct _NMCSProviderGetConfigTaskData *get_config_data; + in_addr_t *ipv4s_arr; gsize ipv4s_len; @@ -36,6 +41,18 @@ typedef struct { * nmcs_provider_get_config(). */ bool was_requested : 1; + /* Usually we would want that the parent class NMCSProvider is not aware about + * the implementations. However, it's convenient to track implementation specific data + * here, thus we violate such separation. In practice, all subclasses are known + * at compile time, and it will be simpler this way. */ + union { + struct { + in_addr_t primary_ip_address; + bool has_primary_ip_address : 1; + bool ipv4s_arr_ordered : 1; + } aliyun; + } priv; + } NMCSProviderGetConfigIfaceData; static inline gboolean @@ -45,10 +62,6 @@ nmcs_provider_get_config_iface_data_is_valid(const NMCSProviderGetConfigIfaceDat && ((config_data->has_ipv4s && config_data->has_cidr) || config_data->iproutes_len); } -NMCSProviderGetConfigIfaceData *nmcs_provider_get_config_iface_data_create(GHashTable *iface_datas, - gboolean was_requested, - const char *hwaddr); - /*****************************************************************************/ typedef struct { @@ -83,9 +96,11 @@ NM_AUTO_DEFINE_FCN0(NMCSProviderGetConfigResult *, /*****************************************************************************/ -typedef struct { +typedef struct _NMCSProviderGetConfigTaskData { GTask *task; + struct _NMCSProvider *self; + GHashTable *result_dict; /* this cancellable should be used for the provider implementation @@ -105,6 +120,15 @@ typedef struct { bool any : 1; } NMCSProviderGetConfigTaskData; +/*****************************************************************************/ + +NMCSProviderGetConfigIfaceData * +nmcs_provider_get_config_iface_data_create(NMCSProviderGetConfigTaskData *get_config_data, + gboolean was_requested, + const char *hwaddr); + +/*****************************************************************************/ + #define NMCS_TYPE_PROVIDER (nmcs_provider_get_type()) #define NMCS_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), NMCS_TYPE_PROVIDER, NMCSProvider)) #define NMCS_PROVIDER_CLASS(klass) \ @@ -118,7 +142,7 @@ typedef struct { struct _NMCSProviderPrivate; -typedef struct { +typedef struct _NMCSProvider { GObject parent; struct _NMCSProviderPrivate *_priv; } NMCSProvider; @@ -167,4 +191,11 @@ void nmcs_provider_get_config(NMCSProvider *provider, NMCSProviderGetConfigResult * nmcs_provider_get_config_finish(NMCSProvider *provider, GAsyncResult *result, GError **error); +/*****************************************************************************/ + +/* Forward declare the implemented gtype getters so we can use it at a few places without requiring + * to include the full header. The other parts of those headers should not be used aside where they + * are necessary. */ +GType nmcs_provider_aliyun_get_type(void); + #endif /* __NMCS_PROVIDER_H__ */ diff --git a/src/nmcli/connections.c b/src/nmcli/connections.c index ecf8e2e2..d093823b 100644 --- a/src/nmcli/connections.c +++ b/src/nmcli/connections.c @@ -513,8 +513,8 @@ _con_show_fcn_get_type(NMConnection *c, NMActiveConnection *ac, NMMetaAccessorGe return connection_type_to_display(s, get_type); } -static const char * -_connection_check_deprecated(NMConnection *c) +const char * +nmc_connection_check_deprecated(NMConnection *c) { NMSettingWirelessSecurity *s_wsec; const char *key_mgmt; @@ -541,7 +541,7 @@ _connection_to_color(NMConnection *c, NMActiveConnection *ac) if (ac) return nmc_active_connection_state_to_color(ac); - if (_connection_check_deprecated(c)) + if (nmc_connection_check_deprecated(c)) return NM_META_COLOR_CONNECTION_DEPRECATED; return NM_META_COLOR_CONNECTION_UNKNOWN; @@ -1923,7 +1923,8 @@ con_show_get_items_cmp(gconstpointer pa, gconstpointer pb, gpointer user_data) } } - NM_CMP_DIRECT(!!_connection_check_deprecated(c_a), !!_connection_check_deprecated(c_b)); + NM_CMP_DIRECT(!!nmc_connection_check_deprecated(c_a), + !!nmc_connection_check_deprecated(c_b)); NM_CMP_DIRECT_STRCMP0(nm_connection_get_uuid(c_a), nm_connection_get_uuid(c_b)); NM_CMP_DIRECT_STRCMP0(nm_connection_get_path(c_a), nm_connection_get_path(c_b)); } @@ -5260,7 +5261,7 @@ connection_warnings(NmCli *nmc, NMConnection *connection) const char *id; const char *deprecated; - deprecated = _connection_check_deprecated(NM_CONNECTION(connection)); + deprecated = nmc_connection_check_deprecated(NM_CONNECTION(connection)); if (deprecated) g_printerr(_("Warning: %s.\n"), deprecated); diff --git a/src/nmcli/connections.h b/src/nmcli/connections.h index 782c4eaf..c610766a 100644 --- a/src/nmcli/connections.h +++ b/src/nmcli/connections.h @@ -10,6 +10,8 @@ void monitor_connections(NmCli *nmc); +const char *nmc_connection_check_deprecated(NMConnection *c); + gboolean nmc_process_connection_properties(NmCli *nmc, NMConnection *connection, int *argc, diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index 2bfc4cec..6fce9de7 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -1238,7 +1238,7 @@ compare_aps(gconstpointer a, gconstpointer b, gpointer user_data) NMAccessPoint *apb = *(NMAccessPoint **) b; /* Sort the deprecated WEP connections last. */ - NM_CMP_DIRECT(_ap_is_wep(apb), _ap_is_wep(apa)); + NM_CMP_DIRECT(_ap_is_wep(apa), _ap_is_wep(apb)); NM_CMP_DIRECT(nm_access_point_get_strength(apb), nm_access_point_get_strength(apa)); NM_CMP_DIRECT(nm_access_point_get_frequency(apa), nm_access_point_get_frequency(apb)); @@ -2127,6 +2127,7 @@ add_and_activate_cb(GObject *client, GAsyncResult *result, gpointer user_data) NmCli *nmc = info->nmc; gs_unref_object NMActiveConnection *active = NULL; gs_free_error GError *error = NULL; + const char *deprecated; if (info->create) active = nm_client_add_and_activate_connection_finish(NM_CLIENT(client), result, &error); @@ -2152,6 +2153,11 @@ add_and_activate_cb(GObject *client, GAsyncResult *result, gpointer user_data) return; } + deprecated = + nmc_connection_check_deprecated(NM_CONNECTION(nm_active_connection_get_connection(active))); + if (deprecated) + g_printerr(_("Warning: %s.\n"), deprecated); + if (nmc->nowait_flag) { quit(); return; -- cgit 1.3.0-6-gf8a5 From 7180d4b2afcd738496ee25b94434266ec15e8ba0 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 13 May 2022 15:12:36 +0200 Subject: New upstream version 1.38.0 --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index c4466b6d..209092f0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +network-manager (1.38.0-1) UNRELEASED; urgency=medium + + * New upstream version 1.38.0 + + -- Michael Biebl Fri, 13 May 2022 15:12:34 +0200 + network-manager (1.37.92-1) unstable; urgency=medium * New upstream version 1.37.92 (1.38 rc3) -- cgit 1.3.0-6-gf8a5 From 1b0c5b7ddb3f1143767beb87cd18f1be3ae4de18 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 13 May 2022 15:42:23 +0200 Subject: Bump symbol versions to final 1.38.0 release --- debian/libnm0.symbols | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/libnm0.symbols b/debian/libnm0.symbols index 4808948d..f90d3ac2 100644 --- a/debian/libnm0.symbols +++ b/debian/libnm0.symbols @@ -29,7 +29,7 @@ libnm.so.0 libnm0 #MINVER# libnm_1_32_4@libnm_1_32_4 1.32.12 libnm_1_34_0@libnm_1_34_0 1.34.0 libnm_1_36_0@libnm_1_36_0 1.36.0 - libnm_1_38_0@libnm_1_38_0 1.37.92 + libnm_1_38_0@libnm_1_38_0 1.38.0 libnm_1_4_0@libnm_1_4_0 1.4.0 libnm_1_6_0@libnm_1_6_0 1.6.0 libnm_1_8_0@libnm_1_8_0 1.8.0 @@ -157,7 +157,7 @@ libnm.so.0 libnm0 #MINVER# nm_client_get_permission_result@libnm_1_0_0 1.0.0 nm_client_get_permissions_state@libnm_1_24_0 1.24.0 nm_client_get_primary_connection@libnm_1_0_0 1.0.0 - nm_client_get_radio_flags@libnm_1_38_0 1.37.92 + nm_client_get_radio_flags@libnm_1_38_0 1.38.0 nm_client_get_startup@libnm_1_0_0 1.0.0 nm_client_get_state@libnm_1_0_0 1.0.0 nm_client_get_type@libnm_1_0_0 1.0.0 @@ -632,7 +632,7 @@ libnm.so.0 libnm0 #MINVER# nm_object_get_client@libnm_1_24_0 1.24.0 nm_object_get_path@libnm_1_0_0 1.0.0 nm_object_get_type@libnm_1_0_0 1.0.0 - nm_radio_flags_get_type@libnm_1_38_0 1.37.92 + nm_radio_flags_get_type@libnm_1_38_0 1.38.0 nm_remote_connection_commit_changes@libnm_1_0_0 1.0.0 nm_remote_connection_commit_changes_async@libnm_1_0_0 1.0.0 nm_remote_connection_commit_changes_finish@libnm_1_0_0 1.0.0 -- cgit 1.3.0-6-gf8a5 From 1a31bc3c63474ca02c83b02add85ea4e740e5597 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 13 May 2022 15:42:45 +0200 Subject: Release version 1.38.0-1 to unstable --- debian/changelog | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 209092f0..ebbfb8a0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ -network-manager (1.38.0-1) UNRELEASED; urgency=medium +network-manager (1.38.0-1) unstable; urgency=medium * New upstream version 1.38.0 + * Bump symbol versions to final 1.38.0 release - -- Michael Biebl Fri, 13 May 2022 15:12:34 +0200 + -- Michael Biebl Fri, 13 May 2022 15:42:33 +0200 network-manager (1.37.92-1) unstable; urgency=medium -- cgit 1.3.0-6-gf8a5