Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita514df7

Browse files
authored
chore: add setDERPMap to configMaps (#11590)
Add setDERPMap
1 parent25e289e commita514df7

File tree

3 files changed

+116
-3
lines changed

3 files changed

+116
-3
lines changed

‎tailnet/configmaps.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,24 @@ func (c *configMaps) setBlockEndpoints(blockEndpoints bool) {
253253
c.Broadcast()
254254
}
255255

256+
// setDERPMap sets the DERP map, triggering a configuration of the engine if it has changed.
257+
// c.L MUST NOT be held.
258+
func (c*configMaps)setDERPMap(derpMap*proto.DERPMap) {
259+
c.L.Lock()
260+
deferc.L.Unlock()
261+
eq,err:=c.derpMap.Equal(derpMap)
262+
iferr!=nil {
263+
c.logger.Critical(context.Background(),"failed to compare DERP maps",slog.Error(err))
264+
return
265+
}
266+
ifeq {
267+
return
268+
}
269+
c.derpMap=derpMap
270+
c.derpMapDirty=true
271+
c.Broadcast()
272+
}
273+
256274
// derMapLocked returns the current DERPMap. c.L must be held
257275
func (c*configMaps)derpMapLocked()*tailcfg.DERPMap {
258276
m:=DERPMapFromProto(c.derpMap)

‎tailnet/configmaps_internal_test.go

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,88 @@ func TestConfigMaps_setBlockEndpoints_same(t *testing.T) {
571571
_=testutil.RequireRecvCtx(ctx,t,done)
572572
}
573573

574+
funcTestConfigMaps_setDERPMap_different(t*testing.T) {
575+
t.Parallel()
576+
ctx:=testutil.Context(t,testutil.WaitShort)
577+
logger:=slogtest.Make(t,nil).Leveled(slog.LevelDebug)
578+
fEng:=newFakeEngineConfigurable()
579+
nodePrivateKey:=key.NewNode()
580+
nodeID:=tailcfg.NodeID(5)
581+
discoKey:=key.NewDisco()
582+
uut:=newConfigMaps(logger,fEng,nodeID,nodePrivateKey,discoKey.Public(),nil)
583+
deferuut.close()
584+
585+
derpMap:=&proto.DERPMap{
586+
HomeParams:&proto.DERPMap_HomeParams{RegionScore:map[int64]float64{1:0.025}},
587+
Regions:map[int64]*proto.DERPMap_Region{
588+
1: {
589+
RegionCode:"AUH",
590+
Nodes: []*proto.DERPMap_Region_Node{
591+
{Name:"AUH0"},
592+
},
593+
},
594+
},
595+
}
596+
uut.setDERPMap(derpMap)
597+
598+
dm:=testutil.RequireRecvCtx(ctx,t,fEng.setDERPMap)
599+
require.Len(t,dm.HomeParams.RegionScore,1)
600+
require.Equal(t,dm.HomeParams.RegionScore[1],0.025)
601+
require.Len(t,dm.Regions,1)
602+
r1:=dm.Regions[1]
603+
require.Equal(t,"AUH",r1.RegionCode)
604+
require.Len(t,r1.Nodes,1)
605+
require.Equal(t,"AUH0",r1.Nodes[0].Name)
606+
607+
done:=make(chanstruct{})
608+
gofunc() {
609+
deferclose(done)
610+
uut.close()
611+
}()
612+
_=testutil.RequireRecvCtx(ctx,t,done)
613+
}
614+
615+
funcTestConfigMaps_setDERPMap_same(t*testing.T) {
616+
t.Parallel()
617+
ctx:=testutil.Context(t,testutil.WaitShort)
618+
logger:=slogtest.Make(t,nil).Leveled(slog.LevelDebug)
619+
fEng:=newFakeEngineConfigurable()
620+
nodePrivateKey:=key.NewNode()
621+
nodeID:=tailcfg.NodeID(5)
622+
discoKey:=key.NewDisco()
623+
uut:=newConfigMaps(logger,fEng,nodeID,nodePrivateKey,discoKey.Public(),nil)
624+
deferuut.close()
625+
626+
// Given: DERP Map already set
627+
derpMap:=&proto.DERPMap{
628+
HomeParams:&proto.DERPMap_HomeParams{RegionScore:map[int64]float64{1:0.025}},
629+
Regions:map[int64]*proto.DERPMap_Region{
630+
1: {
631+
RegionCode:"AUH",
632+
Nodes: []*proto.DERPMap_Region_Node{
633+
{Name:"AUH0"},
634+
},
635+
},
636+
},
637+
}
638+
uut.L.Lock()
639+
uut.derpMap=derpMap
640+
uut.L.Unlock()
641+
642+
// Then: we don't configure
643+
requireNeverConfigures(ctx,t,&uut.phased)
644+
645+
// When we set the same DERP map
646+
uut.setDERPMap(derpMap)
647+
648+
done:=make(chanstruct{})
649+
gofunc() {
650+
deferclose(done)
651+
uut.close()
652+
}()
653+
_=testutil.RequireRecvCtx(ctx,t,done)
654+
}
655+
574656
funcexpectStatusWithHandshake(
575657
ctx context.Context,t testing.TB,fEng*fakeEngineConfigurable,k key.NodePublic,lastHandshake time.Time,
576658
)<-chanstruct{} {
@@ -696,6 +778,7 @@ type fakeEngineConfigurable struct {
696778
setNetworkMapchan*netmap.NetworkMap
697779
reconfigchanreconfigCall
698780
filterchan*filter.Filter
781+
setDERPMapchan*tailcfg.DERPMap
699782

700783
// To fake these fields the test should read from status, do stuff to the
701784
// StatusBuilder, then write to statusDone
@@ -713,6 +796,7 @@ func newFakeEngineConfigurable() *fakeEngineConfigurable {
713796
setNetworkMap:make(chan*netmap.NetworkMap),
714797
reconfig:make(chanreconfigCall),
715798
filter:make(chan*filter.Filter),
799+
setDERPMap:make(chan*tailcfg.DERPMap),
716800
status:make(chan*ipnstate.StatusBuilder),
717801
statusDone:make(chanstruct{}),
718802
}
@@ -727,9 +811,8 @@ func (f fakeEngineConfigurable) Reconfig(wg *wgcfg.Config, r *router.Config, _ *
727811
returnnil
728812
}
729813

730-
func (fakeEngineConfigurable)SetDERPMap(*tailcfg.DERPMap) {
731-
// TODO implement me
732-
panic("implement me")
814+
func (ffakeEngineConfigurable)SetDERPMap(d*tailcfg.DERPMap) {
815+
f.setDERPMap<-d
733816
}
734817

735818
func (ffakeEngineConfigurable)SetFilter(flt*filter.Filter) {

‎tailnet/proto/compare.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,15 @@ func (s *Node) Equal(o *Node) (bool, error) {
1818
}
1919
returnbytes.Equal(sBytes,oBytes),nil
2020
}
21+
22+
func (s*DERPMap)Equal(o*DERPMap) (bool,error) {
23+
sBytes,err:=gProto.Marshal(s)
24+
iferr!=nil {
25+
returnfalse,err
26+
}
27+
oBytes,err:=gProto.Marshal(o)
28+
iferr!=nil {
29+
returnfalse,err
30+
}
31+
returnbytes.Equal(sBytes,oBytes),nil
32+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp