summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabian Bläse2024-11-15 21:12:36 +0000
committerRobert Marko2025-05-17 09:35:54 +0000
commit723c699e84f4b0f4515928f0cc57a5be2a317ced (patch)
tree665f1a4e6ed9df57f4176227de0bf520ec96feef
parente8bbf246ce2e134613d3b68477dcb955689408e4 (diff)
downloadnetifd-723c699e84f4b0f4515928f0cc57a5be2a317ced.tar.gz
Restore disable_ipv6 sysctl after removing a device from bridge or bond
If a device is added to a bond or bridge, the disable_ipv6 sysctl is set, so that no link local addresses are present on the slave devices. However, the disable_ipv6 sysctl is not restored after removing the device from the bridge or bond. Therefore, no IPv6 link local addresses are added and autoconfiguration does not work. Set the disable_ipv6 to '0' on device removal from bridge or bond. Signed-off-by: Fabian Bläse <fabian@blaese.de> Link: https://github.com/openwrt/netifd/pull/40 Signed-off-by: Robert Marko <robimarko@gmail.com>
-rw-r--r--bonding.c5
-rw-r--r--bridge.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/bonding.c b/bonding.c
index 00a7b28..fef18f3 100644
--- a/bonding.c
+++ b/bonding.c
@@ -171,6 +171,11 @@ bonding_disable_port(struct bonding_port *bp, bool keep_dev)
if (!keep_dev)
device_release(&bp->dev);
+ if (bp->dev.dev->settings.flags & DEV_OPT_IPV6) {
+ bp->dev.dev->settings.ipv6 = 1;
+ bp->dev.dev->settings.flags &= ~DEV_OPT_IPV6;
+ }
+
return 0;
}
diff --git a/bridge.c b/bridge.c
index 2128ec7..70ece78 100644
--- a/bridge.c
+++ b/bridge.c
@@ -327,6 +327,11 @@ bridge_disable_member(struct bridge_member *bm, bool keep_dev)
if (!keep_dev)
device_release(&bm->dev);
+ if (bm->dev.dev->settings.flags & DEV_OPT_IPV6) {
+ bm->dev.dev->settings.ipv6 = 1;
+ bm->dev.dev->settings.flags &= ~DEV_OPT_IPV6;
+ }
+
device_broadcast_event(&bst->dev, DEV_EVENT_TOPO_CHANGE);
return 0;