From 1c799b305da6af949a0300a9466af83339417047 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 4 Jan 2018 13:31:48 +0000 Subject: [PATCH] Add support for specifying tun device name --- src/yggdrasil/debug.go | 8 ++++---- src/yggdrasil/tun.go | 6 ++++-- yggdrasil.go | 6 ++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/yggdrasil/debug.go b/src/yggdrasil/debug.go index f6410b46..2ead581e 100644 --- a/src/yggdrasil/debug.go +++ b/src/yggdrasil/debug.go @@ -196,14 +196,14 @@ func (c *Core) DEBUG_getAddr() *address { return address_addrForNodeID(&c.dht.nodeID) } -func (c *Core) DEBUG_startTun() { - c.DEBUG_startTunWithMTU(1280) +func (c *Core) DEBUG_startTun(ifname string) { + c.DEBUG_startTunWithMTU(ifname, 1280) } -func (c *Core) DEBUG_startTunWithMTU(mtu int) { +func (c *Core) DEBUG_startTunWithMTU(ifname string, mtu int) { addr := c.DEBUG_getAddr() straddr := fmt.Sprintf("%s/%v", net.IP(addr[:]).String(), 8*len(address_prefix)) - err := c.tun.setup(straddr, mtu) + err := c.tun.setup(ifname, straddr, mtu) if err != nil { panic(err) } go c.tun.read() go c.tun.write() diff --git a/src/yggdrasil/tun.go b/src/yggdrasil/tun.go index c3ae4fe6..95a81017 100644 --- a/src/yggdrasil/tun.go +++ b/src/yggdrasil/tun.go @@ -18,8 +18,10 @@ func (tun *tunDevice) init(core *Core) { tun.core = core } -func (tun *tunDevice) setup(addr string, mtu int) error { - iface, err := water.New(water.Config{ DeviceType: water.TUN }) +func (tun *tunDevice) setup(ifname string, addr string, mtu int) error { + config := water.Config{ DeviceType: water.TUN } + if ifname != "" && ifname != "auto" { config.Name = ifname } + iface, err := water.New(config) if err != nil { panic(err) } tun.iface = iface tun.mtu = mtu //1280 // Lets default to the smallest thing allowed for now diff --git a/yggdrasil.go b/yggdrasil.go index aa8e53c6..21cd08d5 100644 --- a/yggdrasil.go +++ b/yggdrasil.go @@ -35,6 +35,7 @@ type nodeConfig struct { SigPub string SigPriv string Multicast bool + IfName string } type node struct { @@ -80,6 +81,7 @@ func generateConfig() *nodeConfig { cfg.SigPriv = hex.EncodeToString(spriv[:]) cfg.Peers = []string{} cfg.Multicast = true + cfg.IfName = "auto" return &cfg } @@ -182,8 +184,8 @@ func main() { n := node{} n.init(cfg, logger) logger.Println("Starting tun...") - n.core.DEBUG_startTun() // 1280, the smallest supported MTU - //n.core.DEBUG_startTunWithMTU(65535) // Largest supported MTU + n.core.DEBUG_startTun(cfg.IfName) // 1280, the smallest supported MTU + //n.core.DEBUG_startTunWithMTU(cfg.IfName, 65535) // Largest supported MTU defer func() { logger.Println("Closing...") n.core.DEBUG_stopTun()