summaryrefslogtreecommitdiffstats
path: root/src/peer.c
diff options
context:
space:
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);
}