@@ -204,7 +204,7 @@ object, and must not be modified.
“dbus-object” GDBusObject *
The GDBusObject of the object.
[skip ]
-Flags: Read / Write / Construct Only
+Flags: Write / Construct Only
@@ -212,7 +212,7 @@ object, and must not be modified.
“dbus-object-manager” GDBusObjectManager *
The GDBusObjectManager of the object.
[skip ]
-
Flags: Read / Write / Construct Only
+
Flags: Write / Construct Only
diff --git a/docs/libnm/html/NMRemoteConnection.html b/docs/libnm/html/NMRemoteConnection.html
index 7441b6c3..03b7753e 100644
--- a/docs/libnm/html/NMRemoteConnection.html
+++ b/docs/libnm/html/NMRemoteConnection.html
@@ -3,7 +3,7 @@
NMRemoteConnection: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSecretAgentOld.html b/docs/libnm/html/NMSecretAgentOld.html
index 65cb389a..8e11585e 100644
--- a/docs/libnm/html/NMSecretAgentOld.html
+++ b/docs/libnm/html/NMSecretAgentOld.html
@@ -3,7 +3,7 @@
NMSecretAgentOld: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSetting.html b/docs/libnm/html/NMSetting.html
index 66b934f0..ad551841 100644
--- a/docs/libnm/html/NMSetting.html
+++ b/docs/libnm/html/NMSetting.html
@@ -3,7 +3,7 @@
NMSetting: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSetting8021x.html b/docs/libnm/html/NMSetting8021x.html
index b88fe242..10870083 100644
--- a/docs/libnm/html/NMSetting8021x.html
+++ b/docs/libnm/html/NMSetting8021x.html
@@ -3,7 +3,7 @@
NMSetting8021x: libnm Reference Manual
-
+
@@ -4500,7 +4500,7 @@ should be used.
NMSetting8021x
typedef struct _NMSetting8021x NMSetting8021x;
-
AIEEE 802.1x Authentication Settings
+
IEEE 802.1x Authentication Settings
diff --git a/docs/libnm/html/NMSettingAdsl.html b/docs/libnm/html/NMSettingAdsl.html
index 8ef99cbc..12724c50 100644
--- a/docs/libnm/html/NMSettingAdsl.html
+++ b/docs/libnm/html/NMSettingAdsl.html
@@ -3,7 +3,7 @@
NMSettingAdsl: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingBluetooth.html b/docs/libnm/html/NMSettingBluetooth.html
index e6aceb9e..f5c0cf41 100644
--- a/docs/libnm/html/NMSettingBluetooth.html
+++ b/docs/libnm/html/NMSettingBluetooth.html
@@ -3,7 +3,7 @@
NMSettingBluetooth: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingBond.html b/docs/libnm/html/NMSettingBond.html
index a9187235..ff5e946b 100644
--- a/docs/libnm/html/NMSettingBond.html
+++ b/docs/libnm/html/NMSettingBond.html
@@ -3,7 +3,7 @@
NMSettingBond: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingBridge.html b/docs/libnm/html/NMSettingBridge.html
index 356710e8..cff76051 100644
--- a/docs/libnm/html/NMSettingBridge.html
+++ b/docs/libnm/html/NMSettingBridge.html
@@ -3,7 +3,7 @@
NMSettingBridge: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingBridgePort.html b/docs/libnm/html/NMSettingBridgePort.html
index f97f4fc2..75635d2a 100644
--- a/docs/libnm/html/NMSettingBridgePort.html
+++ b/docs/libnm/html/NMSettingBridgePort.html
@@ -3,7 +3,7 @@
NMSettingBridgePort: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingCdma.html b/docs/libnm/html/NMSettingCdma.html
index 6173885c..06dac684 100644
--- a/docs/libnm/html/NMSettingCdma.html
+++ b/docs/libnm/html/NMSettingCdma.html
@@ -3,7 +3,7 @@
NMSettingCdma: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingConnection.html b/docs/libnm/html/NMSettingConnection.html
index d354a751..a7372abc 100644
--- a/docs/libnm/html/NMSettingConnection.html
+++ b/docs/libnm/html/NMSettingConnection.html
@@ -3,7 +3,7 @@
NMSettingConnection: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingDcb.html b/docs/libnm/html/NMSettingDcb.html
index 6a497ba8..285c1b7a 100644
--- a/docs/libnm/html/NMSettingDcb.html
+++ b/docs/libnm/html/NMSettingDcb.html
@@ -3,7 +3,7 @@
NMSettingDcb: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingDummy.html b/docs/libnm/html/NMSettingDummy.html
index a6fc3605..d94079c5 100644
--- a/docs/libnm/html/NMSettingDummy.html
+++ b/docs/libnm/html/NMSettingDummy.html
@@ -3,7 +3,7 @@
NMSettingDummy: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingGeneric.html b/docs/libnm/html/NMSettingGeneric.html
index 714ec7c3..4332a58e 100644
--- a/docs/libnm/html/NMSettingGeneric.html
+++ b/docs/libnm/html/NMSettingGeneric.html
@@ -3,7 +3,7 @@
NMSettingGeneric: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingGsm.html b/docs/libnm/html/NMSettingGsm.html
index 0a80c7f2..111a4a4e 100644
--- a/docs/libnm/html/NMSettingGsm.html
+++ b/docs/libnm/html/NMSettingGsm.html
@@ -3,7 +3,7 @@
NMSettingGsm: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingIP4Config.html b/docs/libnm/html/NMSettingIP4Config.html
index e2e7cfed..46e11c1a 100644
--- a/docs/libnm/html/NMSettingIP4Config.html
+++ b/docs/libnm/html/NMSettingIP4Config.html
@@ -3,7 +3,7 @@
NMSettingIP4Config: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingIP6Config.html b/docs/libnm/html/NMSettingIP6Config.html
index 9f735103..00bf63d0 100644
--- a/docs/libnm/html/NMSettingIP6Config.html
+++ b/docs/libnm/html/NMSettingIP6Config.html
@@ -3,7 +3,7 @@
NMSettingIP6Config: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingIPConfig.html b/docs/libnm/html/NMSettingIPConfig.html
index 10afde80..e7722f0b 100644
--- a/docs/libnm/html/NMSettingIPConfig.html
+++ b/docs/libnm/html/NMSettingIPConfig.html
@@ -3,7 +3,7 @@
NMSettingIPConfig: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingIPTunnel.html b/docs/libnm/html/NMSettingIPTunnel.html
index 70663b57..fdd4fc4f 100644
--- a/docs/libnm/html/NMSettingIPTunnel.html
+++ b/docs/libnm/html/NMSettingIPTunnel.html
@@ -3,7 +3,7 @@
NMSettingIPTunnel: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingInfiniband.html b/docs/libnm/html/NMSettingInfiniband.html
index 13c0751a..e40f8af7 100644
--- a/docs/libnm/html/NMSettingInfiniband.html
+++ b/docs/libnm/html/NMSettingInfiniband.html
@@ -3,7 +3,7 @@
NMSettingInfiniband: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingMacsec.html b/docs/libnm/html/NMSettingMacsec.html
index e0c7b741..972e98d7 100644
--- a/docs/libnm/html/NMSettingMacsec.html
+++ b/docs/libnm/html/NMSettingMacsec.html
@@ -3,7 +3,7 @@
NMSettingMacsec: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingMacvlan.html b/docs/libnm/html/NMSettingMacvlan.html
index dd995d47..5c6e9acd 100644
--- a/docs/libnm/html/NMSettingMacvlan.html
+++ b/docs/libnm/html/NMSettingMacvlan.html
@@ -3,7 +3,7 @@
NMSettingMacvlan: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingOlpcMesh.html b/docs/libnm/html/NMSettingOlpcMesh.html
index 58ed5b18..df0ef3dd 100644
--- a/docs/libnm/html/NMSettingOlpcMesh.html
+++ b/docs/libnm/html/NMSettingOlpcMesh.html
@@ -3,7 +3,7 @@
NMSettingOlpcMesh: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingPpp.html b/docs/libnm/html/NMSettingPpp.html
index a0c6205b..ebc08aa9 100644
--- a/docs/libnm/html/NMSettingPpp.html
+++ b/docs/libnm/html/NMSettingPpp.html
@@ -3,7 +3,7 @@
NMSettingPpp: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingPppoe.html b/docs/libnm/html/NMSettingPppoe.html
index 31d7adfa..6d673bf0 100644
--- a/docs/libnm/html/NMSettingPppoe.html
+++ b/docs/libnm/html/NMSettingPppoe.html
@@ -3,7 +3,7 @@
NMSettingPppoe: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingSerial.html b/docs/libnm/html/NMSettingSerial.html
index 49600d00..e6483fc7 100644
--- a/docs/libnm/html/NMSettingSerial.html
+++ b/docs/libnm/html/NMSettingSerial.html
@@ -3,7 +3,7 @@
NMSettingSerial: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingTeam.html b/docs/libnm/html/NMSettingTeam.html
index b8e1cfa2..79a5b3d0 100644
--- a/docs/libnm/html/NMSettingTeam.html
+++ b/docs/libnm/html/NMSettingTeam.html
@@ -3,7 +3,7 @@
NMSettingTeam: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingTeamPort.html b/docs/libnm/html/NMSettingTeamPort.html
index 55c1580a..59751ec2 100644
--- a/docs/libnm/html/NMSettingTeamPort.html
+++ b/docs/libnm/html/NMSettingTeamPort.html
@@ -3,7 +3,7 @@
NMSettingTeamPort: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingTun.html b/docs/libnm/html/NMSettingTun.html
index 85ebdcb8..e83919ec 100644
--- a/docs/libnm/html/NMSettingTun.html
+++ b/docs/libnm/html/NMSettingTun.html
@@ -3,7 +3,7 @@
NMSettingTun: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingVlan.html b/docs/libnm/html/NMSettingVlan.html
index 7451a21d..eaf85a01 100644
--- a/docs/libnm/html/NMSettingVlan.html
+++ b/docs/libnm/html/NMSettingVlan.html
@@ -3,7 +3,7 @@
NMSettingVlan: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingVpn.html b/docs/libnm/html/NMSettingVpn.html
index 439e24b9..6836679f 100644
--- a/docs/libnm/html/NMSettingVpn.html
+++ b/docs/libnm/html/NMSettingVpn.html
@@ -3,7 +3,7 @@
NMSettingVpn: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingVxlan.html b/docs/libnm/html/NMSettingVxlan.html
index 53f5b707..70ff153c 100644
--- a/docs/libnm/html/NMSettingVxlan.html
+++ b/docs/libnm/html/NMSettingVxlan.html
@@ -3,7 +3,7 @@
NMSettingVxlan: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingWimax.html b/docs/libnm/html/NMSettingWimax.html
index b3211dda..585b24c5 100644
--- a/docs/libnm/html/NMSettingWimax.html
+++ b/docs/libnm/html/NMSettingWimax.html
@@ -3,7 +3,7 @@
NMSettingWimax: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingWired.html b/docs/libnm/html/NMSettingWired.html
index 1866c91a..e4965e4b 100644
--- a/docs/libnm/html/NMSettingWired.html
+++ b/docs/libnm/html/NMSettingWired.html
@@ -3,7 +3,7 @@
NMSettingWired: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingWireless.html b/docs/libnm/html/NMSettingWireless.html
index f650348e..165002f3 100644
--- a/docs/libnm/html/NMSettingWireless.html
+++ b/docs/libnm/html/NMSettingWireless.html
@@ -3,7 +3,7 @@
NMSettingWireless: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSettingWirelessSecurity.html b/docs/libnm/html/NMSettingWirelessSecurity.html
index 7d4cb824..90399f70 100644
--- a/docs/libnm/html/NMSettingWirelessSecurity.html
+++ b/docs/libnm/html/NMSettingWirelessSecurity.html
@@ -3,7 +3,7 @@
NMSettingWirelessSecurity: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMSimpleConnection.html b/docs/libnm/html/NMSimpleConnection.html
index 4409af01..2e16290f 100644
--- a/docs/libnm/html/NMSimpleConnection.html
+++ b/docs/libnm/html/NMSimpleConnection.html
@@ -3,7 +3,7 @@
NMSimpleConnection: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMVpnConnection.html b/docs/libnm/html/NMVpnConnection.html
index 2c6878cb..b1811aae 100644
--- a/docs/libnm/html/NMVpnConnection.html
+++ b/docs/libnm/html/NMVpnConnection.html
@@ -3,7 +3,7 @@
NMVpnConnection: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMVpnEditorPlugin.html b/docs/libnm/html/NMVpnEditorPlugin.html
index 18967a8a..b0c077b4 100644
--- a/docs/libnm/html/NMVpnEditorPlugin.html
+++ b/docs/libnm/html/NMVpnEditorPlugin.html
@@ -3,7 +3,7 @@
NMVpnEditorPlugin: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/NMWimaxNsp.html b/docs/libnm/html/NMWimaxNsp.html
index b4f48849..66966786 100644
--- a/docs/libnm/html/NMWimaxNsp.html
+++ b/docs/libnm/html/NMWimaxNsp.html
@@ -3,7 +3,7 @@
NMWimaxNsp: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/annotation-glossary.html b/docs/libnm/html/annotation-glossary.html
index 82a162a8..77d2b143 100644
--- a/docs/libnm/html/annotation-glossary.html
+++ b/docs/libnm/html/annotation-glossary.html
@@ -3,7 +3,7 @@
Annotation Glossary: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/api-index-full.html b/docs/libnm/html/api-index-full.html
index 23e29073..ce03c509 100644
--- a/docs/libnm/html/api-index-full.html
+++ b/docs/libnm/html/api-index-full.html
@@ -3,7 +3,7 @@
API Index: libnm Reference Manual
-
+
@@ -9113,6 +9113,10 @@ nm_setting_user_set_data, function in nm-setting-user
+nm_utils_fixup_desc_string, function in nm-libnm-utils
+
+
+
nm_utils_format_variant_attributes , function in nm-utils
diff --git a/docs/libnm/html/ch02.html b/docs/libnm/html/ch02.html
index 0d2a1593..13b684ac 100644
--- a/docs/libnm/html/ch02.html
+++ b/docs/libnm/html/ch02.html
@@ -3,7 +3,7 @@
Client Object API Reference: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/ch03.html b/docs/libnm/html/ch03.html
index 0b11027a..74e8caa4 100644
--- a/docs/libnm/html/ch03.html
+++ b/docs/libnm/html/ch03.html
@@ -3,7 +3,7 @@
Connection and Setting API Reference: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/ch04.html b/docs/libnm/html/ch04.html
index 6a14ecc7..3348708c 100644
--- a/docs/libnm/html/ch04.html
+++ b/docs/libnm/html/ch04.html
@@ -3,7 +3,7 @@
Device and Runtime Configuration API Reference: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/ch05.html b/docs/libnm/html/ch05.html
index 96ebc473..ca745919 100644
--- a/docs/libnm/html/ch05.html
+++ b/docs/libnm/html/ch05.html
@@ -3,7 +3,7 @@
Utility API Reference: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/ch06.html b/docs/libnm/html/ch06.html
index 962d2c83..a8cb9f22 100644
--- a/docs/libnm/html/ch06.html
+++ b/docs/libnm/html/ch06.html
@@ -3,7 +3,7 @@
VPN Plugin API Reference: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html
index 78e47df6..cf5977db 100644
--- a/docs/libnm/html/index.html
+++ b/docs/libnm/html/index.html
@@ -3,7 +3,7 @@
libnm Reference Manual: libnm Reference Manual
-
+
@@ -15,7 +15,7 @@
- for libnm 1.8.0
+ for libnm 1.8.2
The latest version of this documentation can be found on-line at
https://developer.gnome.org/libnm/stable/ .
diff --git a/docs/libnm/html/libnm-nm-dbus-interface.html b/docs/libnm/html/libnm-nm-dbus-interface.html
index fdbddb36..10468905 100644
--- a/docs/libnm/html/libnm-nm-dbus-interface.html
+++ b/docs/libnm/html/libnm-nm-dbus-interface.html
@@ -3,7 +3,7 @@
nm-dbus-interface: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/libnm-nm-errors.html b/docs/libnm/html/libnm-nm-errors.html
index 071c5eb4..3d77e193 100644
--- a/docs/libnm/html/libnm-nm-errors.html
+++ b/docs/libnm/html/libnm-nm-errors.html
@@ -3,7 +3,7 @@
nm-errors: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/libnm-nm-utils.html b/docs/libnm/html/libnm-nm-utils.html
index fdd9876f..59bd902f 100644
--- a/docs/libnm/html/libnm-nm-utils.html
+++ b/docs/libnm/html/libnm-nm-utils.html
@@ -3,7 +3,7 @@
nm-utils: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/libnm-nm-version.html b/docs/libnm/html/libnm-nm-version.html
index e4cee3e4..78bd0fca 100644
--- a/docs/libnm/html/libnm-nm-version.html
+++ b/docs/libnm/html/libnm-nm-version.html
@@ -3,7 +3,7 @@
nm-version: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/libnm-nm-vpn-dbus-interface.html b/docs/libnm/html/libnm-nm-vpn-dbus-interface.html
index b4c94889..7b3c8a50 100644
--- a/docs/libnm/html/libnm-nm-vpn-dbus-interface.html
+++ b/docs/libnm/html/libnm-nm-vpn-dbus-interface.html
@@ -3,7 +3,7 @@
nm-vpn-dbus-interface: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/object-tree.html b/docs/libnm/html/object-tree.html
index 36652fe0..057a734b 100644
--- a/docs/libnm/html/object-tree.html
+++ b/docs/libnm/html/object-tree.html
@@ -3,7 +3,7 @@
Object Hierarchy: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/ref-overview.html b/docs/libnm/html/ref-overview.html
index d2f12619..d281a195 100644
--- a/docs/libnm/html/ref-overview.html
+++ b/docs/libnm/html/ref-overview.html
@@ -3,7 +3,7 @@
Overview: libnm Reference Manual
-
+
diff --git a/docs/libnm/html/usage.html b/docs/libnm/html/usage.html
index 1f7cb3f6..e4a67a43 100644
--- a/docs/libnm/html/usage.html
+++ b/docs/libnm/html/usage.html
@@ -3,7 +3,7 @@
Using libnm: libnm Reference Manual
-
+
@@ -96,7 +96,7 @@
$ cc $(pkg-config --libs --cflags libnm) -o hello-nm hello-nm.c
$ ./hello-nm
- NetworkManager version: 1.8.0
+ NetworkManager version: 1.8.2
$
diff --git a/docs/libnm/libnm-sections.txt b/docs/libnm/libnm-sections.txt
index 969bfde8..ccaee14d 100644
--- a/docs/libnm/libnm-sections.txt
+++ b/docs/libnm/libnm-sections.txt
@@ -1219,6 +1219,11 @@ NM_TYPE_IP_CONFIG
nm_ip_config_get_type
+
+nm-libnm-utils
+nm_utils_fixup_desc_string
+
+
nm-object
NMObject
diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml
index 27f9cd32..53adb84c 100644
--- a/docs/libnm/version.xml
+++ b/docs/libnm/version.xml
@@ -1 +1 @@
-1.8.0
+1.8.2
diff --git a/introspection/org.freedesktop.NetworkManager.Device.xml b/introspection/org.freedesktop.NetworkManager.Device.xml
index ee424101..be0a612c 100644
--- a/introspection/org.freedesktop.NetworkManager.Device.xml
+++ b/introspection/org.freedesktop.NetworkManager.Device.xml
@@ -21,6 +21,9 @@
each device in your application, use the object path. If you're looking
for a way to track a specific piece of hardware across reboot or hotplug,
use a MAC address or USB serial number.
+
+ Note that non-UTF-8 characters are backslash escaped. Use g_strcompress()
+ to obtain the true (non-UTF-8) string.
-->
@@ -28,6 +31,9 @@
Interface:
The name of the device's control (and often data) interface.
+ Note that non UTF-8 characters are backslash escaped, so the
+ resulting name may be longer then 15 characters. Use g_strcompress()
+ to revert the escaping.
-->
@@ -38,6 +44,9 @@
not refer to the actual data interface until the device has successfully
established a data connection, indicated by the device's State becoming
ACTIVATED.
+ Note that non UTF-8 characters are backslash escaped, so the
+ resulting name may be longer then 15 characters. Use g_strcompress()
+ to revert the escaping.
-->
@@ -45,6 +54,8 @@
Driver:
The driver handling the device.
+ Non-UTF-8 sequences are backslash escaped. Use g_strcompress()
+ to revert.
-->
@@ -52,6 +63,8 @@
DriverVersion:
The version of the driver handling the device.
+ Non-UTF-8 sequences are backslash escaped. Use g_strcompress()
+ to revert.
-->
@@ -59,6 +72,8 @@
FirmwareVersion:
The firmware version for the device.
+ Non-UTF-8 sequences are backslash escaped. Use g_strcompress()
+ to revert.
-->
diff --git a/introspection/org.freedesktop.NetworkManager.xml b/introspection/org.freedesktop.NetworkManager.xml
index ebd04a89..73cbc725 100644
--- a/introspection/org.freedesktop.NetworkManager.xml
+++ b/introspection/org.freedesktop.NetworkManager.xml
@@ -213,11 +213,10 @@
@@ -242,8 +241,8 @@
diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c
index ecfb9780..c1b75068 100644
--- a/libnm-core/nm-connection.c
+++ b/libnm-core/nm-connection.c
@@ -912,6 +912,36 @@ _normalize_bond_mode (NMConnection *self, GHashTable *parameters)
return FALSE;
}
+static gboolean
+_normalize_bond_options (NMConnection *self, GHashTable *parameters)
+{
+ NMSettingBond *s_bond = nm_connection_get_setting_bond (self);
+ gboolean changed = FALSE;
+ const char *name, *mode_str;
+ NMBondMode mode;
+ guint32 num, i;
+
+ /* Strip away unsupported options for current mode */
+ if (s_bond) {
+ mode_str = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MODE);
+ mode = _nm_setting_bond_mode_from_string (mode_str);
+ if (mode == NM_BOND_MODE_UNKNOWN)
+ return FALSE;
+again:
+ num = nm_setting_bond_get_num_options (s_bond);
+ for (i = 0; i < num; i++) {
+ if ( nm_setting_bond_get_option (s_bond, i, &name, NULL)
+ && !_nm_setting_bond_option_supported (name, mode)) {
+ nm_setting_bond_remove_option (s_bond, name);
+ changed = TRUE;
+ goto again;
+ }
+ }
+ }
+
+ return changed;
+}
+
static gboolean
_normalize_wireless_mac_address_randomization (NMConnection *self, GHashTable *parameters)
{
@@ -1275,6 +1305,7 @@ nm_connection_normalize (NMConnection *connection,
was_modified |= _normalize_ethernet_link_neg (connection);
was_modified |= _normalize_infiniband_mtu (connection, parameters);
was_modified |= _normalize_bond_mode (connection, parameters);
+ was_modified |= _normalize_bond_options (connection, parameters);
was_modified |= _normalize_wireless_mac_address_randomization (connection, parameters);
was_modified |= _normalize_team_config (connection, parameters);
was_modified |= _normalize_team_port_config (connection, parameters);
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h
index ac292bfc..91967ce3 100644
--- a/libnm-core/nm-core-internal.h
+++ b/libnm-core/nm-core-internal.h
@@ -343,6 +343,24 @@ _nm_setting_bond_get_option_type (NMSettingBond *setting, const char *name);
/*****************************************************************************/
+/* nm_connection_get_uuid() asserts against NULL, which is the right thing to
+ * do in order to catch bugs. However, sometimes that behavior is inconvenient.
+ * Just try or return NULL. */
+
+static inline const char *
+_nm_connection_get_id (NMConnection *connection)
+{
+ return connection ? nm_connection_get_id (connection) : NULL;
+}
+
+static inline const char *
+_nm_connection_get_uuid (NMConnection *connection)
+{
+ return connection ? nm_connection_get_uuid (connection) : NULL;
+}
+
+/*****************************************************************************/
+
typedef enum {
NM_BOND_MODE_UNKNOWN = 0,
NM_BOND_MODE_ROUNDROBIN,
diff --git a/libnm-core/nm-setting-8021x.h b/libnm-core/nm-setting-8021x.h
index 0f5f7ddd..e1631e2d 100644
--- a/libnm-core/nm-setting-8021x.h
+++ b/libnm-core/nm-setting-8021x.h
@@ -175,7 +175,7 @@ typedef enum { /*< underscore_name=nm_setting_802_1x_auth_flags >*/
/**
* NMSetting8021x:
*
- * AIEEE 802.1x Authentication Settings
+ * IEEE 802.1x Authentication Settings
*/
struct _NMSetting8021x {
NMSetting parent;
diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c
index 9a8bdc37..165001b0 100644
--- a/libnm-core/nm-setting-bond.c
+++ b/libnm-core/nm-setting-bond.c
@@ -85,8 +85,8 @@ static const BondDefault defaults[] = {
{ NM_SETTING_BOND_OPTION_USE_CARRIER, "1", NM_BOND_OPTION_TYPE_INT, 0, 1 },
{ NM_SETTING_BOND_OPTION_AD_SELECT, "stable", NM_BOND_OPTION_TYPE_BOTH, 0, 2,
{ "stable", "bandwidth", "count", NULL } },
- { NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY, "layer2", NM_BOND_OPTION_TYPE_BOTH, 0, 2,
- { "layer2", "layer3+4", "layer2+3", NULL } },
+ { NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY, "layer2", NM_BOND_OPTION_TYPE_BOTH, 0, 4,
+ { "layer2", "layer3+4", "layer2+3", "encap2+3", "encap3+4", NULL } },
{ NM_SETTING_BOND_OPTION_RESEND_IGMP, "1", NM_BOND_OPTION_TYPE_INT, 0, 255 },
{ NM_SETTING_BOND_OPTION_LACP_RATE, "slow", NM_BOND_OPTION_TYPE_BOTH, 0, 1,
{ "slow", "fast", NULL } },
@@ -542,6 +542,7 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
const char *arp_ip_target = NULL;
const char *lacp_rate;
const char *primary;
+ NMBondMode bond_mode;
g_hash_table_iter_init (&iter, priv->options);
while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
@@ -776,6 +777,23 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
return NM_SETTING_VERIFY_NORMALIZABLE;
}
+ /* normalize unsupported options for the current mode */
+ bond_mode = _nm_setting_bond_mode_from_string (mode_new);
+ g_hash_table_iter_init (&iter, priv->options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, NULL)) {
+ if (nm_streq (key, "mode"))
+ continue;
+ if (!_nm_setting_bond_option_supported (key, bond_mode)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' option is not valid with mode '%s'"),
+ key, mode_new);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+ }
+
return TRUE;
}
diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c
index de9c5c48..ab1c5465 100644
--- a/libnm-core/nm-setting-vlan.c
+++ b/libnm-core/nm-setting-vlan.c
@@ -670,6 +670,7 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
_("the vlan id must be in range 0-4094 but is %u"),
priv->id);
g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_ID);
+ return FALSE;
}
if (priv->flags & ~NM_VLAN_FLAGS_ALL) {
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index 7ecd6813..ccde24f8 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -4867,14 +4867,23 @@ enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED_64 {
typeof (x) x1 = (x); \
type x2 = (type) x1; \
\
- if (((typeof (x1)) x2) == x1 && (x2 > 0 || x2 == 0)) { \
+ g_assert_cmpint (expect, ==, nm_utils_is_power_of_two (x1)); \
+ if ( ((typeof (x1)) x2) == x1 \
+ && ((typeof (x2)) x1) == x2 \
+ && x2 > 0) { \
/* x2 equals @x, and is positive. Compare to @expect */ \
g_assert_cmpint (expect, ==, nm_utils_is_power_of_two (x2)); \
- } else if (!(x2 > 0) && !(x2 == 0)) { \
- /* a (signed) negative value is always FALSE. */ \
- g_assert_cmpint (FALSE, ==, nm_utils_is_power_of_two (x2));\
+ } else if (!(x2 > 0)) { \
+ /* a non positive value is always FALSE. */ \
+ g_assert_cmpint (FALSE, ==, nm_utils_is_power_of_two (x2)); \
+ } \
+ if (x2) { \
+ x2 = -x2; \
+ if (!(x2 > 0)) { \
+ /* for negative values, we return FALSE. */ \
+ g_assert_cmpint (FALSE, ==, nm_utils_is_power_of_two (x2)); \
+ } \
} \
- g_assert_cmpint (expect, ==, nm_utils_is_power_of_two (x1)); \
} G_STMT_END
static void
@@ -4917,7 +4926,7 @@ again:
gboolean expect = j == 0;
guint64 x = expect ? xyes : xno;
- if (!expect && xno == 0)
+ if (expect && xyes == 0)
continue;
/* check if @x is as @expect, when casted to a certain data type. */
@@ -5248,6 +5257,100 @@ static void test_nm_utils_enum (void)
/*****************************************************************************/
+static void
+do_test_utils_str_utf8safe (const char *str, const char *expected, NMUtilsStrUtf8SafeFlags flags)
+{
+ const char *str_safe, *s;
+ gs_free char *str2 = NULL;
+ gs_free char *str3 = NULL;
+
+ str_safe = nm_utils_str_utf8safe_escape (str, flags, &str2);
+
+ str3 = nm_utils_str_utf8safe_escape_cp (str, flags);
+ g_assert_cmpstr (str3, ==, str_safe);
+ g_assert ((!str && !str3) || (str != str3));
+ g_clear_pointer (&str3, g_free);
+
+ if (expected == NULL) {
+ g_assert (str_safe == str);
+ g_assert (!str2);
+ if (str) {
+ g_assert (!strchr (str, '\\'));
+ g_assert (g_utf8_validate (str, -1, NULL));
+ }
+
+ g_assert (str == nm_utils_str_utf8safe_unescape (str_safe, &str3));
+ g_assert (!str3);
+
+ str3 = nm_utils_str_utf8safe_unescape_cp (str_safe);
+ if (str) {
+ g_assert (str3 != str);
+ g_assert_cmpstr (str3, ==, str);
+ } else
+ g_assert (!str3);
+ g_clear_pointer (&str3, g_free);
+ return;
+ }
+
+ g_assert (str);
+ g_assert (str_safe != str);
+ g_assert (str_safe == str2);
+ g_assert ( strchr (str, '\\')
+ || !g_utf8_validate (str, -1, NULL)
+ || ( NM_FLAGS_HAS (flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII)
+ && NM_STRCHAR_ANY (str, ch, (guchar) ch >= 127))
+ || ( NM_FLAGS_HAS (flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
+ && NM_STRCHAR_ANY (str, ch, (guchar) ch < ' ')));
+ g_assert (g_utf8_validate (str_safe, -1, NULL));
+
+ str3 = g_strcompress (str_safe);
+ g_assert_cmpstr (str, ==, str3);
+ g_clear_pointer (&str3, g_free);
+
+ str3 = nm_utils_str_utf8safe_unescape_cp (str_safe);
+ g_assert (str3 != str);
+ g_assert_cmpstr (str3, ==, str);
+ g_clear_pointer (&str3, g_free);
+
+ s = nm_utils_str_utf8safe_unescape (str_safe, &str3);
+ g_assert (str3 != str);
+ g_assert (s == str3);
+ g_assert_cmpstr (str3, ==, str);
+ g_clear_pointer (&str3, g_free);
+
+ g_assert_cmpstr (str_safe, ==, expected);
+}
+
+static void
+test_utils_str_utf8safe (void)
+{
+ do_test_utils_str_utf8safe (NULL, NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\314", "\\314", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\314\315x\315\315x", "\\314\\315x\\315\\315x", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\314\315xx", "\\314\\315xx", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\314xx", "\\314xx", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\xa0", "\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\xe2\x91\xa0", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\xe2\xe2\x91\xa0", "\\342\xe2\x91\xa0", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("\xe2\xe2\x91\xa0\xa0", "\\342\xe2\x91\xa0\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("a", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("ab", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("ab\314", "ab\\314", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("ab\314adsf", "ab\\314adsf", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("abadsf", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("abäb", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("x\xa0", "x\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("Ä\304ab\\äb", "Ä\\304ab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("Äab\\äb", "Äab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("ÄÄab\\äb", "ÄÄab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("㈞abä㈞b", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+ do_test_utils_str_utf8safe ("abäb", "ab\\303\\244b", NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII);
+ do_test_utils_str_utf8safe ("ab\ab", "ab\\007b", NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
+}
+
+/*****************************************************************************/
+
static int
_test_nm_in_set_get (int *call_counter, gboolean allow_called, int value)
{
@@ -5605,6 +5708,7 @@ int main (int argc, char **argv)
nmtst_init (&argc, &argv, TRUE);
/* The tests */
+ g_test_add_func ("/core/general/test_utils_str_utf8safe", test_utils_str_utf8safe);
g_test_add_func ("/core/general/test_nm_in_set", test_nm_in_set);
g_test_add_func ("/core/general/test_nm_in_strset", test_nm_in_strset);
g_test_add_func ("/core/general/test_setting_vpn_items", test_setting_vpn_items);
diff --git a/libnm-core/tests/test-setting-bond.c b/libnm-core/tests/test-setting-bond.c
index 91a81997..e6a65bba 100644
--- a/libnm-core/tests/test-setting-bond.c
+++ b/libnm-core/tests/test-setting-bond.c
@@ -182,6 +182,54 @@ test_compare (void)
((const char *[]){ "num_unsol_na", "4", "num_grat_arp", "4", NULL }));
}
+static void
+test_normalize_options (const char **opts1, const char **opts2)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingBond *s_bond;
+ GError *error = NULL;
+ gboolean success;
+ const char **p;
+ int num = 0;
+
+ create_bond_connection (&con, &s_bond);
+
+ for (p = opts1; p[0] && p[1]; p += 2)
+ g_assert (nm_setting_bond_add_option (s_bond, p[0], p[1]));
+
+ nmtst_assert_connection_verifies_and_normalizable (con);
+ nmtst_connection_normalize (con);
+ success = nm_setting_verify ((NMSetting *) s_bond, con, &error);
+ nmtst_assert_success (success, error);
+
+ for (p = opts2; p[0] && p[1]; p += 2) {
+ g_assert_cmpstr (nm_setting_bond_get_option_by_name (s_bond, p[0]), ==, p[1]);
+ num++;
+ }
+
+ g_assert_cmpint (num, ==, nm_setting_bond_get_num_options (s_bond));
+}
+
+static void
+test_normalize (void)
+{
+ test_normalize_options (
+ ((const char *[]){ "mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL }),
+ ((const char *[]){ "mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL }));
+ test_normalize_options (
+ ((const char *[]){ "mode", "1", "miimon", "1", NULL }),
+ ((const char *[]){ "mode", "active-backup", "miimon", "1", NULL }));
+ test_normalize_options (
+ ((const char *[]){ "mode", "balance-alb", "tlb_dynamic_lb", "1", NULL }),
+ ((const char *[]){ "mode", "balance-alb", NULL }));
+ test_normalize_options (
+ ((const char *[]){ "mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL }),
+ ((const char *[]){ "mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL }));
+ test_normalize_options (
+ ((const char *[]){ "mode", "balance-rr", "ad_actor_sys_prio", "4", "packets_per_slave", "3", NULL }),
+ ((const char *[]){ "mode", "balance-rr", "packets_per_slave", "3", NULL }));
+}
+
#define TPATH "/libnm/settings/bond/"
NMTST_DEFINE ();
@@ -193,6 +241,7 @@ main (int argc, char **argv)
g_test_add_func (TPATH "verify", test_verify);
g_test_add_func (TPATH "compare", test_compare);
+ g_test_add_func (TPATH "normalize", test_normalize);
return g_test_run ();
}
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
index 47f1548e..2a91c2ff 100644
--- a/libnm/nm-client.c
+++ b/libnm/nm-client.c
@@ -91,6 +91,13 @@ G_DEFINE_TYPE_WITH_CODE (NMClient, nm_client, G_TYPE_OBJECT,
#define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate))
+typedef struct {
+ NMClient *client;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *result;
+ int pending_init;
+} NMClientInitData;
+
typedef struct {
NMManager *manager;
NMRemoteSettings *settings;
@@ -2267,13 +2274,23 @@ objects_created (NMClient *client, GDBusObjectManager *object_manager, GError **
static void name_owner_changed (GObject *object, GParamSpec *pspec, gpointer user_data);
+static gboolean
+_om_has_name_owner (GDBusObjectManager *object_manager)
+{
+ gs_free char *name_owner = NULL;
+
+ nm_assert (G_IS_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
+
+ name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (object_manager));
+ return !!name_owner;
+}
+
static gboolean
init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
{
NMClient *client = NM_CLIENT (initable);
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
GList *objects, *iter;
- gchar *name_owner;
priv->object_manager = g_dbus_object_manager_client_new_for_bus_sync (_nm_dbus_bus_type (),
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START,
@@ -2285,9 +2302,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
if (!priv->object_manager)
return FALSE;
- name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (priv->object_manager));
- if (name_owner) {
- g_free (name_owner);
+ if (_om_has_name_owner (priv->object_manager)) {
if (!objects_created (client, priv->object_manager, error))
return FALSE;
@@ -2316,16 +2331,11 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
/* Asynchronous initialization. */
-typedef struct {
- NMClient *client;
- GCancellable *cancellable;
- GSimpleAsyncResult *result;
- int pending_init;
-} NMClientInitData;
-
static void
init_async_complete (NMClientInitData *init_data)
{
+ if (init_data->pending_init > 0)
+ return;
g_simple_async_result_complete (init_data->result);
g_object_unref (init_data->result);
g_clear_object (&init_data->cancellable);
@@ -2338,14 +2348,13 @@ async_inited_obj_nm (GObject *object, GAsyncResult *result, gpointer user_data)
NMClientInitData *init_data = user_data;
GError *error = NULL;
+ nm_assert (init_data && init_data->pending_init > 0);
+
if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
g_simple_async_result_take_error (init_data->result, error);
- if (init_data) {
- init_data->pending_init--;
- if (init_data->pending_init == 0)
- init_async_complete (init_data);
- }
+ init_data->pending_init--;
+ init_async_complete (init_data);
}
static void
@@ -2405,10 +2414,11 @@ unhook_om (NMClient *self)
static void
new_object_manager (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
- NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (source_object);
+ NMClient *self = NM_CLIENT (user_data);
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
- g_object_notify (G_OBJECT (user_data), NM_CLIENT_NM_RUNNING);
g_clear_object (&priv->new_object_manager_cancellable);
+ g_object_notify (G_OBJECT (user_data), NM_CLIENT_NM_RUNNING);
}
static void
@@ -2418,16 +2428,13 @@ got_object_manager (GObject *object, GAsyncResult *result, gpointer user_data)
NMClient *client;
NMClientPrivate *priv;
GList *objects, *iter;
- gchar *name_owner;
GError *error = NULL;
GDBusObjectManager *object_manager;
object_manager = g_dbus_object_manager_client_new_for_bus_finish (result, &error);
if (object_manager == NULL) {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- g_simple_async_result_take_error (init_data->result, error);
- init_async_complete (init_data);
- }
+ g_simple_async_result_take_error (init_data->result, error);
+ init_async_complete (init_data);
return;
}
@@ -2435,9 +2442,7 @@ got_object_manager (GObject *object, GAsyncResult *result, gpointer user_data)
priv = NM_CLIENT_GET_PRIVATE (client);
priv->object_manager = object_manager;
- name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (priv->object_manager));
- if (name_owner) {
- g_free (name_owner);
+ if (_om_has_name_owner (priv->object_manager)) {
if (!objects_created (client, priv->object_manager, &error)) {
g_simple_async_result_take_error (init_data->result, error);
init_async_complete (init_data);
@@ -2458,9 +2463,9 @@ got_object_manager (GObject *object, GAsyncResult *result, gpointer user_data)
async_inited_obj_nm, init_data);
}
g_list_free_full (objects, g_object_unref);
+ }
- } else
- init_async_complete (init_data);
+ init_async_complete (init_data);
g_signal_connect (priv->object_manager, "notify::name-owner",
G_CALLBACK (name_owner_changed), client);
@@ -2497,17 +2502,15 @@ name_owner_changed (GObject *object, GParamSpec *pspec, gpointer user_data)
NMClient *self = user_data;
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (self);
GDBusObjectManager *object_manager = G_DBUS_OBJECT_MANAGER (object);
- gchar *name_owner;
-
- name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (object));
- if (name_owner) {
- g_free (name_owner);
- g_object_unref (object_manager);
- if (priv->new_object_manager_cancellable)
- g_cancellable_cancel (priv->new_object_manager_cancellable);
+
+ nm_assert (object_manager == priv->object_manager);
+
+ if (_om_has_name_owner (object_manager)) {
+ g_clear_object (&priv->object_manager);
+ nm_clear_g_cancellable (&priv->new_object_manager_cancellable);
priv->new_object_manager_cancellable = g_cancellable_new ();
prepare_object_manager (self, priv->new_object_manager_cancellable,
- new_object_manager, user_data);
+ new_object_manager, self);
} else {
g_signal_handlers_disconnect_by_func (object_manager, object_added, self);
unhook_om (self);
diff --git a/libnm/nm-device.c b/libnm/nm-device.c
index 9cbdbd00..969d08a6 100644
--- a/libnm/nm-device.c
+++ b/libnm/nm-device.c
@@ -26,6 +26,7 @@
#include
#include
+#include "nm-libnm-utils.h"
#include "nm-dbus-interface.h"
#include "nm-active-connection.h"
#include "nm-device-bt.h"
@@ -81,7 +82,7 @@ typedef struct {
GPtrArray *available_connections;
struct udev *udev;
- char *product, *short_product;
+ char *product;
char *vendor, *short_vendor;
char *description, *bus_name;
@@ -320,7 +321,6 @@ finalize (GObject *object)
g_free (priv->driver_version);
g_free (priv->firmware_version);
g_free (priv->product);
- g_free (priv->short_product);
g_free (priv->vendor);
g_free (priv->short_vendor);
g_free (priv->description);
@@ -1357,6 +1357,17 @@ _get_udev_property (NMDevice *device,
return db_value;
}
+static char *
+_get_udev_property_utf8safe (NMDevice *device,
+ const char *enc_prop, /* ID_XXX_ENC */
+ const char *db_prop) /* ID_XXX_FROM_DATABASE */
+{
+ return nm_utils_str_utf8safe_escape_take (_get_udev_property (device,
+ enc_prop,
+ db_prop),
+ NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
+}
+
/**
* nm_device_get_product:
* @device: a #NMDevice
@@ -1365,6 +1376,9 @@ _get_udev_property (NMDevice *device,
*
* Returns: the product name of the device. This is the internal string used by the
* device, and must not be modified.
+ *
+ * The string is backslash escaped (C escaping) for invalid characters. The escaping
+ * can be reverted with g_strcompress(), however the result may not be valid UTF-8.
**/
const char *
nm_device_get_product (NMDevice *device)
@@ -1374,15 +1388,16 @@ nm_device_get_product (NMDevice *device)
g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
priv = NM_DEVICE_GET_PRIVATE (device);
- if (!priv->product)
- priv->product = _get_udev_property (device, "ID_MODEL_ENC", "ID_MODEL_FROM_DATABASE");
+ if (!priv->product) {
+ priv->product = _get_udev_property_utf8safe (device, "ID_MODEL_ENC", "ID_MODEL_FROM_DATABASE");
- /* Sometimes ID_PRODUCT_FROM_DATABASE is used? */
- if (!priv->product)
- priv->product = _get_udev_property (device, "ID_MODEL_ENC", "ID_PRODUCT_FROM_DATABASE");
+ /* Sometimes ID_PRODUCT_FROM_DATABASE is used? */
+ if (!priv->product)
+ priv->product = _get_udev_property_utf8safe (device, "ID_MODEL_ENC", "ID_PRODUCT_FROM_DATABASE");
- if (!priv->product)
- priv->product = g_strdup ("");
+ if (!priv->product)
+ priv->product = g_strdup ("");
+ }
return priv->product;
}
@@ -1395,6 +1410,9 @@ nm_device_get_product (NMDevice *device)
*
* Returns: the vendor name of the device. This is the internal string used by the
* device, and must not be modified.
+ *
+ * The string is backslash escaped (C escaping) for invalid characters. The escaping
+ * can be reverted with g_strcompress(), however the result may not be valid UTF-8.
**/
const char *
nm_device_get_vendor (NMDevice *device)
@@ -1406,7 +1424,7 @@ nm_device_get_vendor (NMDevice *device)
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->vendor)
- priv->vendor = _get_udev_property (device, "ID_VENDOR_ENC", "ID_VENDOR_FROM_DATABASE");
+ priv->vendor = _get_udev_property_utf8safe (device, "ID_VENDOR_ENC", "ID_VENDOR_FROM_DATABASE");
if (!priv->vendor)
priv->vendor = g_strdup ("");
@@ -1414,128 +1432,14 @@ nm_device_get_vendor (NMDevice *device)
return priv->vendor;
}
-static const char * const ignored_words[] = {
- "Semiconductor",
- "Components",
- "Corporation",
- "Communications",
- "Company",
- "Corp.",
- "Corp",
- "Co.",
- "Inc.",
- "Inc",
- "Incorporated",
- "Ltd.",
- "Limited.",
- "Intel?",
- "chipset",
- "adapter",
- "[hex]",
- "NDIS",
- "Module",
- NULL
-};
-
-static const char * const ignored_phrases[] = {
- "Multiprotocol MAC/baseband processor",
- "Wireless LAN Controller",
- "Wireless LAN Adapter",
- "Wireless Adapter",
- "Network Connection",
- "Wireless Cardbus Adapter",
- "Wireless CardBus Adapter",
- "54 Mbps Wireless PC Card",
- "Wireless PC Card",
- "Wireless PC",
- "PC Card with XJACK(r) Antenna",
- "Wireless cardbus",
- "Wireless LAN PC Card",
- "Technology Group Ltd.",
- "Communication S.p.A.",
- "Business Mobile Networks BV",
- "Mobile Broadband Minicard Composite Device",
- "Mobile Communications AB",
- "(PC-Suite Mode)",
- NULL
-};
-
-static char *
-fixup_desc_string (const char *desc)
-{
- char *p, *temp;
- char **words, **item;
- GString *str;
- int i;
-
- if (!desc)
- return NULL;
-
- p = temp = g_strdup (desc);
- while (*p) {
- if (*p == '_' || *p == ',')
- *p = ' ';
- p++;
- }
-
- /* Attempt to shorten ID by ignoring certain phrases */
- for (i = 0; ignored_phrases[i]; i++) {
- p = strstr (temp, ignored_phrases[i]);
- if (p) {
- guint32 ignored_len = strlen (ignored_phrases[i]);
-
- memmove (p, p + ignored_len, strlen (p + ignored_len) + 1); /* +1 for the \0 */
- }
- }
-
- /* Attempt to shorten ID by ignoring certain individual words */
- words = g_strsplit (temp, " ", 0);
- str = g_string_new_len (NULL, strlen (temp));
- g_free (temp);
-
- for (item = words; *item; item++) {
- gboolean ignore = FALSE;
-
- if (**item == '\0')
- continue;
-
- for (i = 0; ignored_words[i]; i++) {
- if (!strcmp (*item, ignored_words[i])) {
- ignore = TRUE;
- break;
- }
- }
-
- if (!ignore) {
- if (str->len)
- g_string_append_c (str, ' ');
- g_string_append (str, *item);
- }
- }
- g_strfreev (words);
-
- temp = str->str;
- g_string_free (str, FALSE);
-
- return temp;
-}
-
static void
-get_description (NMDevice *device)
+ensure_description (NMDevice *device)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- const char *dev_product;
- const char *dev_vendor;
- char *pdown;
- char *vdown;
- GString *str;
GParamSpec *name_prop;
+ gs_free char *short_product = NULL;
- dev_product = nm_device_get_product (device);
- priv->short_product = fixup_desc_string (dev_product);
-
- dev_vendor = nm_device_get_vendor (device);
- priv->short_vendor = fixup_desc_string (dev_vendor);
+ priv->short_vendor = nm_str_realloc (nm_utils_fixup_desc_string (nm_device_get_vendor (device)));
/* Grab device's preferred name, if any */
name_prop = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (device)), "name");
@@ -1546,28 +1450,24 @@ get_description (NMDevice *device)
g_clear_pointer (&priv->description, g_free);
}
- if (!dev_product || !dev_vendor) {
- priv->description = g_strdup (nm_device_get_iface (device));
+ if ( !priv->short_vendor
+ || !(short_product = nm_utils_fixup_desc_string (nm_device_get_product (device)))) {
+ priv->description = g_strdup (nm_device_get_iface (device) ?: "");
return;
}
- str = g_string_new_len (NULL, strlen (priv->short_vendor) + strlen (priv->short_product) + 1);
-
/* Another quick hack; if all of the fixed up vendor string
* is found in product, ignore the vendor.
*/
- pdown = g_ascii_strdown (priv->short_product, -1);
- vdown = g_ascii_strdown (priv->short_vendor, -1);
- if (!strstr (pdown, vdown)) {
- g_string_append (str, priv->short_vendor);
- g_string_append_c (str, ' ');
+ {
+ gs_free char *pdown = g_ascii_strdown (short_product, -1);
+ gs_free char *vdown = g_ascii_strdown (priv->short_vendor, -1);
+
+ if (!strstr (pdown, vdown))
+ priv->description = g_strconcat (priv->short_vendor, " ", short_product, NULL);
+ else
+ priv->description = g_steal_pointer (&short_product);
}
- g_free (pdown);
- g_free (vdown);
-
- g_string_append (str, priv->short_product);
-
- priv->description = g_string_free (str, FALSE);
}
static const char *
@@ -1580,7 +1480,7 @@ get_short_vendor (NMDevice *device)
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->description)
- get_description (device);
+ ensure_description (device);
return priv->short_vendor;
}
@@ -1604,7 +1504,7 @@ nm_device_get_description (NMDevice *device)
priv = NM_DEVICE_GET_PRIVATE (device);
if (!priv->description)
- get_description (device);
+ ensure_description (device);
return priv->description;
}
diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c
new file mode 100644
index 00000000..fbbfe2c5
--- /dev/null
+++ b/libnm/nm-libnm-utils.c
@@ -0,0 +1,162 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2017 Red Hat, Inc.
+ */
+
+#include "nm-default.h"
+
+#include "nm-libnm-utils.h"
+
+/*****************************************************************************/
+
+char *
+nm_utils_fixup_desc_string (const char *desc)
+{
+ static const char *const IGNORED_PHRASES[] = {
+ "Multiprotocol MAC/baseband processor",
+ "Wireless LAN Controller",
+ "Wireless LAN Adapter",
+ "Wireless Adapter",
+ "Network Connection",
+ "Wireless Cardbus Adapter",
+ "Wireless CardBus Adapter",
+ "54 Mbps Wireless PC Card",
+ "Wireless PC Card",
+ "Wireless PC",
+ "PC Card with XJACK(r) Antenna",
+ "Wireless cardbus",
+ "Wireless LAN PC Card",
+ "Technology Group Ltd.",
+ "Communication S.p.A.",
+ "Business Mobile Networks BV",
+ "Mobile Broadband Minicard Composite Device",
+ "Mobile Communications AB",
+ "(PC-Suite Mode)",
+ };
+ static const char *const IGNORED_WORDS[] = {
+ "Semiconductor",
+ "Components",
+ "Corporation",
+ "Communications",
+ "Company",
+ "Corp.",
+ "Corp",
+ "Co.",
+ "Inc.",
+ "Inc",
+ "Incorporated",
+ "Ltd.",
+ "Limited.",
+ "Intel?",
+ "chipset",
+ "adapter",
+ "[hex]",
+ "NDIS",
+ "Module",
+ };
+ char *desc_full;
+ char *p, *q;
+ int i;
+
+ if (!desc || !desc[0])
+ return NULL;
+
+ /* restore original non-UTF-8-safe text. */
+ desc_full = nm_utils_str_utf8safe_unescape_cp (desc);
+
+ /* replace all invalid UTF-8 bytes with space. */
+ p = desc_full;
+ while (!g_utf8_validate (p, -1, (const char **) &q)) {
+ /* the byte is invalid UTF-8. Replace it with space and proceed. */
+ *q = ' ';
+ p = q + 1;
+ }
+
+ /* replace '_', ',', and ASCII controll characters with space. */
+ for (p = desc_full; p[0]; p++) {
+ if ( NM_IN_SET (*p, '_', ',')
+ || *p < ' ')
+ *p = ' ';
+ }
+
+ /* Attempt to shorten ID by ignoring certain phrases */
+ for (i = 0; i < G_N_ELEMENTS (IGNORED_PHRASES); i++) {
+ p = strstr (desc_full, IGNORED_PHRASES[i]);
+ if (p) {
+ const char *eow = &p[strlen (IGNORED_PHRASES[i])];
+
+ /* require that the phrase is delimited by space, or
+ * at the beginning or end of the description. */
+ if ( (p == desc_full || p[-1] == ' ')
+ && NM_IN_SET (eow[0], '\0', ' '))
+ memmove (p, eow, strlen (eow) + 1); /* +1 for the \0 */
+ }
+ }
+
+ /* Attempt to shorten ID by ignoring certain individual words.
+ * - word-split the description at spaces
+ * - coalesce multiple spaces
+ * - skip over IGNORED_WORDS */
+ p = desc_full;
+ q = desc_full;
+ for (;;) {
+ char *eow;
+ gsize l;
+
+ /* skip leading spaces. */
+ while (p[0] == ' ')
+ p++;
+
+ if (!p[0])
+ break;
+
+ /* split leading word on first space */
+ eow = strchr (p, ' ');
+ if (eow)
+ *eow = '\0';
+
+ if (nm_utils_strv_find_first ((char **) IGNORED_WORDS,
+ G_N_ELEMENTS (IGNORED_WORDS),
+ p) >= 0)
+ goto next;
+
+ l = strlen (p);
+ if (q != p) {
+ if (q != desc_full)
+ *q++ = ' ';
+ memmove (q, p, l);
+ }
+ q += l;
+
+next:
+ if (!eow)
+ break;
+ p = eow + 1;
+ }
+
+ *q++ = '\0';
+
+ if (!desc_full[0]) {
+ g_free (desc_full);
+ return NULL;
+ }
+
+ nm_assert (g_utf8_validate (desc_full, -1, NULL));
+ return desc_full;
+}
diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h
new file mode 100644
index 00000000..4a5a361c
--- /dev/null
+++ b/libnm/nm-libnm-utils.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_LIBNM_UTILS_H__
+#define __NM_LIBNM_UTILS_H__
+
+char *nm_utils_fixup_desc_string (const char *desc);
+
+#endif /* __NM_LIBNM_UTILS_H__ */
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
index 95346e06..6bf1d063 100644
--- a/libnm/nm-object.c
+++ b/libnm/nm-object.c
@@ -1233,12 +1233,6 @@ get_property (GObject *object, guint prop_id,
case PROP_DBUS_CONNECTION:
g_value_set_object (value, g_dbus_object_manager_client_get_connection (G_DBUS_OBJECT_MANAGER_CLIENT (priv->object_manager)));
break;
- case PROP_DBUS_OBJECT:
- g_value_set_object (value, priv->object);
- break;
- case PROP_DBUS_OBJECT_MANAGER:
- g_value_set_object (value, priv->object_manager);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1335,7 +1329,7 @@ nm_object_class_init (NMObjectClass *nm_object_class)
(object_class, PROP_DBUS_OBJECT,
g_param_spec_object (NM_OBJECT_DBUS_OBJECT, "", "",
G_TYPE_DBUS_OBJECT,
- G_PARAM_READWRITE |
+ G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
@@ -1348,7 +1342,7 @@ nm_object_class_init (NMObjectClass *nm_object_class)
(object_class, PROP_DBUS_OBJECT_MANAGER,
g_param_spec_object (NM_OBJECT_DBUS_OBJECT_MANAGER, "", "",
G_TYPE_DBUS_OBJECT_MANAGER,
- G_PARAM_READWRITE |
+ G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm/nm-property-docs.xml b/libnm/nm-property-docs.xml
index 7754187d..bdcfa6e7 100644
--- a/libnm/nm-property-docs.xml
+++ b/libnm/nm-property-docs.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/libnm/nm-settings-docs.xml b/libnm/nm-settings-docs.xml
index d114a0ee..b5291405 100644
--- a/libnm/nm-settings-docs.xml
+++ b/libnm/nm-settings-docs.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/libnm/tests/test-general.c b/libnm/tests/test-general.c
new file mode 100644
index 00000000..7e0b7bb7
--- /dev/null
+++ b/libnm/tests/test-general.c
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT SC WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2017 Red Hat, Inc.
+ */
+
+#include "nm-default.h"
+
+#include "nm-libnm-utils.h"
+
+#include "nm-utils/nm-test-utils.h"
+
+/*****************************************************************************/
+
+static void
+do_test_fixup_desc_string (const char *desc, const char *expected)
+{
+ gs_free char *result = NULL;
+
+ result = nm_utils_fixup_desc_string (desc);
+ g_assert_cmpstr (result, ==, expected);
+}
+
+#define do_test_fixup_desc_string_same(desc) (do_test_fixup_desc_string (""desc"", ""desc""))
+
+static void
+test_fixup_desc_string (void)
+{
+ do_test_fixup_desc_string (NULL, NULL);
+ do_test_fixup_desc_string ("", NULL);
+ do_test_fixup_desc_string_same ("a");
+ do_test_fixup_desc_string_same ("a b");
+ do_test_fixup_desc_string ("a b ", "a b");
+ do_test_fixup_desc_string (" a bbc ", "a bbc");
+ do_test_fixup_desc_string (" a \xcc bbc ", "a bbc");
+ do_test_fixup_desc_string (" a\xcc bbc ", "a bbc");
+ do_test_fixup_desc_string (" a\xcc""bbc Wireless PC", "a bbc");
+ do_test_fixup_desc_string (" a\xcc""bbc Wireless PC ", "a bbc");
+ do_test_fixup_desc_string (" a\xcc""bbcWireless PC ", "a bbcWireless PC");
+ do_test_fixup_desc_string (" a\xcc""bbc Wireless PCx", "a bbc Wireless PCx");
+ do_test_fixup_desc_string (" a\xcc""bbc Inc Wireless PC ", "a bbc");
+}
+
+/*****************************************************************************/
+
+NMTST_DEFINE ();
+
+int main (int argc, char **argv)
+{
+ nmtst_init (&argc, &argv, TRUE);
+
+ g_test_add_func ("/libnm/general/fixup_desc_string", test_fixup_desc_string);
+
+ return g_test_run ();
+}
diff --git a/m4/compiler_options.m4 b/m4/compiler_options.m4
index 23929af8..ccb51f5e 100644
--- a/m4/compiler_options.m4
+++ b/m4/compiler_options.m4
@@ -70,11 +70,13 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
-Wimplicit-fallthrough \
-Wimplicit-function-declaration \
-Winit-self \
+ -Wlogical-op \
-Wmissing-declarations \
-Wmissing-include-dirs \
-Wmissing-prototypes \
-Wpointer-arith \
-Wshadow \
+ -Wshift-negative-value \
-Wstrict-prototypes \
-Wundef \
-Wno-duplicate-decl-specifier \
diff --git a/man/NetworkManager.8 b/man/NetworkManager.8
index 029dadce..1b8b9f4c 100644
--- a/man/NetworkManager.8
+++ b/man/NetworkManager.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: NetworkManager
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: Network management daemons
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.8\&.0" "Network management daemons"
+.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.8\&.2" "Network management daemons"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5
index 339a106d..53ad01bc 100644
--- a/man/NetworkManager.conf.5
+++ b/man/NetworkManager.conf.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: NetworkManager.conf
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: Configuration
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.8\&.0" "Configuration"
+.TH "NETWORKMANAGER\&.CONF" "5" "" "NetworkManager 1\&.8\&.2" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -295,6 +295,15 @@ The number of times a connection activation should be automatically tried before
connection\&.autoconnect\-retries
property set to \-1\&. If not specified, connections will be retried 4 times\&.
.RE
+.PP
+\fIslaves\-order\fR
+.RS 4
+This key specifies in which order slave connections are auto\-activated on boot or when the master activates them\&. Allowed values are
+name
+(order connection by interface name, the default), or
+index
+(order slaves by their kernel index)\&.
+.RE
.SH "KEYFILE SECTION"
.PP
This section contains keyfile\-plugin\-specific options, and is normally only used when you are not using any other distro\-specific plugin\&.
@@ -593,7 +602,7 @@ If left unspecified, it defaults to "preserve"\&.
.PP
\fIethernet\&.mtu\fR
.RS 4
-If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints\&. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or a default of 1500\&.
+If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints\&. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or the MTU is not reconfigured during activation\&.
.RE
.PP
\fIethernet\&.wake\-on\-lan\fR
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml
index 658fd7c2..9e0ad9ba 100644
--- a/man/NetworkManager.conf.xml
+++ b/man/NetworkManager.conf.xml
@@ -409,6 +409,19 @@ no-auto-default=*
+
+ slaves-order
+
+
+ This key specifies in which order slave connections are
+ auto-activated on boot or when the master activates
+ them. Allowed values are name (order
+ connection by interface name, the default), or
+ index (order slaves by their kernel
+ index).
+
+
+
@@ -642,7 +655,7 @@ ipv6.ip6-privacy=0
ethernet.mtu
- If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or a default of 1500.
+ If configured explicitly to 0, the MTU is not reconfigured during device activation unless it is required due to IPv6 constraints. If left unspecified, a DHCP/IPv6 SLAAC provided value is used or the MTU is not reconfigured during activation.
ethernet.wake-on-lan
diff --git a/man/nm-online.1 b/man/nm-online.1
index 6de8ea32..10f4ca8e 100644
--- a/man/nm-online.1
+++ b/man/nm-online.1
@@ -1,13 +1,13 @@
'\" t
.\" Title: nm-online
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: General Commands Manual
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.8\&.0" "General Commands Manual"
+.TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.8\&.2" "General Commands Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5
index 69879b38..865b4306 100644
--- a/man/nm-settings-ifcfg-rh.5
+++ b/man/nm-settings-ifcfg-rh.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: nm-settings-ifcfg-rh
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: Configuration
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.8\&.0" "Configuration"
+.TH "NM\-SETTINGS\-IFCFG\-RH" "5" "" "NetworkManager 1\&.8\&.2" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml
index a476608f..c45af65a 100644
--- a/man/nm-settings-ifcfg-rh.xml
+++ b/man/nm-settings-ifcfg-rh.xml
@@ -1,6 +1,6 @@
-nm-settings-ifcfg-rh NetworkManager developers nm-settings-ifcfg-rh 5 NetworkManager Configuration 1.8.0 nm-settings-ifcfg-rh Description of ifcfg-rh settings plugin Description
+nm-settings-ifcfg-rh NetworkManager developers nm-settings-ifcfg-rh 5 NetworkManager Configuration 1.8.2 nm-settings-ifcfg-rh Description of ifcfg-rh settings plugin Description
NetworkManager is based on the concept of connection profiles that contain
network configuration (see nm-settings 5 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 b729b6c2..69029a61 100644
--- a/man/nm-settings-keyfile.5
+++ b/man/nm-settings-keyfile.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: nm-settings-keyfile
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: Configuration
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.8\&.0" "Configuration"
+.TH "NM\-SETTINGS\-KEYFILE" "5" "" "NetworkManager 1\&.8\&.2" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml
index 05cb94fd..b520067e 100644
--- a/man/nm-settings-keyfile.xml
+++ b/man/nm-settings-keyfile.xml
@@ -1,6 +1,6 @@
-nm-settings-keyfile NetworkManager developers nm-settings-keyfile 5 NetworkManager Configuration 1.8.0 nm-settings-keyfile Description of keyfile settings plugin Description
+nm-settings-keyfile NetworkManager developers nm-settings-keyfile 5 NetworkManager Configuration 1.8.2 nm-settings-keyfile Description of keyfile settings plugin Description
NetworkManager is based on the concept of connection profiles that contain
network configuration (see nm-settings 5 for details). The profiles can be
stored in various formats. NetworkManager uses plugins for reading and writing
diff --git a/man/nm-settings.5 b/man/nm-settings.5
index 543179c1..a361e8e7 100644
--- a/man/nm-settings.5
+++ b/man/nm-settings.5
@@ -1,13 +1,13 @@
'\" t
.\" Title: nm-settings
.\" Author:
-.\" Generator: DocBook XSL Stylesheets v1.79.1
-.\" Date: 05/10/2017
+.\" Generator: DocBook XSL Stylesheets vsnapshot
+.\" Date: 07/07/2017
.\" Manual: Configuration
-.\" Source: NetworkManager 1.8.0
+.\" Source: NetworkManager 1.8.2
.\" Language: English
.\"
-.TH "NM\-SETTINGS" "5" "" "NetworkManager 1\&.8\&.0" "Configuration"
+.TH "NM\-SETTINGS" "5" "" "NetworkManager 1\&.8\&.2" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -278,7 +278,7 @@ T}
.sp 1
.SS "802\-1x setting"
.PP
-AIEEE 802\&.1x Authentication Settings\&.
+IEEE 802\&.1x Authentication Settings\&.
.TS
allbox tab(:);
lB lB lB lB.
diff --git a/man/nm-settings.xml b/man/nm-settings.xml
index 1ceee6f4..0f8109ea 100644
--- a/man/nm-settings.xml
+++ b/man/nm-settings.xml
@@ -1,6 +1,6 @@
-nm-settings NetworkManager developers nm-settings 5 NetworkManager Configuration 1.8.0 nm-settings Description of settings and properties of NetworkManager connection profiles Description
+nm-settings NetworkManager developers nm-settings 5 NetworkManager Configuration 1.8.2 nm-settings Description of settings and properties of NetworkManager connection profiles Description
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
@@ -55,7 +55,7 @@
uuid string 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 "-").
zone string The trust level of a the connection. Free form case-insensitive string (for example "Home", "Work", "Public"). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall. When updating this property on a currently activated connection, the change takes effect immediately.