Main use-case is to renew/restart DHCP if a bridge member is added/removed.
Signed-off-by: Helmut Schaa <helmut.sc...@googlemail.com> --- Maybe it is worth to add another PROTO_CMD_RENEW or something that is more lightweight instead of running a full setup again? bridge.c | 4 ++++ device.h | 3 +++ interface.c | 3 +++ 3 files changed, 10 insertions(+) diff --git a/bridge.c b/bridge.c index 4ef0d7e..db403c5 100644 --- a/bridge.c +++ b/bridge.c @@ -140,6 +140,8 @@ bridge_disable_member(struct bridge_member *bm) system_bridge_delif(&bst->dev, bm->dev.dev); device_release(&bm->dev); + device_broadcast_event(&bst->dev, DEV_EVENT_TOPO_CHANGE); + return 0; } @@ -162,6 +164,8 @@ bridge_enable_member(struct bridge_member *bm) goto error; } + device_broadcast_event(&bst->dev, DEV_EVENT_TOPO_CHANGE); + return 0; error: diff --git a/device.h b/device.h index 8d3efa3..e96a4c4 100644 --- a/device.h +++ b/device.h @@ -77,6 +77,9 @@ enum device_event { DEV_EVENT_LINK_UP, DEV_EVENT_LINK_DOWN, + /* Topology changed (i.e. bridge member added) */ + DEV_EVENT_TOPO_CHANGE, + __DEV_EVENT_MAX }; diff --git a/interface.c b/interface.c index b2c8baf..7fcc8a0 100644 --- a/interface.c +++ b/interface.c @@ -248,6 +248,9 @@ interface_cb(struct device_user *dep, enum device_event ev) case DEV_EVENT_REMOVE: new_state = false; break; + case DEV_EVENT_TOPO_CHANGE: + interface_proto_event(iface->proto, PROTO_CMD_SETUP, false); + return; default: return; } -- 1.8.1.4 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel