mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-03 18:55:08 +03:00 
			
		
		
		
	Further updates, notify sessions about updated MTU from API call
This commit is contained in:
		
							parent
							
								
									d1c445dc41
								
							
						
					
					
						commit
						7c18c6806d
					
				
					 3 changed files with 22 additions and 13 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue