You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.3 KiB
91 lines
3.3 KiB
From a645c8dd7190aa075227728e5f234a5169bfbab1 Mon Sep 17 00:00:00 2001 |
|
From: Lubomir Rintel <lkundrak@v3.sk> |
|
Date: Fri, 2 Feb 2018 17:25:04 +0100 |
|
Subject: [PATCH] ovs-interface: avoid starting ip[46] configuration more than |
|
once |
|
|
|
OvsInterface can postpone the stage3_ip[46]_config until the link |
|
actually appears. It ought to restart the stage only when the link |
|
appears, not upon further changes to it (which would trip an assertion |
|
when starting the DHCP client while one already exists). |
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1540063 |
|
--- |
|
src/devices/ovs/nm-device-ovs-interface.c | 24 +++++++++++++++++++++--- |
|
1 file changed, 21 insertions(+), 3 deletions(-) |
|
|
|
diff --git a/src/devices/ovs/nm-device-ovs-interface.c b/src/devices/ovs/nm-device-ovs-interface.c |
|
index 426521c52..1342ed948 100644 |
|
--- a/src/devices/ovs/nm-device-ovs-interface.c |
|
+++ b/src/devices/ovs/nm-device-ovs-interface.c |
|
@@ -35,8 +35,13 @@ _LOG_DECLARE_SELF(NMDeviceOvsInterface); |
|
|
|
/*****************************************************************************/ |
|
|
|
+typedef struct { |
|
+ gboolean waiting_for_interface; |
|
+} NMDeviceOvsInterfacePrivate; |
|
+ |
|
struct _NMDeviceOvsInterface { |
|
NMDevice parent; |
|
+ NMDeviceOvsInterfacePrivate _priv; |
|
}; |
|
|
|
struct _NMDeviceOvsInterfaceClass { |
|
@@ -45,6 +50,8 @@ struct _NMDeviceOvsInterfaceClass { |
|
|
|
G_DEFINE_TYPE (NMDeviceOvsInterface, nm_device_ovs_interface, NM_TYPE_DEVICE) |
|
|
|
+#define NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceOvsInterface, NM_IS_DEVICE_OVS_INTERFACE) |
|
+ |
|
/*****************************************************************************/ |
|
|
|
static const char * |
|
@@ -109,7 +116,10 @@ static void |
|
link_changed (NMDevice *device, |
|
const NMPlatformLink *pllink) |
|
{ |
|
- if (nm_device_get_state (device) == NM_DEVICE_STATE_IP_CONFIG) { |
|
+ NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE (device); |
|
+ |
|
+ if (priv->waiting_for_interface) { |
|
+ priv->waiting_for_interface = FALSE; |
|
nm_device_bring_up (device, TRUE, NULL); |
|
nm_device_activate_schedule_stage3_ip_config_start (device); |
|
} |
|
@@ -131,11 +141,15 @@ act_stage3_ip4_config_start (NMDevice *device, |
|
NMIP4Config **out_config, |
|
NMDeviceStateReason *out_failure_reason) |
|
{ |
|
+ NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE (device); |
|
+ |
|
if (!_is_internal_interface (device)) |
|
return NM_ACT_STAGE_RETURN_IP_FAIL; |
|
|
|
- if (!nm_device_get_ip_ifindex (device)) |
|
+ if (!nm_device_get_ip_ifindex (device)) { |
|
+ priv->waiting_for_interface = TRUE; |
|
return NM_ACT_STAGE_RETURN_POSTPONE; |
|
+ } |
|
|
|
return NM_DEVICE_CLASS (nm_device_ovs_interface_parent_class)->act_stage3_ip4_config_start (device, out_config, out_failure_reason); |
|
} |
|
@@ -145,11 +159,15 @@ act_stage3_ip6_config_start (NMDevice *device, |
|
NMIP6Config **out_config, |
|
NMDeviceStateReason *out_failure_reason) |
|
{ |
|
+ NMDeviceOvsInterfacePrivate *priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE (device); |
|
+ |
|
if (!_is_internal_interface (device)) |
|
return NM_ACT_STAGE_RETURN_IP_FAIL; |
|
|
|
- if (!nm_device_get_ip_ifindex (device)) |
|
+ if (!nm_device_get_ip_ifindex (device)) { |
|
+ priv->waiting_for_interface = TRUE; |
|
return NM_ACT_STAGE_RETURN_POSTPONE; |
|
+ } |
|
|
|
return NM_DEVICE_CLASS (nm_device_ovs_interface_parent_class)->act_stage3_ip6_config_start (device, out_config, out_failure_reason); |
|
} |
|
-- |
|
2.14.3
|
|
|