From f01345ec13b9b27ffd314d8689fb2d3f9c81a47d 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 eef6ca6..322e009 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