Skip to content

Commit b240507

Browse files
committed
set p2p setup
1 parent dbffec4 commit b240507

File tree

2 files changed

+24
-43
lines changed

2 files changed

+24
-43
lines changed

tailnet/conn.go

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -294,11 +294,7 @@ func NewConn(options *Options) (conn *Conn, err error) {
294294
server.telemetryStore.setNetInfo(ni)
295295
nodeUp.setNetInfo(ni)
296296
})
297-
server.wireguardEngine.AddNetworkMapCallback(func(nm *netmap.NetworkMap) {
298-
if server.telemetryStore.updateNetworkMap(nm) {
299-
server.sendUpdatedTelemetry()
300-
}
301-
})
297+
server.wireguardEngine.AddNetworkMapCallback(server.networkMapCallback)
302298
} else {
303299
server.wireguardEngine.SetNetInfoCallback(nodeUp.setNetInfo)
304300
}
@@ -723,25 +719,7 @@ func (c *Conn) SendConnectedTelemetry(ip netip.Addr, application string) {
723719
c.telemetryStore.markConnected(&ip, c.createdAt, application)
724720
e := c.newTelemetryEvent()
725721
e.Status = proto.TelemetryEvent_CONNECTED
726-
c.telemetryWg.Add(1)
727-
go func() {
728-
defer c.telemetryWg.Done()
729-
c.telemetrySink.SendTelemetryEvent(e)
730-
}()
731-
}
732-
733-
// Currently only called when the preferred DERP is updated.
734-
func (c *Conn) sendUpdatedTelemetry() {
735-
if c.telemetrySink == nil {
736-
return
737-
}
738-
e := c.newTelemetryEvent()
739-
e.Status = proto.TelemetryEvent_CONNECTED
740-
c.telemetryWg.Add(1)
741-
go func() {
742-
defer c.telemetryWg.Done()
743-
c.telemetrySink.SendTelemetryEvent(e)
744-
}()
722+
c.sendTelemetryBackground(e)
745723
}
746724

747725
func (c *Conn) SendDisconnectedTelemetry() {
@@ -750,11 +728,7 @@ func (c *Conn) SendDisconnectedTelemetry() {
750728
}
751729
e := c.newTelemetryEvent()
752730
e.Status = proto.TelemetryEvent_DISCONNECTED
753-
c.telemetryWg.Add(1)
754-
go func() {
755-
defer c.telemetryWg.Done()
756-
c.telemetrySink.SendTelemetryEvent(e)
757-
}()
731+
c.sendTelemetryBackground(e)
758732
}
759733

760734
func (c *Conn) SendSpeedtestTelemetry(throughputMbits float64) {
@@ -764,11 +738,7 @@ func (c *Conn) SendSpeedtestTelemetry(throughputMbits float64) {
764738
e := c.newTelemetryEvent()
765739
e.ThroughputMbits = wrapperspb.Float(float32(throughputMbits))
766740
e.Status = proto.TelemetryEvent_CONNECTED
767-
c.telemetryWg.Add(1)
768-
go func() {
769-
defer c.telemetryWg.Done()
770-
c.telemetrySink.SendTelemetryEvent(e)
771-
}()
741+
c.sendTelemetryBackground(e)
772742
}
773743

774744
// nolint:revive
@@ -782,15 +752,12 @@ func (c *Conn) sendPingTelemetry(pr *ipnstate.PingResult) {
782752
if pr.Endpoint != "" {
783753
e.P2PLatency = latency
784754
e.P2PEndpoint = c.telemetryStore.toEndpoint(pr.Endpoint)
755+
e.P2PSetup = durationpb.New(time.Since(c.createdAt))
785756
} else {
786757
e.DerpLatency = latency
787758
}
788759
e.Status = proto.TelemetryEvent_CONNECTED
789-
c.telemetryWg.Add(1)
790-
go func() {
791-
defer c.telemetryWg.Done()
792-
c.telemetrySink.SendTelemetryEvent(e)
793-
}()
760+
c.sendTelemetryBackground(e)
794761
}
795762

796763
// The returned telemetry event will not have it's status set.
@@ -804,6 +771,21 @@ func (c *Conn) newTelemetryEvent() *proto.TelemetryEvent {
804771
return event
805772
}
806773

774+
func (c *Conn) networkMapCallback(nm *netmap.NetworkMap) {
775+
c.telemetryStore.updateNetworkMap(nm)
776+
if c.telemetryStore.connectedIP != nil {
777+
go func() { _, _, _, _ = c.Ping(context.Background(), *c.telemetryStore.connectedIP) }()
778+
}
779+
}
780+
781+
func (c *Conn) sendTelemetryBackground(e *proto.TelemetryEvent) {
782+
c.telemetryWg.Add(1)
783+
go func() {
784+
defer c.telemetryWg.Done()
785+
c.telemetrySink.SendTelemetryEvent(e)
786+
}()
787+
}
788+
807789
// PeerDiagnostics is a checklist of human-readable conditions necessary to establish an encrypted
808790
// tunnel to a peer via a Conn
809791
type PeerDiagnostics struct {

tailnet/telemetry.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,17 @@ func (b *TelemetryStore) updateRemoteNodeIDLocked(nm *netmap.NetworkMap) {
100100
}
101101
}
102102

103-
// Returns whether a new telemetry event should be sent
104-
func (b *TelemetryStore) updateNetworkMap(nm *netmap.NetworkMap) bool {
103+
func (b *TelemetryStore) updateNetworkMap(nm *netmap.NetworkMap) {
105104
b.mu.Lock()
106105
defer b.mu.Unlock()
107106

108107
if nm == nil {
109-
return false
108+
return
110109
}
111110

112111
b.updateDerpMapLocked(nm.DERPMap)
113112
b.updateRemoteNodeIDLocked(nm)
114-
return b.updateByNodeLocked(nm.SelfNode)
113+
b.updateByNodeLocked(nm.SelfNode)
115114
}
116115

117116
// Given a DERPMap, anonymise all IPs and hostnames.

0 commit comments

Comments
 (0)