diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-06-12 15:56:23 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-06-12 15:59:55 +0200 |
commit | b9e2e0193bffc4d426fc8fa65e82e6ea36f997e9 (patch) | |
tree | 9c02ff009194f94c1371a8d3cdd097383b4c126c /pingu_host.c | |
parent | 17214eeed5ad7029ec0f437f6952e981fe67e1a6 (diff) | |
download | pingu-b9e2e0193bffc4d426fc8fa65e82e6ea36f997e9.tar.bz2 pingu-b9e2e0193bffc4d426fc8fa65e82e6ea36f997e9.tar.xz |
pingu_host: bring interface down instantly if interface disapears
We need execute the down hook in case interface goes down if we have
gre tunnels bound to an interface.
If for example ppp0 disapears (pppd restart) and comes back before pingu
notices it, the gre interface will not be bound to anything. So we force
the "down" event instantly if we detect that the iface is gone.
Diffstat (limited to 'pingu_host.c')
-rw-r--r-- | pingu_host.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/pingu_host.c b/pingu_host.c index be44343..f7695c4 100644 --- a/pingu_host.c +++ b/pingu_host.c @@ -139,6 +139,14 @@ int pingu_host_init(struct ev_loop *loop) return 0; } +void pingu_host_iface_deleted(struct pingu_iface *iface) +{ + struct pingu_host *host; + list_for_each_entry(host, &host_list, host_list_entry) + if (host->iface == iface) + pingu_host_set_status(host, 0); +} + void pingu_host_cleanup(void) { struct pingu_host *host, *n; |