Skip to content

Commit 591bd43

Browse files
committed
Add reconfig listener
1 parent 63d8f73 commit 591bd43

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
@@ -385,10 +385,6 @@ type LocalBackend struct {
385385
// backend is healthy and captive portal detection is not required
386386
// (sending false).
387387
needsCaptiveDetection chan bool
388-
389-
cfg *wgcfg.Config
390-
rcfg *router.Config
391-
dcfg *dns.Config
392388
}
393389

394390
// HealthTracker returns the health tracker for the backend.
@@ -4556,10 +4552,6 @@ func (b *LocalBackend) authReconfig() {
45564552

45574553
b.initPeerAPIListener()
45584554
b.readvertiseAppConnectorRoutes()
4559-
4560-
b.cfg = cfg
4561-
b.rcfg = rcfg
4562-
b.dcfg = dcfg
45634555
}
45644556

45654557
// 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
@@ -89,8 +89,10 @@ const statusPollInterval = 1 * time.Minute
8989
const networkLoggerUploadTimeout = 5 * time.Second
9090

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

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

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)