mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-22 22:20:27 +00:00
Further updates, notify sessions about updated MTU from API call
This commit is contained in:
parent
d1c445dc41
commit
7c18c6806d
@ -233,6 +233,12 @@ func (tun *TunAdapter) UpdateConfig(config *config.NodeConfig) {
|
|||||||
// Replace the active configuration with the supplied one
|
// Replace the active configuration with the supplied one
|
||||||
tun.config.Replace(*config)
|
tun.config.Replace(*config)
|
||||||
|
|
||||||
|
// If the MTU has changed in the TUN/TAP module then this is where we would
|
||||||
|
// tell the router so that updated session pings can be sent. However, we
|
||||||
|
// don't currently update the MTU of the adapter once it has been created so
|
||||||
|
// this doesn't actually happen in the real world yet.
|
||||||
|
// tun.core.SetMaximumSessionMTU(...)
|
||||||
|
|
||||||
// Notify children about the configuration change
|
// Notify children about the configuration change
|
||||||
tun.Act(nil, tun.ckr.configure)
|
tun.Act(nil, tun.ckr.configure)
|
||||||
}
|
}
|
||||||
|
@ -364,19 +364,23 @@ func (c *Core) SetNodeInfo(nodeinfo interface{}, nodeinfoprivacy bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetMaximumSessionMTU returns the maximum allowed session MTU size.
|
// GetMaximumSessionMTU returns the maximum allowed session MTU size.
|
||||||
func (c *Core) GetMaximumSessionMTU(mtu uint16) uint16 {
|
func (c *Core) GetMaximumSessionMTU() uint16 {
|
||||||
mtu := 0
|
var mtu uint16
|
||||||
phony.Block(c.router, func() {
|
phony.Block(&c.router, func() {
|
||||||
mtu = c.router.sessions.myMaximumMTU
|
mtu = c.router.sessions.myMaximumMTU
|
||||||
})
|
})
|
||||||
return mtu
|
return mtu
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMaximumSessionMTU sets the maximum allowed session MTU size. The default
|
// SetMaximumSessionMTU sets the maximum allowed session MTU size. The default
|
||||||
// value is 65535 bytes.
|
// value is 65535 bytes. Session pings will be sent to update all open sessions
|
||||||
|
// if the MTU has changed.
|
||||||
func (c *Core) SetMaximumSessionMTU(mtu uint16) {
|
func (c *Core) SetMaximumSessionMTU(mtu uint16) {
|
||||||
phony.Block(c.router, func() {
|
phony.Block(&c.router, func() {
|
||||||
|
if c.router.sessions.myMaximumMTU != mtu {
|
||||||
c.router.sessions.myMaximumMTU = mtu
|
c.router.sessions.myMaximumMTU = mtu
|
||||||
|
c.router.sessions.reconfigure()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,10 +55,6 @@ type sessionInfo struct {
|
|||||||
callbacks []chan func() // Finished work from crypto workers
|
callbacks []chan func() // Finished work from crypto workers
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sinfo *sessionInfo) reconfigure() {
|
|
||||||
// This is where reconfiguration would go, if we had anything to do
|
|
||||||
}
|
|
||||||
|
|
||||||
// Represents a session ping/pong packet, andincludes information like public keys, a session handle, coords, a timestamp to prevent replays, and the tun/tap MTU.
|
// Represents a session ping/pong packet, andincludes information like public keys, a session handle, coords, a timestamp to prevent replays, and the tun/tap MTU.
|
||||||
type sessionPing struct {
|
type sessionPing struct {
|
||||||
SendPermPub crypto.BoxPubKey // Sender's permanent key
|
SendPermPub crypto.BoxPubKey // Sender's permanent key
|
||||||
@ -138,9 +134,12 @@ func (ss *sessions) init(r *router) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ss *sessions) reconfigure() {
|
func (ss *sessions) reconfigure() {
|
||||||
|
ss.router.Act(nil, func() {
|
||||||
for _, session := range ss.sinfos {
|
for _, session := range ss.sinfos {
|
||||||
session.reconfigure()
|
session.myMTU = ss.myMaximumMTU
|
||||||
|
session.ping(ss.router)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines whether the session with a given publickey is allowed based on
|
// Determines whether the session with a given publickey is allowed based on
|
||||||
|
Loading…
Reference in New Issue
Block a user