wireguard: clear cached auto-default-route setting in act_stage1_prepare()

We call _auto_default_route_init() at various places, for example during
coerce_route_table(). We cannot be sure that we don't call it before
activation starts (before stage1) or after device-cleanup.

That means, upon activation, we need to clear the state first. Do that in
act_stage1_prepare().

(cherry picked from commit dc219662fa)
This commit is contained in:
Thomas Haller
2019-07-30 18:50:15 +02:00
parent 327a92ae2b
commit 93300c1320

View File

@@ -1624,6 +1624,17 @@ link_config_delayed_resolver_cb (gpointer user_data)
return G_SOURCE_REMOVE;
}
static NMActStageReturn
act_stage1_prepare (NMDevice *device, NMDeviceStateReason *out_failure_reason)
{
NMDeviceWireGuardPrivate *priv = NM_DEVICE_WIREGUARD_GET_PRIVATE (device);
priv->auto_default_route_initialized = FALSE;
priv->auto_default_route_priority_initialized = FALSE;
return NM_DEVICE_CLASS (nm_device_wireguard_parent_class)->act_stage1_prepare (device, out_failure_reason);
}
static NMActStageReturn
act_stage2_config (NMDevice *device,
NMDeviceStateReason *out_failure_reason)
@@ -2064,6 +2075,7 @@ nm_device_wireguard_class_init (NMDeviceWireGuardClass *klass)
device_class->connection_type_check_compatible = NM_SETTING_WIREGUARD_SETTING_NAME;
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES (NM_LINK_TYPE_WIREGUARD);
device_class->act_stage1_prepare = act_stage1_prepare;
device_class->state_changed = device_state_changed;
device_class->create_and_realize = create_and_realize;
device_class->act_stage2_config = act_stage2_config;