From c18cc79d50002ab8529c21184aceb016c61ac61c Mon Sep 17 00:00:00 2001 From: Erik Karlsson Date: Wed, 6 Dec 2023 00:22:58 +0100 Subject: [PATCH] device: restore cleared flags on device down In case flags have been cleared because settings failed to apply, restore them when the device is brought down so that they will be re-attempted the next time the device is brought up. Signed-off-by: Erik Karlsson --- device.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/device.c b/device.c index cb97b9a..b1213a0 100644 --- a/device.c +++ b/device.c @@ -172,6 +172,11 @@ static int set_device_state(struct device *dev, bool state) } else { system_if_down(dev); system_if_apply_settings(dev, &dev->orig_settings, dev->orig_settings.flags); + + /* Restore any settings present in UCI which may have + * failed to apply so that they will be re-attempted + * the next time the device is brought up */ + dev->settings.flags |= dev->settings.valid_flags; } return 0; @@ -571,6 +576,9 @@ device_init_settings(struct device *dev, struct blob_attr **tb) s->flags |= DEV_OPT_EEE; } + /* Remember the settings present in UCI */ + s->valid_flags = s->flags; + cur = tb[DEV_ATTR_AUTH_VLAN]; free(dev->config_auth_vlans); dev->config_auth_vlans = cur ? blob_memdup(cur) : NULL; -- 2.30.2