mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	Give nodeconfig to tun
This commit is contained in:
		
							parent
							
								
									738a9da796
								
							
						
					
					
						commit
						aed3c7e784
					
				
					 3 changed files with 39 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -3,9 +3,10 @@ package yggdrasil
 | 
			
		|||
// Defines the minimum required struct members for an adapter type (this is
 | 
			
		||||
// now the base type for tunAdapter in tun.go)
 | 
			
		||||
type Adapter struct {
 | 
			
		||||
	core *Core
 | 
			
		||||
	send chan<- []byte
 | 
			
		||||
	recv <-chan []byte
 | 
			
		||||
	core        *Core
 | 
			
		||||
	send        chan<- []byte
 | 
			
		||||
	recv        <-chan []byte
 | 
			
		||||
	reconfigure chan chan error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Initialises the adapter.
 | 
			
		||||
| 
						 | 
				
			
			@ -13,4 +14,5 @@ func (adapter *Adapter) init(core *Core, send chan<- []byte, recv <-chan []byte)
 | 
			
		|||
	adapter.core = core
 | 
			
		||||
	adapter.send = send
 | 
			
		||||
	adapter.recv = recv
 | 
			
		||||
	adapter.reconfigure = make(chan chan error, 1)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ package yggdrasil
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net"
 | 
			
		||||
| 
						 | 
				
			
			@ -110,12 +109,13 @@ func (c *Core) UpdateConfig(config *config.NodeConfig) {
 | 
			
		|||
 | 
			
		||||
	components := []chan chan error{
 | 
			
		||||
		c.admin.reconfigure,
 | 
			
		||||
		//c.searches.reconfigure,
 | 
			
		||||
		//c.dht.reconfigure,
 | 
			
		||||
		//c.sessions.reconfigure,
 | 
			
		||||
		//c.peers.reconfigure,
 | 
			
		||||
		//c.router.reconfigure,
 | 
			
		||||
		//c.switchTable.reconfigure,
 | 
			
		||||
		c.searches.reconfigure,
 | 
			
		||||
		c.dht.reconfigure,
 | 
			
		||||
		c.sessions.reconfigure,
 | 
			
		||||
		c.peers.reconfigure,
 | 
			
		||||
		c.router.reconfigure,
 | 
			
		||||
		c.router.tun.reconfigure,
 | 
			
		||||
		c.switchTable.reconfigure,
 | 
			
		||||
		c.tcp.reconfigure,
 | 
			
		||||
		c.multicast.reconfigure,
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -240,8 +240,7 @@ func (c *Core) Start(nc *config.NodeConfig, log *log.Logger) error {
 | 
			
		|||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ip := net.IP(c.router.addr[:]).String()
 | 
			
		||||
	if err := c.router.tun.start(nc.IfName, nc.IfTAPMode, fmt.Sprintf("%s/%d", ip, 8*len(address.GetPrefix())-1), nc.IfMTU); err != nil {
 | 
			
		||||
	if err := c.router.tun.start(); err != nil {
 | 
			
		||||
		c.log.Println("Failed to start TUN/TAP")
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,8 @@ package yggdrasil
 | 
			
		|||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,11 +44,34 @@ func getSupportedMTU(mtu int) int {
 | 
			
		|||
func (tun *tunAdapter) init(core *Core, send chan<- []byte, recv <-chan []byte) {
 | 
			
		||||
	tun.Adapter.init(core, send, recv)
 | 
			
		||||
	tun.icmpv6.init(tun)
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			select {
 | 
			
		||||
			case e := <-tun.reconfigure:
 | 
			
		||||
				tun.core.configMutex.RLock()
 | 
			
		||||
				updated := tun.core.config.IfName != tun.core.configOld.IfName ||
 | 
			
		||||
					tun.core.config.IfTAPMode != tun.core.configOld.IfTAPMode ||
 | 
			
		||||
					tun.core.config.IfMTU != tun.core.configOld.IfMTU
 | 
			
		||||
				tun.core.configMutex.RUnlock()
 | 
			
		||||
				if updated {
 | 
			
		||||
					e <- nil
 | 
			
		||||
				} else {
 | 
			
		||||
					e <- nil
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Starts the setup process for the TUN/TAP adapter, and if successful, starts
 | 
			
		||||
// the read/write goroutines to handle packets on that interface.
 | 
			
		||||
func (tun *tunAdapter) start(ifname string, iftapmode bool, addr string, mtu int) error {
 | 
			
		||||
func (tun *tunAdapter) start() error {
 | 
			
		||||
	tun.core.configMutex.RLock()
 | 
			
		||||
	ifname := tun.core.config.IfName
 | 
			
		||||
	iftapmode := tun.core.config.IfTAPMode
 | 
			
		||||
	addr := fmt.Sprintf("%s/%d", net.IP(tun.core.router.addr[:]).String(), 8*len(address.GetPrefix())-1)
 | 
			
		||||
	mtu := tun.core.config.IfMTU
 | 
			
		||||
	tun.core.configMutex.RUnlock()
 | 
			
		||||
	if ifname != "none" {
 | 
			
		||||
		if err := tun.setup(ifname, iftapmode, addr, mtu); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue