@@ -130,7 +130,7 @@ func NewConn(options *Options) (conn *Conn, err error) {
130
130
}()
131
131
132
132
dialer := & tsdial.Dialer {
133
- Logf : Logger (options .Logger ),
133
+ Logf : Logger (options .Logger . Named ( "tsdial" ) ),
134
134
}
135
135
wireguardEngine , err := wgengine .NewUserspaceEngine (Logger (options .Logger .Named ("wgengine" )), wgengine.Config {
136
136
LinkMonitor : wireguardMonitor ,
@@ -179,6 +179,7 @@ func NewConn(options *Options) (conn *Conn, err error) {
179
179
wireguardEngine = wgengine .NewWatchdog (wireguardEngine )
180
180
wireguardEngine .SetDERPMap (options .DERPMap )
181
181
netMapCopy := * netMap
182
+ options .Logger .Debug (context .Background (), "updating network map" , slog .F ("net_map" , netMapCopy ))
182
183
wireguardEngine .SetNetworkMap (& netMapCopy )
183
184
184
185
localIPSet := netipx.IPSetBuilder {}
@@ -329,9 +330,11 @@ func (c *Conn) SetDERPMap(derpMap *tailcfg.DERPMap) {
329
330
c .mutex .Lock ()
330
331
defer c .mutex .Unlock ()
331
332
c .logger .Debug (context .Background (), "updating derp map" , slog .F ("derp_map" , derpMap ))
332
- c .netMap .DERPMap = derpMap
333
- c .wireguardEngine .SetNetworkMap (c .netMap )
334
333
c .wireguardEngine .SetDERPMap (derpMap )
334
+ c .netMap .DERPMap = derpMap
335
+ netMapCopy := * c .netMap
336
+ c .logger .Debug (context .Background (), "updating network map" , slog .F ("net_map" , netMapCopy ))
337
+ c .wireguardEngine .SetNetworkMap (& netMapCopy )
335
338
}
336
339
337
340
func (c * Conn ) RemoveAllPeers () error {
@@ -341,6 +344,7 @@ func (c *Conn) RemoveAllPeers() error {
341
344
c .netMap .Peers = []* tailcfg.Node {}
342
345
c .peerMap = map [tailcfg.NodeID ]* tailcfg.Node {}
343
346
netMapCopy := * c .netMap
347
+ c .logger .Debug (context .Background (), "updating network map" , slog .F ("net_map" , netMapCopy ))
344
348
c .wireguardEngine .SetNetworkMap (& netMapCopy )
345
349
cfg , err := nmcfg .WGCfg (c .netMap , Logger (c .logger .Named ("wgconfig" )), netmap .AllowSingleHosts , "" )
346
350
if err != nil {
@@ -360,11 +364,18 @@ func (c *Conn) RemoveAllPeers() error {
360
364
}
361
365
362
366
// UpdateNodes connects with a set of peers. This can be constantly updated,
363
- // and peers will continually be reconnected as necessary.
364
- func (c * Conn ) UpdateNodes (nodes []* Node ) error {
367
+ // and peers will continually be reconnected as necessary. If replacePeers is
368
+ // true, all peers will be removed before adding the new ones.
369
+ //
370
+ //nolint:revive // Complains about replacePeers.
371
+ func (c * Conn ) UpdateNodes (nodes []* Node , replacePeers bool ) error {
365
372
c .mutex .Lock ()
366
373
defer c .mutex .Unlock ()
367
374
status := c .Status ()
375
+ if replacePeers {
376
+ c .netMap .Peers = []* tailcfg.Node {}
377
+ c .peerMap = map [tailcfg.NodeID ]* tailcfg.Node {}
378
+ }
368
379
for _ , peer := range c .netMap .Peers {
369
380
peerStatus , ok := status .Peer [peer .Key ]
370
381
if ! ok {
@@ -384,6 +395,11 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
384
395
delete (c .peerMap , peer .ID )
385
396
}
386
397
for _ , node := range nodes {
398
+ // If no preferred DERP is provided, we can't reach the node.
399
+ if node .PreferredDERP == 0 {
400
+ c .logger .Debug (context .Background (), "no preferred DERP, skipping node" , slog .F ("node" , node ))
401
+ continue
402
+ }
387
403
c .logger .Debug (context .Background (), "adding node" , slog .F ("node" , node ))
388
404
389
405
peerStatus , ok := status .Peer [node .Key ]
@@ -402,10 +418,6 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
402
418
// reason. TODO: @kylecarbs debug this!
403
419
KeepAlive : ok && peerStatus .Active ,
404
420
}
405
- // If no preferred DERP is provided, don't set an IP!
406
- if node .PreferredDERP == 0 {
407
- peerNode .DERP = ""
408
- }
409
421
if c .blockEndpoints {
410
422
peerNode .Endpoints = nil
411
423
}
@@ -416,6 +428,7 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
416
428
c .netMap .Peers = append (c .netMap .Peers , peer .Clone ())
417
429
}
418
430
netMapCopy := * c .netMap
431
+ c .logger .Debug (context .Background (), "updating network map" , slog .F ("net_map" , netMapCopy ))
419
432
c .wireguardEngine .SetNetworkMap (& netMapCopy )
420
433
cfg , err := nmcfg .WGCfg (c .netMap , Logger (c .logger .Named ("wgconfig" )), netmap .AllowSingleHosts , "" )
421
434
if err != nil {
0 commit comments