conn,device: implement InitiationAwareEndpoint
To be implemented by [magicsock.lazyEndpoint], which is responsible for triggering JIT peer configuration. Updates tailscale/corp#20732 Updates tailscale/corp#30042 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
parent
24483d7a00
commit
1f398ae148
4 changed files with 52 additions and 3 deletions
|
|
@ -8,6 +8,7 @@ package device
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"net/netip"
|
||||
"testing"
|
||||
|
||||
"github.com/tailscale/wireguard-go/conn"
|
||||
|
|
@ -56,6 +57,26 @@ func assertEqual(t *testing.T, a, b []byte) {
|
|||
}
|
||||
}
|
||||
|
||||
type initAwareEP struct {
|
||||
calledWith *[32]byte
|
||||
}
|
||||
|
||||
var _ conn.Endpoint = (*initAwareEP)(nil)
|
||||
var _ conn.InitiationAwareEndpoint = (*initAwareEP)(nil)
|
||||
|
||||
func (i *initAwareEP) ClearSrc() {}
|
||||
func (i *initAwareEP) SrcToString() string { return "" }
|
||||
func (i *initAwareEP) DstToString() string { return "" }
|
||||
func (i *initAwareEP) DstToBytes() []byte { return nil }
|
||||
func (i *initAwareEP) DstIP() netip.Addr { return netip.Addr{} }
|
||||
func (i *initAwareEP) SrcIP() netip.Addr { return netip.Addr{} }
|
||||
|
||||
func (i *initAwareEP) InitiationMessagePublicKey(peerPublicKey [32]byte) {
|
||||
calledWith := [32]byte{}
|
||||
copy(calledWith[:], peerPublicKey[:])
|
||||
i.calledWith = &calledWith
|
||||
}
|
||||
|
||||
func TestNoiseHandshake(t *testing.T) {
|
||||
dev1 := randDevice(t)
|
||||
dev2 := randDevice(t)
|
||||
|
|
@ -93,10 +114,17 @@ func TestNoiseHandshake(t *testing.T) {
|
|||
writer := bytes.NewBuffer(packet)
|
||||
err = binary.Write(writer, binary.LittleEndian, msg1)
|
||||
assertNil(t, err)
|
||||
peer := dev2.ConsumeMessageInitiation(msg1)
|
||||
initEP := &initAwareEP{}
|
||||
peer := dev2.ConsumeMessageInitiation(msg1, initEP)
|
||||
if peer == nil {
|
||||
t.Fatal("handshake failed at initiation message")
|
||||
}
|
||||
if initEP.calledWith == nil {
|
||||
t.Fatal("initAwareEP never called")
|
||||
}
|
||||
if *initEP.calledWith != dev1.staticIdentity.publicKey {
|
||||
t.Fatal("initAwareEP called with unexpected public key")
|
||||
}
|
||||
|
||||
assertEqual(
|
||||
t,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue