summaryrefslogtreecommitdiff
path: root/src/dumm/bridge.c
diff options
context:
space:
mode:
authorRene Mayrhofer <rene@mayrhofer.eu.org>2008-10-29 20:30:44 +0000
committerRene Mayrhofer <rene@mayrhofer.eu.org>2008-10-29 20:30:44 +0000
commit74f0bbfc53cb5fa519e4e27ece53735ab51b397c (patch)
tree0dbab9c835be15577ff05b474b6361bb326d66ce /src/dumm/bridge.c
parent5c1fa2516bda1ccf8eb00178c0beb196c2020a94 (diff)
downloadvyos-strongswan-74f0bbfc53cb5fa519e4e27ece53735ab51b397c.tar.gz
vyos-strongswan-74f0bbfc53cb5fa519e4e27ece53735ab51b397c.zip
- New upstream release.
Diffstat (limited to 'src/dumm/bridge.c')
-rw-r--r--src/dumm/bridge.c22
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)