diff options
| author | Erik Karlsson | 2023-12-05 23:22:58 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2024-01-04 11:18:13 +0000 |
| commit | f01345ec13b9b27ffd314d8689fb2d3f9c81a47d (patch) | |
| tree | 43c6e3b59b21d4c429ced5ad5e612928d78a2e67 | |
| parent | 4219e99eeec7514657f5838eb4b4b5eb28ee1271 (diff) | |
| download | netifd-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.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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; |