summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Karlsson2023-12-05 23:22:58 +0000
committerFelix Fietkau2024-01-04 11:18:13 +0000
commitf01345ec13b9b27ffd314d8689fb2d3f9c81a47d (patch)
tree43c6e3b59b21d4c429ced5ad5e612928d78a2e67
parent4219e99eeec7514657f5838eb4b4b5eb28ee1271 (diff)
downloadnetifd-f01345ec13b9b27ffd314d8689fb2d3f9c81a47d.tar.gz
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 <erik.karlsson@genexis.eu>
-rw-r--r--device.c8
1 files changed, 8 insertions, 0 deletions
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;