summaryrefslogtreecommitdiff
path: root/device.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2020-11-30 12:08:32 +0100
committerFelix Fietkau <nbd@nbd.name>2020-11-30 12:08:32 +0100
commit524310276f2084d419cb0f2de58b0f42641d987f (patch)
tree9c57837d806e4b0f9ae9f7317145d52fa676832b /device.c
parent14f0e8ff928f2adb1c2ee65f11eb1710bb463fef (diff)
downloadnetifd-524310276f2084d419cb0f2de58b0f42641d987f.tar.gz
system-linux: move device settings handling to device.c
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'device.c')
-rw-r--r--device.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/device.c b/device.c
index 3e2b5e9..627f1a2 100644
--- a/device.c
+++ b/device.c
@@ -143,10 +143,17 @@ static int set_device_state(struct device *dev, bool state)
if (!dev->ifindex)
return -1;
+ system_if_get_settings(dev, &dev->orig_settings);
+ /* Only keep orig settings based on what needs to be set */
+ dev->orig_settings.valid_flags = dev->orig_settings.flags;
+ dev->orig_settings.flags &= dev->settings.flags;
+ system_if_apply_settings(dev, &dev->settings, dev->settings.flags);
+
system_if_up(dev);
- }
- else
+ } else {
system_if_down(dev);
+ system_if_apply_settings(dev, &dev->orig_settings, dev->orig_settings.flags);
+ }
return 0;
}