NetworkManager/0001-upstream-patches.patch

1450 lines
57 KiB
Diff

From a0e930c5b58b0907f48cc2fee39afaff6e1503da Mon Sep 17 00:00:00 2001
From: Dan Williams <dcbw@redhat.com>
Date: Fri, 16 Dec 2016 11:34:29 -0600
Subject: [PATCH 01/11] wifi: don't request new PSK for locally-generated
WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY errors
This usually indicates that the driver missed beacons from the AP, due to driver bugs
or faulty power-save management. It doesn't mean that the PSK is wrong.
(cherry picked from commit 0c5aa6e48b713a5626c20303c683f7d96ee13184)
(cherry picked from commit 28cd59a016382fb18af783544f85284ffbfdc178)
---
src/devices/wifi/nm-device-wifi.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
index c58b3fa..15ad6e6 100644
--- a/src/devices/wifi/nm-device-wifi.c
+++ b/src/devices/wifi/nm-device-wifi.c
@@ -1856,6 +1856,7 @@ need_new_8021x_secrets (NMDeviceWifi *self,
static gboolean
need_new_wpa_psk (NMDeviceWifi *self,
guint32 old_state,
+ gint disconnect_reason,
const char **setting_name)
{
NMSettingWirelessSecurity *s_wsec;
@@ -1876,6 +1877,15 @@ need_new_wpa_psk (NMDeviceWifi *self,
key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
if (g_strcmp0 (key_mgmt, "wpa-psk") == 0) {
+ /* -4 (locally-generated WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY) usually
+ * means the driver missed beacons from the AP. This usually happens
+ * due to driver bugs or faulty power-save management. It doesn't
+ * indicate that the PSK is wrong.
+ */
+ #define LOCAL_WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY -4
+ if (disconnect_reason == LOCAL_WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY)
+ return FALSE;
+
*setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
return TRUE;
}
@@ -1901,7 +1911,7 @@ handle_8021x_or_psk_auth_fail (NMDeviceWifi *self,
g_return_val_if_fail (req != NULL, FALSE);
if ( need_new_8021x_secrets (self, old_state, &setting_name)
- || need_new_wpa_psk (self, old_state, &setting_name)) {
+ || need_new_wpa_psk (self, old_state, disconnect_reason, &setting_name)) {
nm_act_request_clear_secrets (req);
--
2.9.3
From 86299a1e1f34808e96e094ed0bb86492d5b7e637 Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Wed, 4 Jan 2017 09:30:38 +0100
Subject: [PATCH 02/11] docs: fix handling enums without explicit numeric value
in "tools/enums-to-docbook.pl"
Previously, an enum that didn't explicitly specify a numeric value
would wrongly start counting at 1.
E.g.
typedef enum {
MY_VAL,
} Name;
would result in documentation with MY_VAL=1.
https://bugzilla.gnome.org/show_bug.cgi?id=776848
(cherry picked from commit 36ec46e8f86db03a9777c5885ff685ad8cf74957)
(cherry picked from commit 26f0d68e826b9936d82446b451cc0bb69d336685)
---
tools/enums-to-docbook.pl | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tools/enums-to-docbook.pl b/tools/enums-to-docbook.pl
index d3d8c33..845598a 100755
--- a/tools/enums-to-docbook.pl
+++ b/tools/enums-to-docbook.pl
@@ -62,8 +62,11 @@ sub inc
{
my $val = shift;
- if ($val =~ /^\d+$/) {
+ if ($val =~ /^-?\d+$/) {
my $len = length $val;
+ if ($val =~ /^-/ && ($val + 1 == 0)) {
+ $len = $len - 1
+ }
return sprintf "%0${len}d", $val + 1;
} elsif ($val =~ /^0x(.+)$/) {
my $len = length $1;
@@ -117,7 +120,7 @@ if (/^\/\*\*$/) {
$choice = undef;
} elsif (/^typedef enum/) {
# Start of an enum
- $val = 0;
+ $val = -1;
} elsif (/^\s+(\S+)\s+=\s+([^,\s]+)/) {
# A choice with a literal value
next unless @choices;
--
2.9.3
From 3463fac21b8fd892a3aed2111ff41eefd492816f Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Wed, 4 Jan 2017 09:10:10 +0100
Subject: [PATCH 03/11] libnm: explicitly set enum values in public
nm-dbus-interface.h headers
Previously, due to a bug in "tools/enums-to-docbook.pl", enum values
without explicit numeric value were wrongly parsed. That is fixed,
but still explicitly set the value in the public header.
(cherry picked from commit 9d2207b46d0f2808e9a59712862faf5c59d9fa86)
(cherry picked from commit 4369f102f6874f879c9c6ec0325056be480279c6)
---
libnm-core/nm-dbus-interface.h | 206 ++++++++++++++++++++---------------------
libnm-util/NetworkManager.h | 162 ++++++++++++++++----------------
2 files changed, 184 insertions(+), 184 deletions(-)
diff --git a/libnm-core/nm-dbus-interface.h b/libnm-core/nm-dbus-interface.h
index e5b1b3d..1305af2 100644
--- a/libnm-core/nm-dbus-interface.h
+++ b/libnm-core/nm-dbus-interface.h
@@ -104,7 +104,7 @@ typedef enum {
NM_STATE_CONNECTING = 40,
NM_STATE_CONNECTED_LOCAL = 50,
NM_STATE_CONNECTED_SITE = 60,
- NM_STATE_CONNECTED_GLOBAL = 70
+ NM_STATE_CONNECTED_GLOBAL = 70,
} NMState;
/**
@@ -119,11 +119,11 @@ typedef enum {
* appears to be able to reach the full Internet.
*/
typedef enum {
- NM_CONNECTIVITY_UNKNOWN,
- NM_CONNECTIVITY_NONE,
- NM_CONNECTIVITY_PORTAL,
- NM_CONNECTIVITY_LIMITED,
- NM_CONNECTIVITY_FULL
+ NM_CONNECTIVITY_UNKNOWN = 0,
+ NM_CONNECTIVITY_NONE = 1,
+ NM_CONNECTIVITY_PORTAL = 2,
+ NM_CONNECTIVITY_LIMITED = 3,
+ NM_CONNECTIVITY_FULL = 4,
} NMConnectivityState;
/**
@@ -238,7 +238,7 @@ typedef enum { /*< 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_PRIVACY = 0x00000001,
} NM80211ApFlags;
/**
@@ -277,7 +277,7 @@ typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
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_802_1X = 0x00000200,
} NM80211ApSecurityFlags;
/**
@@ -297,9 +297,9 @@ typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
**/
typedef enum { /*< underscore_name=nm_802_11_mode >*/
NM_802_11_MODE_UNKNOWN = 0,
- NM_802_11_MODE_ADHOC,
- NM_802_11_MODE_INFRA,
- NM_802_11_MODE_AP
+ NM_802_11_MODE_ADHOC = 1,
+ NM_802_11_MODE_INFRA = 2,
+ NM_802_11_MODE_AP = 3,
} NM80211Mode;
/**
@@ -354,7 +354,7 @@ typedef enum {
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN = 0,
NM_WIMAX_NSP_NETWORK_TYPE_HOME = 1,
NM_WIMAX_NSP_NETWORK_TYPE_PARTNER = 2,
- NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 3
+ NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER = 3,
} NMWimaxNspNetworkType;
/**
@@ -408,7 +408,7 @@ typedef enum {
NM_DEVICE_STATE_SECONDARIES = 90,
NM_DEVICE_STATE_ACTIVATED = 100,
NM_DEVICE_STATE_DEACTIVATING = 110,
- NM_DEVICE_STATE_FAILED = 120
+ NM_DEVICE_STATE_FAILED = 120,
} NMDeviceState;
/**
@@ -480,69 +480,69 @@ typedef enum {
* Device state change reason codes
*/
typedef enum {
- NM_DEVICE_STATE_REASON_NONE = 0,
- NM_DEVICE_STATE_REASON_UNKNOWN = 1,
- NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
- NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
- NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
- NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
- NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
- NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
- NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
- NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
- NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
- NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
- NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
- NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
- NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
- NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
- NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
- NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
- NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
- NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
- NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
- NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
- NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
- NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
- NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
- NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
- NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
- NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
- NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
- NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
+ NM_DEVICE_STATE_REASON_NONE = 0,
+ NM_DEVICE_STATE_REASON_UNKNOWN = 1,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
+ NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
+ NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
+ NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
+ NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
+ NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
+ NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
+ NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
+ NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
+ NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
+ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
+ NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
+ NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
+ NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
+ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
+ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
- NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
- NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
- NM_DEVICE_STATE_REASON_REMOVED = 36,
- NM_DEVICE_STATE_REASON_SLEEPING = 37,
- NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
- NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
- NM_DEVICE_STATE_REASON_CARRIER = 40,
- NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
- NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
- NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
- NM_DEVICE_STATE_REASON_BT_FAILED = 44,
- NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
- NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
- NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
- NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
- NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
- NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
- NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
- NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
- NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
- NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
- NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
- NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
- NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
- NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
- NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
- NM_DEVICE_STATE_REASON_NEW_ACTIVATION = 60,
- NM_DEVICE_STATE_REASON_PARENT_CHANGED = 61,
- NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED = 62,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
+ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
+ NM_DEVICE_STATE_REASON_REMOVED = 36,
+ NM_DEVICE_STATE_REASON_SLEEPING = 37,
+ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
+ NM_DEVICE_STATE_REASON_CARRIER = 40,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
+ NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
+ NM_DEVICE_STATE_REASON_BT_FAILED = 44,
+ NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
+ NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
+ NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
+ NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
+ NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+ NM_DEVICE_STATE_REASON_NEW_ACTIVATION = 60,
+ NM_DEVICE_STATE_REASON_PARENT_CHANGED = 61,
+ NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED = 62,
} NMDeviceStateReason;
/**
@@ -579,11 +579,11 @@ typedef enum {
* network.
**/
typedef enum {
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
- NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4,
} NMActiveConnectionState;
/**
@@ -610,14 +610,14 @@ 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_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_REQUEST_NEW = 0x2,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED = 0x4,
/* 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,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS = 0x40000000,
} NMSecretAgentGetSecretsFlags;
/**
@@ -630,33 +630,33 @@ typedef enum { /*< flags >*/
* #NMSecretAgentCapabilities indicate various capabilities of the agent.
*/
typedef enum /*< flags >*/ {
- NM_SECRET_AGENT_CAPABILITY_NONE = 0x0,
+ NM_SECRET_AGENT_CAPABILITY_NONE = 0x0,
NM_SECRET_AGENT_CAPABILITY_VPN_HINTS = 0x1,
/* boundary value */
- NM_SECRET_AGENT_CAPABILITY_LAST = NM_SECRET_AGENT_CAPABILITY_VPN_HINTS
+ NM_SECRET_AGENT_CAPABILITY_LAST = NM_SECRET_AGENT_CAPABILITY_VPN_HINTS,
} NMSecretAgentCapabilities;
#ifndef NM_VERSION_H
#undef NM_AVAILABLE_IN_1_2
#endif
-#define NM_LLDP_ATTR_DESTINATION "destination"
-#define NM_LLDP_ATTR_CHASSIS_ID_TYPE "chassis-id-type"
-#define NM_LLDP_ATTR_CHASSIS_ID "chassis-id"
-#define NM_LLDP_ATTR_PORT_ID_TYPE "port-id-type"
-#define NM_LLDP_ATTR_PORT_ID "port-id"
-#define NM_LLDP_ATTR_PORT_DESCRIPTION "port-description"
-#define NM_LLDP_ATTR_SYSTEM_NAME "system-name"
-#define NM_LLDP_ATTR_SYSTEM_DESCRIPTION "system-description"
-#define NM_LLDP_ATTR_SYSTEM_CAPABILITIES "system-capabilities"
-#define NM_LLDP_ATTR_IEEE_802_1_PVID "ieee-802-1-pvid"
-#define NM_LLDP_ATTR_IEEE_802_1_PPVID "ieee-802-1-ppvid"
-#define NM_LLDP_ATTR_IEEE_802_1_PPVID_FLAGS "ieee-802-1-ppvid-flags"
-#define NM_LLDP_ATTR_IEEE_802_1_VID "ieee-802-1-vid"
-#define NM_LLDP_ATTR_IEEE_802_1_VLAN_NAME "ieee-802-1-vlan-name"
-
-#define NM_LLDP_DEST_NEAREST_BRIDGE "nearest-bridge"
+#define NM_LLDP_ATTR_DESTINATION "destination"
+#define NM_LLDP_ATTR_CHASSIS_ID_TYPE "chassis-id-type"
+#define NM_LLDP_ATTR_CHASSIS_ID "chassis-id"
+#define NM_LLDP_ATTR_PORT_ID_TYPE "port-id-type"
+#define NM_LLDP_ATTR_PORT_ID "port-id"
+#define NM_LLDP_ATTR_PORT_DESCRIPTION "port-description"
+#define NM_LLDP_ATTR_SYSTEM_NAME "system-name"
+#define NM_LLDP_ATTR_SYSTEM_DESCRIPTION "system-description"
+#define NM_LLDP_ATTR_SYSTEM_CAPABILITIES "system-capabilities"
+#define NM_LLDP_ATTR_IEEE_802_1_PVID "ieee-802-1-pvid"
+#define NM_LLDP_ATTR_IEEE_802_1_PPVID "ieee-802-1-ppvid"
+#define NM_LLDP_ATTR_IEEE_802_1_PPVID_FLAGS "ieee-802-1-ppvid-flags"
+#define NM_LLDP_ATTR_IEEE_802_1_VID "ieee-802-1-vid"
+#define NM_LLDP_ATTR_IEEE_802_1_VLAN_NAME "ieee-802-1-vlan-name"
+
+#define NM_LLDP_DEST_NEAREST_BRIDGE "nearest-bridge"
#define NM_LLDP_DEST_NEAREST_NON_TPMR_BRIDGE "nearest-non-tpmr-bridge"
#define NM_LLDP_DEST_NEAREST_CUSTOMER_BRIDGE "nearest-customer-bridge"
diff --git a/libnm-util/NetworkManager.h b/libnm-util/NetworkManager.h
index 9053fad..77c09ae 100644
--- a/libnm-util/NetworkManager.h
+++ b/libnm-util/NetworkManager.h
@@ -101,7 +101,7 @@ typedef enum {
NM_STATE_CONNECTING = 40,
NM_STATE_CONNECTED_LOCAL = 50,
NM_STATE_CONNECTED_SITE = 60,
- NM_STATE_CONNECTED_GLOBAL = 70
+ NM_STATE_CONNECTED_GLOBAL = 70,
} NMState;
/* For backwards compat */
@@ -121,11 +121,11 @@ typedef enum {
* Since: 0.9.8.6
*/
typedef enum {
- NM_CONNECTIVITY_UNKNOWN,
- NM_CONNECTIVITY_NONE,
- NM_CONNECTIVITY_PORTAL,
- NM_CONNECTIVITY_LIMITED,
- NM_CONNECTIVITY_FULL
+ NM_CONNECTIVITY_UNKNOWN = 0,
+ NM_CONNECTIVITY_NONE = 1,
+ NM_CONNECTIVITY_PORTAL = 2,
+ NM_CONNECTIVITY_LIMITED = 3,
+ NM_CONNECTIVITY_FULL = 4,
} NMConnectivityState;
/**
@@ -240,7 +240,7 @@ typedef enum { /*< 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_PRIVACY = 0x00000001,
} NM80211ApFlags;
/**
@@ -279,7 +279,7 @@ typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
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_802_1X = 0x00000200,
} NM80211ApSecurityFlags;
/**
@@ -299,9 +299,9 @@ typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
**/
typedef enum { /*< underscore_name=nm_802_11_mode >*/
NM_802_11_MODE_UNKNOWN = 0,
- NM_802_11_MODE_ADHOC,
- NM_802_11_MODE_INFRA,
- NM_802_11_MODE_AP
+ NM_802_11_MODE_ADHOC = 1,
+ NM_802_11_MODE_INFRA = 2,
+ NM_802_11_MODE_AP = 3,
} NM80211Mode;
/**
@@ -395,7 +395,7 @@ typedef enum {
NM_DEVICE_STATE_SECONDARIES = 90,
NM_DEVICE_STATE_ACTIVATED = 100,
NM_DEVICE_STATE_DEACTIVATING = 110,
- NM_DEVICE_STATE_FAILED = 120
+ NM_DEVICE_STATE_FAILED = 120,
} NMDeviceState;
@@ -468,71 +468,71 @@ typedef enum {
* Device state change reason codes
*/
typedef enum {
- NM_DEVICE_STATE_REASON_NONE = 0,
- NM_DEVICE_STATE_REASON_UNKNOWN = 1,
- NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
- NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
- NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
- NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
- NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
- NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
- NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
- NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
- NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
- NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
- NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
- NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
- NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
- NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
- NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
- NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
- NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
- NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
- NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
- NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
- NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
- NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
- NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
- NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
- NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
- NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
- NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
- NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
+ NM_DEVICE_STATE_REASON_NONE = 0,
+ NM_DEVICE_STATE_REASON_UNKNOWN = 1,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
+ NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
+ NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
+ NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
+ NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
+ NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
+ NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
+ NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
+ NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
+ NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
+ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
+ NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
+ NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
+ NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
+ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
+ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
- NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
- NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
- NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
- NM_DEVICE_STATE_REASON_REMOVED = 36,
- NM_DEVICE_STATE_REASON_SLEEPING = 37,
- NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
- NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
- NM_DEVICE_STATE_REASON_CARRIER = 40,
- NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
- NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
- NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
- NM_DEVICE_STATE_REASON_BT_FAILED = 44,
- NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
- NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
- NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
- NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
- NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
- NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
- NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
- NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
- NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
- NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
- NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
- NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
- NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
- NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
- NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
- NM_DEVICE_STATE_REASON_NEW_ACTIVATION = 60,
- NM_DEVICE_STATE_REASON_PARENT_CHANGED = 61,
- NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED = 62,
-
- NM_DEVICE_STATE_REASON_LAST = 0xFFFF
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
+ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
+ NM_DEVICE_STATE_REASON_REMOVED = 36,
+ NM_DEVICE_STATE_REASON_SLEEPING = 37,
+ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
+ NM_DEVICE_STATE_REASON_CARRIER = 40,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
+ NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
+ NM_DEVICE_STATE_REASON_BT_FAILED = 44,
+ NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
+ NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
+ NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
+ NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
+ NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+ NM_DEVICE_STATE_REASON_NEW_ACTIVATION = 60,
+ NM_DEVICE_STATE_REASON_PARENT_CHANGED = 61,
+ NM_DEVICE_STATE_REASON_PARENT_MANAGED_CHANGED = 62,
+
+ NM_DEVICE_STATE_REASON_LAST = 0xFFFF,
} NMDeviceStateReason;
@@ -551,11 +551,11 @@ typedef enum {
* network.
**/
typedef enum {
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
- NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4,
} NMActiveConnectionState;
#endif /* NETWORK_MANAGER_H */
--
2.9.3
From f69739cc6052b41a98b081255f99db65f733664c Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
Date: Fri, 14 Oct 2016 19:57:34 +0200
Subject: [PATCH 04/11] device: avoid a crash when L3 configuration fails
Don't call the IP check until at either IPv4 or IPv6 is actually
configured.
(cherry picked from commit aa71dbc6c42d2c4ffaf921a8e5dd9c1175f20372)
(cherry picked from commit 479a64a5b7b59a97dfb8d88c886943742a29d9d6)
---
src/devices/nm-device.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index ac840ab..2676aac 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -6909,12 +6909,16 @@ fw_change_zone_cb_ip_check (NMFirewallManager *firewall_manager,
gpointer user_data)
{
NMDevice *self = user_data;
+ NMDevicePrivate *priv;
if (!fw_change_zone_handle (self, call_id, error))
return;
/* FIXME: fail the device on error? */
- nm_device_start_ip_check (self);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (priv->ip4_state == IP_DONE || priv->ip6_state == IP_DONE)
+ nm_device_start_ip_check (self);
}
/*
--
2.9.3
From a0f3285e7607010be09253dcede09b7f8bba7bae Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Wed, 21 Dec 2016 20:19:13 +0100
Subject: [PATCH 05/11] keyfile: fix memleak in keyfile reader's
read_array_of_uint()
Fixes: 9559a7a26021efa7ef49681b93a3b3bd4eadcef6
(cherry picked from commit 8239edbb9b903dc802957763a8bab04480a491e1)
(cherry picked from commit 8a281bf7b40c25c67e49661d69b38401d64b03c9)
---
libnm-core/nm-keyfile-reader.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libnm-core/nm-keyfile-reader.c b/libnm-core/nm-keyfile-reader.c
index 16f0c22..b3ac8f3 100644
--- a/libnm-core/nm-keyfile-reader.c
+++ b/libnm-core/nm-keyfile-reader.c
@@ -111,7 +111,7 @@ read_array_of_uint (GKeyFile *file,
GArray *array = NULL;
gsize length;
int i;
- gint *tmp;
+ gs_free int *tmp = NULL;
tmp = nm_keyfile_plugin_kf_get_integer_list (file, nm_setting_get_name (setting), key, &length, NULL);
array = g_array_sized_new (FALSE, FALSE, sizeof (guint32), length);
--
2.9.3
From a5e5d0ce3f11141330f2e94f3d6187d1a1a842c1 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Thu, 5 Jan 2017 13:59:50 +0100
Subject: [PATCH 06/11] vpn: add device route to VPN gateway if parent has no
gateway
We set a dedicated route to reach the VPN gateway only if the parent
device has a gateway. If the parent device doesn't have a gateway (for
example in case of GSM connections) and the VPN gets the default
route, the VPN gateway will be contacted through the VPN itself, which
obviously doesn't work.
Set up a device route if the parent device doesn't provide a gateway.
https://bugzilla.redhat.com/show_bug.cgi?id=1403660
(cherry picked from commit ae5adc9e21c642a198868b519b2a278b0b108ab8)
(cherry picked from commit 48db5806f3a99f6cac526fecd6df5a090b53c192)
---
src/vpn-manager/nm-vpn-connection.c | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 1441c3c..78f6c71 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -683,12 +683,9 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
/* Set up a route to the VPN gateway's public IP address through the default
* network device if the VPN gateway is on a different subnet.
*/
-
parent_config = nm_device_get_ip4_config (parent_device);
g_return_if_fail (parent_config != NULL);
parent_gw = nm_ip4_config_get_gateway (parent_config);
- if (!parent_gw)
- return;
route_metric = nm_device_get_ip4_route_metric (parent_device);
@@ -696,6 +693,9 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
route.network = vpn_gw;
route.plen = 32;
route.gateway = parent_gw;
+ /* Set up a device route if the parent device has no gateway */
+ if (!parent_gw)
+ route.ifindex = nm_device_get_ip_ifindex (parent_device);
/* If the VPN gateway is in the same subnet as one of the parent device's
* IP addresses, don't add the host route to it, but a route through the
@@ -708,18 +708,20 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
route.metric = route_metric;
nm_ip4_config_add_route (config, &route);
- /* Ensure there's a route to the parent device's gateway through the
- * parent device, since if the VPN claims the default route and the VPN
- * routes include a subnet that matches the parent device's subnet,
- * the parent device's gateway would get routed through the VPN and fail.
- */
- memset (&route, 0, sizeof (route));
- route.network = parent_gw;
- route.plen = 32;
- route.rt_source = NM_IP_CONFIG_SOURCE_VPN;
- route.metric = route_metric;
+ if (parent_gw) {
+ /* Ensure there's a route to the parent device's gateway through the
+ * parent device, since if the VPN claims the default route and the VPN
+ * routes include a subnet that matches the parent device's subnet,
+ * the parent device's gateway would get routed through the VPN and fail.
+ */
+ memset (&route, 0, sizeof (route));
+ route.network = parent_gw;
+ route.plen = 32;
+ route.rt_source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
- nm_ip4_config_add_route (config, &route);
+ nm_ip4_config_add_route (config, &route);
+ }
}
static void
--
2.9.3
From 7957529b61654f0051dbd84557fcd357d33c48e9 Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Fri, 6 Jan 2017 11:54:47 +0100
Subject: [PATCH 07/11] keyfile: fix interpreting missing
wifi.mac-address-randomization as permanent address
With commit 4f6c91d6962cc031f07e52bb31adde560ad70fac, we aimed to
enable mac-address-randomization by default for Wi-Fi. That however
is not possible by default because it breaks various scenarios.
Also, later wifi.mac-address-randomization was deprecated in favor
of wifi.cloned-mac-address setting.
Both wifi.mac-address-randomization and wifi.cloned-mac-address support
global default values, so it is wrong to read a missing
mac-address-randomization as "NEVER" -- which due to
normalization also results in cloned-mac-address=permanent.
(cherry picked from commit 46d53e11012c047e09d04f663c1c36e6c47dc298)
(cherry picked from commit 2a960d3936d78087d74ba556df8ac808639c96a0)
---
libnm-core/nm-keyfile-reader.c | 5 -----
libnm-core/nm-keyfile-writer.c | 3 ---
2 files changed, 8 deletions(-)
diff --git a/libnm-core/nm-keyfile-reader.c b/libnm-core/nm-keyfile-reader.c
index b3ac8f3..aee128b 100644
--- a/libnm-core/nm-keyfile-reader.c
+++ b/libnm-core/nm-keyfile-reader.c
@@ -1318,11 +1318,6 @@ static void
set_default_for_missing_key (NMSetting *setting, const char *property)
{
/* Set a value different from the default value of the property's spec */
-
- if (NM_IS_SETTING_WIRELESS (setting)) {
- if (!strcmp (property, NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION))
- g_object_set (setting, property, (NMSettingMacRandomization) NM_SETTING_MAC_RANDOMIZATION_NEVER, NULL);
- }
}
static void
diff --git a/libnm-core/nm-keyfile-writer.c b/libnm-core/nm-keyfile-writer.c
index e0e6ba4..37e7cd0 100644
--- a/libnm-core/nm-keyfile-writer.c
+++ b/libnm-core/nm-keyfile-writer.c
@@ -627,9 +627,6 @@ can_omit_default_value (NMSetting *setting, const char *property)
} else if (NM_IS_SETTING_IP6_CONFIG (setting)) {
if (!strcmp (property, NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE))
return FALSE;
- } else if (NM_IS_SETTING_WIRELESS (setting)) {
- if (!strcmp (property, NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION))
- return FALSE;
}
return TRUE;
--
2.9.3
From ad25eaa56bf4d227e68d90441e73cf04a38f5570 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Tue, 3 Jan 2017 13:54:09 +0100
Subject: [PATCH 08/11] settings: fix assertion when changing connection
managed state
When a ifcfg-rh connection becomes unamanaged it is removed from the
connection list in NMSettings and marked as removed; it is however
kept alive in the plugin and can become managed again later. To avoid
failed assertions, the @removed flag of the NMSettingsConnection must
be cleared if the connection is not being disposed.
(cherry picked from commit a9384452ed61ca3f1c6e1db175f499307da9c388)
(cherry picked from commit fc56eff0aee72d1bb239de3e32620cd7679b5e86)
---
src/settings/nm-settings-connection.c | 12 +++++++-----
src/settings/nm-settings-connection.h | 2 +-
src/settings/plugins/ifcfg-rh/plugin.c | 4 ++--
src/settings/plugins/ifnet/plugin.c | 4 ++--
src/settings/plugins/keyfile/plugin.c | 2 +-
5 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index f22807d..1aab5b8 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -752,7 +752,7 @@ do_delete (NMSettingsConnection *self,
/* Remove connection from seen-bssids database file */
remove_entry_from_db (self, "seen-bssids");
- nm_settings_connection_signal_remove (self);
+ nm_settings_connection_signal_remove (self, FALSE);
callback (self, NULL, user_data);
@@ -2087,13 +2087,15 @@ impl_settings_connection_clear_secrets (NMSettingsConnection *self,
/**************************************************************/
void
-nm_settings_connection_signal_remove (NMSettingsConnection *self)
+nm_settings_connection_signal_remove (NMSettingsConnection *self, gboolean allow_reuse)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- if (priv->removed)
- g_return_if_reached ();
- priv->removed = TRUE;
+ if (!allow_reuse) {
+ if (priv->removed)
+ g_return_if_reached ();
+ priv->removed = TRUE;
+ }
g_signal_emit_by_name (self, NM_SETTINGS_CONNECTION_REMOVED);
}
diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h
index 761203e..c515d66 100644
--- a/src/settings/nm-settings-connection.h
+++ b/src/settings/nm-settings-connection.h
@@ -173,7 +173,7 @@ void nm_settings_connection_recheck_visibility (NMSettingsConnection *self);
gboolean nm_settings_connection_check_permission (NMSettingsConnection *self,
const char *permission);
-void nm_settings_connection_signal_remove (NMSettingsConnection *self);
+void nm_settings_connection_signal_remove (NMSettingsConnection *self, gboolean allow_reuse);
gboolean nm_settings_connection_get_unsaved (NMSettingsConnection *self);
diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
index c2956d2..3b70bb4 100644
--- a/src/settings/plugins/ifcfg-rh/plugin.c
+++ b/src/settings/plugins/ifcfg-rh/plugin.c
@@ -145,7 +145,7 @@ remove_connection (SettingsPluginIfcfg *self, NMIfcfgConnection *connection)
g_object_ref (connection);
g_hash_table_remove (priv->connections, nm_connection_get_uuid (NM_CONNECTION (connection)));
if (!unmanaged && !unrecognized)
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection));
+ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection), FALSE);
g_object_unref (connection);
/* Emit changes _after_ removing the connection */
@@ -314,7 +314,7 @@ update_connection (SettingsPluginIfcfg *self,
/* Unexport the connection by telling the settings service it's
* been removed.
*/
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection_by_uuid));
+ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection_by_uuid), TRUE);
/* Remove the path so that claim_connection() doesn't complain later when
* interface gets managed and connection is re-added. */
nm_connection_set_path (NM_CONNECTION (connection_by_uuid), NULL);
diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c
index a0676cf..372e056 100644
--- a/src/settings/plugins/ifnet/plugin.c
+++ b/src/settings/plugins/ifnet/plugin.c
@@ -240,7 +240,7 @@ reload_connections (NMSettingsPlugin *config)
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
nm_log_info (LOGD_SETTINGS, "Auto refreshing %s", conn_name);
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (old));
+ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (old), FALSE);
track_new_connection (self, new);
if (is_managed_plugin () && is_managed (conn_name))
g_signal_emit_by_name (self, NM_SETTINGS_PLUGIN_CONNECTION_ADDED, new);
@@ -282,7 +282,7 @@ reload_connections (NMSettingsPlugin *config)
*/
if ( nm_ifnet_connection_get_conn_name (NM_IFNET_CONNECTION (candidate))
&& !g_hash_table_lookup (new_connections, uuid)) {
- nm_settings_connection_signal_remove (candidate);
+ nm_settings_connection_signal_remove (candidate, FALSE);
g_hash_table_iter_remove (&iter);
}
}
diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c
index c5598fc..539ca5b 100644
--- a/src/settings/plugins/keyfile/plugin.c
+++ b/src/settings/plugins/keyfile/plugin.c
@@ -82,7 +82,7 @@ remove_connection (SettingsPluginKeyfile *self, NMKeyfileConnection *connection)
g_signal_handlers_disconnect_by_func (connection, connection_removed_cb, self);
removed = g_hash_table_remove (SETTINGS_PLUGIN_KEYFILE_GET_PRIVATE (self)->connections,
nm_connection_get_uuid (NM_CONNECTION (connection)));
- nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection));
+ nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (connection), FALSE);
g_object_unref (connection);
g_return_if_fail (removed);
--
2.9.3
From ab6ea3d185851a96dd81b4a1507f131953baf352 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Mon, 9 Jan 2017 17:57:45 +0100
Subject: [PATCH 09/11] platform: don't update IPv6 temporary addresses
The kernel already takes care of adding and updating temporary
addresses when an address with IFA_F_MANAGETEMPADDR flag is added or
updated; doing it also in nm_platform_ip6_address_sync() can overwrite
the changes done by kernel, especially because since commit
0a0bca9c7fad ("ip6-config: sort addresses only when reading the
property value") there is no guarantee that temporary addresses are
before the public ones in the IPv6 configuration.
Still delete temporary addresses, but don't add or update them.
(cherry picked from commit 1dbd9d7948e61f44a56e256c4d9fe60831663861)
(cherry picked from commit a25b3327c7ffdf528da7e47a819201e216d17829)
---
src/platform/nm-platform.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index 9274a31..48965ca 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -2815,6 +2815,11 @@ nm_platform_ip6_address_sync (NMPlatform *self, int ifindex, const GArray *known
const NMPlatformIP6Address *known_address = &g_array_index (known_addresses, NMPlatformIP6Address, i);
guint32 lifetime, preferred;
+ if (NM_FLAGS_HAS (known_address->n_ifa_flags, IFA_F_TEMPORARY)) {
+ /* Kernel manages these */
+ continue;
+ }
+
if (!nm_utils_lifetime_get (known_address->timestamp, known_address->lifetime, known_address->preferred,
now, &lifetime, &preferred))
continue;
--
2.9.3
From 61dd138be94e1360d19ae9d9d9cfe661853a7ee3 Mon Sep 17 00:00:00 2001
From: Thomas Haller <thaller@redhat.com>
Date: Mon, 26 Dec 2016 18:11:03 +0100
Subject: [PATCH 10/11] device: cleanup setting of ip-iface
Move the updating/setting of the ip-ifindex/ip-iface to one place.
Properties should be for the most part immutable/read-only, and only
at particular places modified. That way, it's easier to track who
changes a property.
Also, add a logging line with "ip-ifname" prefix.
https://mail.gnome.org/archives/networkmanager-list/2017-January/msg00011.html
(cherry picked from commit 78017f1bdc300656bba2d45e079fd638d285e909)
(cherry picked from commit c0fa787c2882d3db754faeecad3d4efbc6f5456d)
---
src/devices/nm-device.c | 104 +++++++++++++++++++++++++++++++++---------------
1 file changed, 71 insertions(+), 33 deletions(-)
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 2676aac..8155da0 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -742,39 +742,86 @@ void
nm_device_set_ip_iface (NMDevice *self, const char *iface)
{
NMDevicePrivate *priv;
- char *old_ip_iface;
+ int ifindex;
g_return_if_fail (NM_IS_DEVICE (self));
priv = NM_DEVICE_GET_PRIVATE (self);
- if (!g_strcmp0 (iface, priv->ip_iface))
- return;
-
- old_ip_iface = priv->ip_iface;
- priv->ip_ifindex = 0;
-
- priv->ip_iface = g_strdup (iface);
- if (priv->ip_iface) {
- priv->ip_ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, priv->ip_iface);
- if (priv->ip_ifindex > 0) {
- if (nm_platform_check_support_user_ipv6ll (NM_PLATFORM_GET))
- nm_platform_link_set_user_ipv6ll_enabled (NM_PLATFORM_GET, priv->ip_ifindex, TRUE);
+ if (nm_streq0 (iface, priv->ip_iface)) {
+ if (!iface)
+ return;
+ ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, iface);
+ if ( ifindex <= 0
+ || priv->ip_ifindex == ifindex)
+ return;
- if (!nm_platform_link_is_up (NM_PLATFORM_GET, priv->ip_ifindex))
- nm_platform_link_set_up (NM_PLATFORM_GET, priv->ip_ifindex, NULL);
+ priv->ip_ifindex = ifindex;
+ _LOGD (LOGD_DEVICE, "ip-ifname: update ifindex for ifname '%s': %d", iface, priv->ip_ifindex);
+ } else {
+ g_free (priv->ip_iface);
+ priv->ip_iface = g_strdup (iface);
+
+ if (iface) {
+ /* The @iface name is not in sync with the platform cache.
+ * So, there is no point asking the platform cache to resolve
+ * the ifindex. Instead, we can only hope that the interface
+ * with this name still exists and we resolve the ifindex
+ * anew.
+ *
+ * Backport: on master, we resolve the ifname anew via if_nametoindex().
+ * For the backport, don't bother and look into the platform cache.
+ */
+ priv->ip_ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, iface);
+ if (priv->ip_ifindex > 0)
+ _LOGD (LOGD_DEVICE, "ip-ifname: set ifname '%s', ifindex %d", iface, priv->ip_ifindex);
+ else
+ _LOGW (LOGD_DEVICE, "ip-ifname: set ifname '%s', unknown ifindex", iface);
} else {
- /* Device IP interface must always be a kernel network interface */
- _LOGW (LOGD_PLATFORM, "failed to look up interface index");
+ priv->ip_ifindex = 0;
+ _LOGD (LOGD_DEVICE, "ip-ifname: clear ifname");
}
}
+ if (priv->ip_ifindex > 0) {
+ if (nm_platform_check_support_user_ipv6ll (NM_PLATFORM_GET))
+ nm_platform_link_set_user_ipv6ll_enabled (NM_PLATFORM_GET, priv->ip_ifindex, TRUE);
+
+ if (!nm_platform_link_is_up (NM_PLATFORM_GET, priv->ip_ifindex))
+ nm_platform_link_set_up (NM_PLATFORM_GET, priv->ip_ifindex, NULL);
+ }
+
/* We don't care about any saved values from the old iface */
g_hash_table_remove_all (priv->ip6_saved_properties);
- /* Emit change notification */
- if (g_strcmp0 (old_ip_iface, priv->ip_iface))
- _notify (self, PROP_IP_IFACE);
- g_free (old_ip_iface);
+ _notify (self, PROP_IP_IFACE);
+}
+
+static gboolean
+_ip_iface_update (NMDevice *self, const char *ip_iface)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_return_val_if_fail (priv->ip_iface, FALSE);
+ g_return_val_if_fail (priv->ip_ifindex > 0, FALSE);
+ g_return_val_if_fail (ip_iface, FALSE);
+
+ if (!ip_iface[0])
+ return FALSE;
+
+ if (nm_streq (priv->ip_iface, ip_iface))
+ return FALSE;
+
+ _LOGI (LOGD_DEVICE, "ip-ifname: interface index %d renamed ip_iface (%d) from '%s' to '%s'",
+ priv->ifindex, priv->ip_ifindex,
+ priv->ip_iface, ip_iface);
+ g_free (priv->ip_iface);
+ priv->ip_iface = g_strdup (ip_iface);
+ _notify (self, PROP_IP_IFACE);
+ return TRUE;
}
/*****************************************************************************/
@@ -1953,16 +2000,8 @@ device_ip_link_changed (NMDevice *self)
_stats_update_counters_from_pllink (self, pllink);
- if (pllink->name[0] && g_strcmp0 (priv->ip_iface, pllink->name)) {
- _LOGI (LOGD_DEVICE, "interface index %d renamed ip_iface (%d) from '%s' to '%s'",
- priv->ifindex, nm_device_get_ip_ifindex (self),
- priv->ip_iface, pllink->name);
- g_free (priv->ip_iface);
- priv->ip_iface = g_strdup (pllink->name);
-
- _notify (self, PROP_IP_IFACE);
+ if (_ip_iface_update (self, pllink->name))
nm_device_update_dynamic_ip_setup (self);
- }
return G_SOURCE_REMOVE;
}
@@ -2465,10 +2504,9 @@ nm_device_unrealize (NMDevice *self, gboolean remove_resources, GError **error)
_notify (self, PROP_IFINDEX);
}
priv->ip_ifindex = 0;
- if (priv->ip_iface) {
- g_clear_pointer (&priv->ip_iface, g_free);
+ if (nm_clear_g_free (&priv->ip_iface))
_notify (self, PROP_IP_IFACE);
- }
+
if (priv->driver_version) {
g_clear_pointer (&priv->driver_version, g_free);
_notify (self, PROP_DRIVER_VERSION);
--
2.9.3
From 54b112f65ed43665333ae2b99a1c332cf35da744 Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
Date: Mon, 28 Nov 2016 12:32:03 +0000
Subject: [PATCH 11/11] ifcfg-rh: write the master device name even if the
master property is an UUID
We used MASTER, BRIDGE and TEAM_MASTER keys for a differnet purpose than the
network.service did, confusing the legacy tooling. Let's do our best to write
compatible configuration files:
* Add *_UUID properties that won't clash with initscripts
* Ignore non-*_UUID keys on read if *_UUID is present
* If the connection.master is an UUID of a connection with a
connection.interface-name, write the uuid into the *_UUID key while setting
the non-*_UUID key to the interface name for compatibility
https://bugzilla.redhat.com/show_bug.cgi?id=1369091
(cherry picked from commit 8b7b0d3fc2604a2cdecb32d97f8cb3ff63a069f0)
(cherry picked from commit b28b275c5e6c36bf7b63ed9ab7b99505de61bf98)
---
libnm-core/nm-setting-connection.c | 14 +++++++-----
src/nm-manager.c | 24 +++++++++++++++++++++
src/nm-manager.h | 3 +++
src/settings/plugins/ifcfg-rh/reader.c | 18 ++++++++++++----
src/settings/plugins/ifcfg-rh/writer.c | 39 +++++++++++++++++++++++++---------
5 files changed, 79 insertions(+), 19 deletions(-)
diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c
index f6b801c..a0a679e 100644
--- a/libnm-core/nm-setting-connection.c
+++ b/libnm-core/nm-setting-connection.c
@@ -1650,9 +1650,11 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
/* ---ifcfg-rh---
* property: master
- * variable: MASTER, TEAM_MASTER, BRIDGE
+ * variable: MASTER, MASTER_UUID, TEAM_MASTER, TEAM_MASTER_UUID, BRIDGE, BRIDGE_UUID
* description: Reference to master connection. The variable used depends on
- * the connection type.
+ * the connection type and the value. In general, if the *_UUID variant is present,
+ * the variant without *_UUID is ignored. NetworkManager attempts to write both
+ * for compatibility with legacy tooling.
* ---end---
*/
g_object_class_install_property
@@ -1673,10 +1675,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
/* ---ifcfg-rh---
* property: slave-type
- * variable: MASTER, TEAM_MASTER, DEVICETYPE, BRIDGE
+ * variable: MASTER, MASTER_UUID, TEAM_MASTER, TEAM_MASTER_UUID, DEVICETYPE,
+ * BRIDGE, BRIDGE_UUID
* description: Slave type doesn't map directly to a variable, but it is
- * recognized using different variables. MASTER for bonding,
- * TEAM_MASTER and DEVICETYPE for teaming, BRIDGE for bridging.
+ * recognized using different variables. MASTER and MASTER_UUID for bonding,
+ * TEAM_MASTER, TEAM_MASTER_UUID and DEVICETYPE for teaming, BRIDGE
+ * and BRIDGE_UUID for bridging.
* ---end---
*/
g_object_class_install_property
diff --git a/src/nm-manager.c b/src/nm-manager.c
index c3d65cd..964c18a 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -1135,6 +1135,30 @@ nm_manager_get_connection_iface (NMManager *self,
}
/**
+ * nm_manager_iface_for_uuid:
+ * @self: the #NMManager
+ * @uuid: the connection uuid
+ *
+ * Gets a link name for the given UUID. Useful for the settings plugins that
+ * wish to write configuration files compatible with tooling that can't
+ * interpret our UUIDs.
+ *
+ * Returns: An interface name; %NULL if none matches
+ */
+const char *
+nm_manager_iface_for_uuid (NMManager *self, const char *uuid)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMSettingsConnection *connection;
+
+ connection = nm_settings_get_connection_by_uuid (priv->settings, uuid);
+ if (!connection)
+ return NULL;
+
+ return nm_connection_get_interface_name (NM_CONNECTION (connection));
+}
+
+/**
* system_create_virtual_device:
* @self: the #NMManager
* @connection: the connection which might require a virtual device
diff --git a/src/nm-manager.h b/src/nm-manager.h
index d7aabff..ce3fa5a 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -99,6 +99,9 @@ char * nm_manager_get_connection_iface (NMManager *self,
NMDevice **out_parent,
GError **error);
+const char * nm_manager_iface_for_uuid (NMManager *self,
+ const char *uuid);
+
NMActiveConnection *nm_manager_activate_connection (NMManager *manager,
NMSettingsConnection *connection,
const char *specific_object,
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 5a351cf..825d51e 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -227,7 +227,9 @@ make_connection_setting (const char *file,
g_strfreev (items);
}
- value = svGetValue (ifcfg, "BRIDGE", FALSE);
+ value = svGetValue (ifcfg, "BRIDGE_UUID", FALSE);
+ if (!value)
+ value = svGetValue (ifcfg, "BRIDGE", FALSE);
if (value) {
const char *old_value;
@@ -1607,7 +1609,10 @@ check_if_bond_slave (shvarFile *ifcfg,
{
char *value;
- value = svGetValue (ifcfg, "MASTER", FALSE);
+ value = svGetValue (ifcfg, "MASTER_UUID", FALSE);
+ if (!value)
+ value = svGetValue (ifcfg, "MASTER", FALSE);
+
if (value) {
g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
g_object_set (s_con,
@@ -1627,9 +1632,12 @@ check_if_team_slave (shvarFile *ifcfg,
{
gs_free char *value = NULL;
- value = svGetValue (ifcfg, "TEAM_MASTER", FALSE);
+ value = svGetValue (ifcfg, "TEAM_MASTER_UUID", FALSE);
+ if (!value)
+ value = svGetValue (ifcfg, "TEAM_MASTER", FALSE);
if (!value)
return FALSE;
+
g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL);
return TRUE;
@@ -4563,7 +4571,9 @@ make_bridge_port_setting (shvarFile *ifcfg)
g_return_val_if_fail (ifcfg != NULL, FALSE);
- value = svGetValue (ifcfg, "BRIDGE", FALSE);
+ value = svGetValue (ifcfg, "BRIDGE_UUID", FALSE);
+ if (!value)
+ value = svGetValue (ifcfg, "BRIDGE", FALSE);
if (value) {
g_free (value);
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index dcc48f2..dff8f1b 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -32,6 +32,7 @@
#include <unistd.h>
#include <stdio.h>
+#include "nm-manager.h"
#include "nm-setting-connection.h"
#include "nm-setting-wired.h"
#include "nm-setting-wireless.h"
@@ -1804,13 +1805,13 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
{
guint32 n, i;
GString *str;
- const char *master, *type;
+ const char *master, *master_iface = NULL, *type;
char *tmp;
gint i_int;
- const char *v_master = NULL;
+ const char *v_master = NULL, *v_master_uuid = NULL;
+ const char *v_bridge = NULL, *v_bridge_uuid = NULL;
+ const char *v_team_master = NULL, *v_team_master_uuid = NULL;
const char *v_slave = NULL;
- const char *v_bridge = NULL;
- const char *v_team_master = NULL;
svSetValue (ifcfg, "NAME", nm_setting_connection_get_id (s_con), FALSE);
svSetValue (ifcfg, "UUID", nm_setting_connection_get_uuid (s_con), FALSE);
@@ -1878,25 +1879,43 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
master = nm_setting_connection_get_master (s_con);
if (master) {
+ /* The reader prefers the *_UUID variants, however we still try to resolve
+ * it into an interface name, so that legacy tooling is not confused. */
+ if (!nm_utils_get_testing ()) {
+ /* This is conditional for easier testing. */
+ master_iface = nm_manager_iface_for_uuid (nm_manager_get (), master);
+ }
+ if (!master_iface) {
+ master_iface = master;
+ master = NULL;
+
+ }
+
if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BOND_SETTING_NAME)) {
- v_master = master;
+ v_master_uuid = master;
+ v_master = master_iface;
v_slave = "yes";
- } else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME))
- v_bridge = master;
- else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME)) {
- v_team_master = master;
+ } else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ v_bridge_uuid = master;
+ v_bridge = master_iface;
+ } else if (nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME)) {
+ v_team_master_uuid = master;
+ v_team_master = master_iface;
svSetValue (ifcfg, "TYPE", NULL, FALSE);
}
}
+ svSetValue (ifcfg, "MASTER_UUID", v_master_uuid, FALSE);
svSetValue (ifcfg, "MASTER", v_master, FALSE);
svSetValue (ifcfg, "SLAVE", v_slave, FALSE);
+ svSetValue (ifcfg, "BRIDGE_UUID", v_bridge_uuid, FALSE);
svSetValue (ifcfg, "BRIDGE", v_bridge, FALSE);
+ svSetValue (ifcfg, "TEAM_MASTER_UUID", v_team_master_uuid, FALSE);
svSetValue (ifcfg, "TEAM_MASTER", v_team_master, FALSE);
if (nm_streq0 (type, NM_SETTING_TEAM_SETTING_NAME))
svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM, FALSE);
- else if (master && nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME))
+ else if (master_iface && nm_setting_connection_is_slave_type (s_con, NM_SETTING_TEAM_SETTING_NAME))
svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM_PORT, FALSE);
else
svSetValue (ifcfg, "DEVICETYPE", NULL, FALSE);
--
2.9.3