diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-03-23 07:20:02 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-03-23 07:20:02 +0100 |
commit | 5f66dbf5d1c26851e0a47269abbc44fe3524e4e2 (patch) | |
tree | 9019d7375f4949d37e52cbba55fc270326e9b4e5 /src/peer.c | |
parent | deb76974e225aa70825587e3eb6705634471f58c (diff) | |
download | fastd-5f66dbf5d1c26851e0a47269abbc44fe3524e4e2.tar fastd-5f66dbf5d1c26851e0a47269abbc44fe3524e4e2.zip |
peer: create interface when the connection has been established and no interface exists yet
Allows using dynamic interfaces with dynamic peers.
Diffstat (limited to 'src/peer.c')
-rw-r--r-- | src/peer.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -871,14 +871,29 @@ void fastd_peer_handle_handshake_queue(void) { } /** Marks a peer as established */ -void fastd_peer_set_established(fastd_peer_t *peer) { +bool fastd_peer_set_established(fastd_peer_t *peer) { if (fastd_peer_is_established(peer)) - return; + return true; + + if (!peer->iface) { + const char *ifname = peer->ifname; + + if (!ifname && fastd_config_single_iface()) + ifname = conf.ifname; + + peer->iface = fastd_iface_open(ifname, peer); + if (peer->iface) + on_up(peer, false); + else + return false; + } peer->state = STATE_ESTABLISHED; peer->established = ctx.now; on_establish(peer); pr_info("connection with %P established.", peer); + + return true; } /** Compares two MAC addresses */ |