@@ -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 {
@@ -361,10 +365,14 @@ func (c *Conn) RemoveAllPeers() error {
361
365
362
366
// UpdateNodes connects with a set of peers. This can be constantly updated,
363
367
// and peers will continually be reconnected as necessary.
364
- func (c * Conn ) UpdateNodes (nodes []* Node ) error {
368
+ func (c * Conn ) UpdateNodes (nodes []* Node , replace bool ) error {
365
369
c .mutex .Lock ()
366
370
defer c .mutex .Unlock ()
367
371
status := c .Status ()
372
+ if replace {
373
+ c .netMap .Peers = []* tailcfg.Node {}
374
+ c .peerMap = map [tailcfg.NodeID ]* tailcfg.Node {}
375
+ }
368
376
for _ , peer := range c .netMap .Peers {
369
377
peerStatus , ok := status .Peer [peer .Key ]
370
378
if ! ok {
@@ -384,6 +392,11 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
384
392
delete (c .peerMap , peer .ID )
385
393
}
386
394
for _ , node := range nodes {
395
+ // If no preferred DERP is provided, we can't reach the node.
396
+ if node .PreferredDERP == 0 {
397
+ c .logger .Debug (context .Background (), "no preferred DERP, skipping node" , slog .F ("node" , node ))
398
+ continue
399
+ }
387
400
c .logger .Debug (context .Background (), "adding node" , slog .F ("node" , node ))
388
401
389
402
peerStatus , ok := status .Peer [node .Key ]
@@ -402,10 +415,6 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
402
415
// reason. TODO: @kylecarbs debug this!
403
416
KeepAlive : ok && peerStatus .Active ,
404
417
}
405
- // If no preferred DERP is provided, don't set an IP!
406
- if node .PreferredDERP == 0 {
407
- peerNode .DERP = ""
408
- }
409
418
if c .blockEndpoints {
410
419
peerNode .Endpoints = nil
411
420
}
@@ -416,6 +425,7 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
416
425
c .netMap .Peers = append (c .netMap .Peers , peer .Clone ())
417
426
}
418
427
netMapCopy := * c .netMap
428
+ c .logger .Debug (context .Background (), "updating network map" , slog .F ("net_map" , netMapCopy ))
419
429
c .wireguardEngine .SetNetworkMap (& netMapCopy )
420
430
cfg , err := nmcfg .WGCfg (c .netMap , Logger (c .logger .Named ("wgconfig" )), netmap .AllowSingleHosts , "" )
421
431
if err != nil {
0 commit comments