magicsock: call RequestStatus when DERP connects
Second attempt. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
This commit is contained in:
parent
a67b174da1
commit
dd2c61a519
@ -113,6 +113,7 @@ type Conn struct {
|
|||||||
pconn4 *RebindingUDPConn
|
pconn4 *RebindingUDPConn
|
||||||
pconn6 *RebindingUDPConn // non-nil if IPv6 available
|
pconn6 *RebindingUDPConn // non-nil if IPv6 available
|
||||||
epFunc func(endpoints []string)
|
epFunc func(endpoints []string)
|
||||||
|
derpActiveFunc func()
|
||||||
logf logger.Logf
|
logf logger.Logf
|
||||||
sendLogLimit *rate.Limiter
|
sendLogLimit *rate.Limiter
|
||||||
netChecker *netcheck.Client
|
netChecker *netcheck.Client
|
||||||
@ -281,6 +282,10 @@ type Options struct {
|
|||||||
// endpoints change. The called func does not own the slice.
|
// endpoints change. The called func does not own the slice.
|
||||||
EndpointsFunc func(endpoint []string)
|
EndpointsFunc func(endpoint []string)
|
||||||
|
|
||||||
|
// DERPActiveFunc optionally provides a func to be called when
|
||||||
|
// a connection is made to a DERP server.
|
||||||
|
DERPActiveFunc func()
|
||||||
|
|
||||||
// IdleFunc optionally provides a func to return how long
|
// IdleFunc optionally provides a func to return how long
|
||||||
// it's been since a TUN packet was sent or received.
|
// it's been since a TUN packet was sent or received.
|
||||||
IdleFunc func() time.Duration
|
IdleFunc func() time.Duration
|
||||||
@ -317,6 +322,13 @@ func (o *Options) endpointsFunc() func([]string) {
|
|||||||
return o.EndpointsFunc
|
return o.EndpointsFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Options) derpActiveFunc() func() {
|
||||||
|
if o == nil || o.DERPActiveFunc == nil {
|
||||||
|
return func() {}
|
||||||
|
}
|
||||||
|
return o.DERPActiveFunc
|
||||||
|
}
|
||||||
|
|
||||||
// newConn is the error-free, network-listening-side-effect-free based
|
// newConn is the error-free, network-listening-side-effect-free based
|
||||||
// of NewConn. Mostly for tests.
|
// of NewConn. Mostly for tests.
|
||||||
func newConn() *Conn {
|
func newConn() *Conn {
|
||||||
@ -346,6 +358,7 @@ func NewConn(opts Options) (*Conn, error) {
|
|||||||
c.pconnPort = opts.Port
|
c.pconnPort = opts.Port
|
||||||
c.logf = opts.logf()
|
c.logf = opts.logf()
|
||||||
c.epFunc = opts.endpointsFunc()
|
c.epFunc = opts.endpointsFunc()
|
||||||
|
c.derpActiveFunc = opts.derpActiveFunc()
|
||||||
c.idleFunc = opts.IdleFunc
|
c.idleFunc = opts.IdleFunc
|
||||||
c.packetListener = opts.PacketListener
|
c.packetListener = opts.PacketListener
|
||||||
c.noteRecvActivity = opts.NoteRecvActivity
|
c.noteRecvActivity = opts.NoteRecvActivity
|
||||||
@ -1206,6 +1219,7 @@ func (c *Conn) derpWriteChanOfAddr(addr netaddr.IPPort, peer key.Public) chan<-
|
|||||||
|
|
||||||
go c.runDerpReader(ctx, addr, dc, wg, startGate)
|
go c.runDerpReader(ctx, addr, dc, wg, startGate)
|
||||||
go c.runDerpWriter(ctx, dc, ch, wg, startGate)
|
go c.runDerpWriter(ctx, dc, ch, wg, startGate)
|
||||||
|
go c.derpActiveFunc()
|
||||||
|
|
||||||
return ad.writeCh
|
return ad.writeCh
|
||||||
}
|
}
|
||||||
|
@ -239,6 +239,7 @@ func newUserspaceEngineAdvanced(conf EngineConfig) (_ Engine, reterr error) {
|
|||||||
Logf: logf,
|
Logf: logf,
|
||||||
Port: conf.ListenPort,
|
Port: conf.ListenPort,
|
||||||
EndpointsFunc: endpointsFn,
|
EndpointsFunc: endpointsFn,
|
||||||
|
DERPActiveFunc: e.RequestStatus,
|
||||||
IdleFunc: e.tundev.IdleDuration,
|
IdleFunc: e.tundev.IdleDuration,
|
||||||
NoteRecvActivity: e.noteReceiveActivity,
|
NoteRecvActivity: e.noteReceiveActivity,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user