From 7b0d315675dc4980f228cee51bc362c62528f29b Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 2 Jul 2020 13:32:22 +0100 Subject: [PATCH] Resolve if session doesn't exist when writing to PacketConn --- src/tuntap/iface.go | 5 ----- src/yggdrasil/packetconn.go | 13 +++++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/tuntap/iface.go b/src/tuntap/iface.go index 38f22959..a5dea47e 100644 --- a/src/tuntap/iface.go +++ b/src/tuntap/iface.go @@ -1,9 +1,6 @@ package tuntap import ( - "fmt" - "net" - "github.com/yggdrasil-network/yggdrasil-go/src/address" "github.com/yggdrasil-network/yggdrasil-go/src/crypto" @@ -169,8 +166,6 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) { return } - fmt.Println("Start search for", net.IP(dstAddr[:]).String()) - _, boxPubKey, err = tun.core.Resolve(dstNodeID, dstNodeMask) if err != nil { tun.log.Errorln("tun.core.Resolve:", err) diff --git a/src/yggdrasil/packetconn.go b/src/yggdrasil/packetconn.go index 0e2a41d4..06c7ace0 100644 --- a/src/yggdrasil/packetconn.go +++ b/src/yggdrasil/packetconn.go @@ -67,13 +67,19 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) { if !ok { return 0, errors.New("expected *crypto.BoxPubKey as net.Addr") } + nodeID := crypto.GetNodeID(boxPubKey) + nodeMask := &crypto.NodeID{} + for i := range nodeMask { + nodeMask[i] = 0xFF + } var session *sessionInfo phony.Block(c.sessions.router, func() { var ok bool session, ok = c.sessions.getByTheirPerm(boxPubKey) if !ok { - session = c.sessions.createSession(boxPubKey) + c.sessions.router.core.Resolve(nodeID, nodeMask) + session, _ = c.sessions.getByTheirPerm(boxPubKey) } }) if session == nil { @@ -82,11 +88,6 @@ func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) { err := make(chan error, 1) msg := FlowKeyMessage{Message: b} - nodeID := crypto.GetNodeID(boxPubKey) - nodeMask := &crypto.NodeID{} - for i := range nodeMask { - nodeMask[i] = 0xFF - } session.Act(c, func() { // Check if the packet is small enough to go through this session