diff options
Diffstat (limited to 'src/dumm/bridge.c')
-rw-r--r-- | src/dumm/bridge.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/dumm/bridge.c b/src/dumm/bridge.c index cb8017c78..209e54fc1 100644 --- a/src/dumm/bridge.c +++ b/src/dumm/bridge.c @@ -112,19 +112,23 @@ static bool connect_iface(private_bridge_t *this, iface_t *iface) static int instances = 0; /** - * unregister an interface from bridge - */ -static void unregister(iface_t *iface) -{ - iface->set_bridge(iface, NULL); -} - -/** * Implementation of bridge_t.destroy. */ static void destroy(private_bridge_t *this) { - this->ifaces->invoke_function(this->ifaces, (linked_list_invoke_t)unregister); + enumerator_t *enumerator; + iface_t *iface; + + enumerator = this->ifaces->create_enumerator(this->ifaces); + while (enumerator->enumerate(enumerator, (void**)&iface)) + { + if (br_del_interface(this->name, iface->get_hostif(iface)) != 0) + { + DBG1("disconnecting iface '%s' failed: %m", iface->get_hostif(iface)); + } + iface->set_bridge(iface, NULL); + } + enumerator->destroy(enumerator); this->ifaces->destroy(this->ifaces); iface_control(this->name, FALSE); if (br_del_bridge(this->name) != 0) |