Skip to content

Commit 8b68177

Browse files
committed
Add reconfig listener
1 parent 97a7019 commit 8b68177

File tree

4 files changed

+30
-15
lines changed

4 files changed

+30
-15
lines changed

ipn/ipnlocal/local.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -370,10 +370,6 @@ type LocalBackend struct {
370370
// backend is healthy and captive portal detection is not required
371371
// (sending false).
372372
needsCaptiveDetection chan bool
373-
374-
cfg *wgcfg.Config
375-
rcfg *router.Config
376-
dcfg *dns.Config
377373
}
378374

379375
// HealthTracker returns the health tracker for the backend.
@@ -4264,10 +4260,6 @@ func (b *LocalBackend) authReconfig() {
42644260
}
42654261

42664262
b.initPeerAPIListener()
4267-
4268-
b.cfg = cfg
4269-
b.rcfg = rcfg
4270-
b.dcfg = dcfg
42714263
}
42724264

42734265
// shouldUseOneCGNATRoute reports whether we should prefer to make one big

ipn/ipnlocal/local_export.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@ package ipnlocal
33
import (
44
"sync/atomic"
55

6-
"github.com/sagernet/tailscale/net/dns"
6+
"github.com/sagernet/tailscale/wgengine"
77
"github.com/sagernet/tailscale/wgengine/filter"
8-
"github.com/sagernet/tailscale/wgengine/router"
9-
"github.com/sagernet/tailscale/wgengine/wgcfg"
108
)
119

1210
func (b *LocalBackend) ExportFilter() *atomic.Pointer[filter.Filter] {
1311
return &b.filterAtomic
1412
}
1513

16-
func (b *LocalBackend) ExportConfig() (*wgcfg.Config, *dns.Config, *router.Config) {
17-
return b.cfg, b.dcfg, b.rcfg
14+
func (b *LocalBackend) ExportEngine() wgengine.Engine {
15+
return b.e
1816
}

wgengine/userspace.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,10 @@ const statusPollInterval = 1 * time.Minute
9090
const networkLoggerUploadTimeout = 5 * time.Second
9191

9292
type userspaceEngine struct {
93-
ctx context.Context
94-
workers int
93+
ctx context.Context
94+
workers int
95+
onReconfig ReconfigListener
96+
9597
logf logger.Logf
9698
wgLogger *wglog.Logger //a wireguard-go logging wrapper
9799
reqCh chan struct{}
@@ -1051,6 +1053,10 @@ func (e *userspaceEngine) Reconfig(cfg *wgcfg.Config, routerCfg *router.Config,
10511053
}
10521054
}
10531055

1056+
if routerChanged && e.onReconfig != nil {
1057+
e.onReconfig(cfg, routerCfg, dnsCfg)
1058+
}
1059+
10541060
e.logf("[v1] wgengine: Reconfig done")
10551061
return nil
10561062
}

wgengine/userspace_export.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package wgengine
2+
3+
import (
4+
"github.com/sagernet/tailscale/net/dns"
5+
"github.com/sagernet/tailscale/wgengine/router"
6+
"github.com/sagernet/tailscale/wgengine/wgcfg"
7+
)
8+
9+
type ExportedUserspaceEngine interface {
10+
SetOnReconfigListener(listener ReconfigListener)
11+
}
12+
13+
type ReconfigListener = func(cfg *wgcfg.Config, routerCfg *router.Config, dnsCfg *dns.Config)
14+
15+
func (e *userspaceEngine) SetOnReconfigListener(listener ReconfigListener) {
16+
e.mu.Lock()
17+
defer e.mu.Unlock()
18+
e.onReconfig = listener
19+
}

0 commit comments

Comments
 (0)