summaryrefslogtreecommitdiffstats
path: root/src/peer.c
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-03-23 01:40:35 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-03-23 01:40:35 +0100
commit0e8493ea17c1bba64ee0de588bdbad7fdb6fd9ba (patch)
treeff1474d41067c45e4d9b2190601e43a03f8aec74 /src/peer.c
parent08e782b27d47c4b5e74d505aecfee661ff9df4e0 (diff)
downloadfastd-0e8493ea17c1bba64ee0de588bdbad7fdb6fd9ba.tar
fastd-0e8493ea17c1bba64ee0de588bdbad7fdb6fd9ba.zip
Use peer-specific interface in TUN mode
Diffstat (limited to 'src/peer.c')
-rw-r--r--src/peer.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/peer.c b/src/peer.c
index 35eae28..56a203d 100644
--- a/src/peer.c
+++ b/src/peer.c
@@ -378,7 +378,13 @@ static void setup_peer(fastd_peer_t *peer) {
peer->verify_valid_timeout = ctx.now;
#endif
- peer->iface = ctx.iface;
+ if (ctx.iface) {
+ peer->iface = ctx.iface;
+ }
+ else if (conf.iface_persist && !peer->iface) {
+ peer->iface = fastd_iface_open(peer);
+ fastd_on_up(peer->iface);
+ }
if (!fastd_peer_is_enabled(peer))
/* Keep the peer in STATE_INACTIVE */
@@ -437,6 +443,11 @@ static void delete_peer(fastd_peer_t *peer) {
conf.protocol->free_peer_state(peer);
+ if (peer->iface && peer->iface->peer) {
+ fastd_on_down(peer->iface);
+ fastd_iface_close(peer->iface);
+ }
+
fastd_peer_free(peer);
}