mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
wgengine: let LinkMonitor be passed in to NewUserspaceEngine
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
ee6475a44d
commit
a55a03d5ff
@ -96,6 +96,7 @@ type userspaceEngine struct {
|
|||||||
resolver *tsdns.Resolver
|
resolver *tsdns.Resolver
|
||||||
magicConn *magicsock.Conn
|
magicConn *magicsock.Conn
|
||||||
linkMon *monitor.Mon
|
linkMon *monitor.Mon
|
||||||
|
linkMonOwned bool // whether we created linkMon (and thus need to close it)
|
||||||
linkMonUnregister func() // unsubscribes from changes; used regardless of linkMonOwned
|
linkMonUnregister func() // unsubscribes from changes; used regardless of linkMonOwned
|
||||||
|
|
||||||
testMaybeReconfigHook func() // for tests; if non-nil, fires if maybeReconfigWireguardLocked called
|
testMaybeReconfigHook func() // for tests; if non-nil, fires if maybeReconfigWireguardLocked called
|
||||||
@ -148,6 +149,10 @@ type Config struct {
|
|||||||
// If nil, wgengine/router.New is used.
|
// If nil, wgengine/router.New is used.
|
||||||
RouterGen RouterGen
|
RouterGen RouterGen
|
||||||
|
|
||||||
|
// LinkMonitor optionally provides an existing link monitor to re-use.
|
||||||
|
// If nil, a new link monitor is created.
|
||||||
|
LinkMonitor *monitor.Mon
|
||||||
|
|
||||||
// ListenPort is the port on which the engine will listen.
|
// ListenPort is the port on which the engine will listen.
|
||||||
// If zero, a port is automatically selected.
|
// If zero, a port is automatically selected.
|
||||||
ListenPort uint16
|
ListenPort uint16
|
||||||
@ -242,12 +247,17 @@ func newUserspaceEngine(logf logger.Logf, rawTUNDev tun.Device, conf Config) (_
|
|||||||
e.linkState, _ = getLinkState()
|
e.linkState, _ = getLinkState()
|
||||||
logf("link state: %+v", e.linkState)
|
logf("link state: %+v", e.linkState)
|
||||||
|
|
||||||
mon, err := monitor.New(logf)
|
if conf.LinkMonitor != nil {
|
||||||
if err != nil {
|
e.linkMon = conf.LinkMonitor
|
||||||
return nil, err
|
} else {
|
||||||
|
mon, err := monitor.New(logf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
closePool.add(mon)
|
||||||
|
e.linkMon = mon
|
||||||
|
e.linkMonOwned = true
|
||||||
}
|
}
|
||||||
closePool.add(mon)
|
|
||||||
e.linkMon = mon
|
|
||||||
unregisterMonWatch := e.linkMon.RegisterChangeCallback(func() {
|
unregisterMonWatch := e.linkMon.RegisterChangeCallback(func() {
|
||||||
e.LinkChange(false)
|
e.LinkChange(false)
|
||||||
tshttpproxy.InvalidateCache()
|
tshttpproxy.InvalidateCache()
|
||||||
@ -270,6 +280,7 @@ func newUserspaceEngine(logf logger.Logf, rawTUNDev tun.Device, conf Config) (_
|
|||||||
IdleFunc: e.tundev.IdleDuration,
|
IdleFunc: e.tundev.IdleDuration,
|
||||||
NoteRecvActivity: e.noteReceiveActivity,
|
NoteRecvActivity: e.noteReceiveActivity,
|
||||||
}
|
}
|
||||||
|
var err error
|
||||||
e.magicConn, err = magicsock.NewConn(magicsockOpts)
|
e.magicConn, err = magicsock.NewConn(magicsockOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("wgengine: %v", err)
|
return nil, fmt.Errorf("wgengine: %v", err)
|
||||||
@ -1237,7 +1248,9 @@ func (e *userspaceEngine) Close() {
|
|||||||
e.resolver.Close()
|
e.resolver.Close()
|
||||||
e.magicConn.Close()
|
e.magicConn.Close()
|
||||||
e.linkMonUnregister()
|
e.linkMonUnregister()
|
||||||
e.linkMon.Close()
|
if e.linkMonOwned {
|
||||||
|
e.linkMon.Close()
|
||||||
|
}
|
||||||
e.router.Close()
|
e.router.Close()
|
||||||
e.wgdev.Close()
|
e.wgdev.Close()
|
||||||
e.tundev.Close()
|
e.tundev.Close()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user