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.
92 lines
3.3 KiB
92 lines
3.3 KiB
7 years ago
|
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
|