diff --git a/src/yggdrasil/debug.go b/src/yggdrasil/debug.go index a86f222..40cc5c4 100644 --- a/src/yggdrasil/debug.go +++ b/src/yggdrasil/debug.go @@ -284,9 +284,10 @@ func (c *Core) DEBUG_init(bpub []byte, //////////////////////////////////////////////////////////////////////////////// func (c *Core) DEBUG_setupAndStartGlobalUDPInterface(addrport string) { - iface := udpInterface{} - iface.init(c, addrport) - c.udp = &iface + if err := c.udp.init(c, addrport); err != nil { + c.log.Println("Failed to start UDP interface:", err) + panic(err) + } } func (c *Core) DEBUG_getGlobalUDPAddr() *net.UDPAddr { @@ -337,9 +338,10 @@ func (c *Core) DEBUG_addSOCKSConn(socksaddr, peeraddr string) { //* func (c *Core) DEBUG_setupAndStartGlobalTCPInterface(addrport string) { - iface := tcpInterface{} - iface.init(c, addrport) - c.tcp = &iface + if err := c.tcp.init(c, addrport); err != nil { + c.log.Println("Failed to start TCP interface:", err) + panic(err) + } } func (c *Core) DEBUG_getGlobalTCPAddr() *net.TCPAddr { diff --git a/src/yggdrasil/udp.go b/src/yggdrasil/udp.go index 81f5d38..02fb9d6 100644 --- a/src/yggdrasil/udp.go +++ b/src/yggdrasil/udp.go @@ -65,18 +65,19 @@ type udpKeys struct { sig sigPubKey } -func (iface *udpInterface) init(core *Core, addr string) { +func (iface *udpInterface) init(core *Core, addr string) (err error) { iface.core = core udpAddr, err := net.ResolveUDPAddr("udp", addr) if err != nil { - panic(err) + return } iface.sock, err = net.ListenUDP("udp", udpAddr) if err != nil { - panic(err) + return } iface.conns = make(map[connAddr]*connInfo) go iface.reader() + return } func (iface *udpInterface) sendKeys(addr connAddr) { diff --git a/yggdrasil.go b/yggdrasil.go index f85fd3c..91403bb 100644 --- a/yggdrasil.go +++ b/yggdrasil.go @@ -1,5 +1,6 @@ package main +import "encoding/json" import "encoding/hex" import "flag" import "fmt" @@ -91,11 +92,9 @@ func generateConfig(isAutoconf bool) *nodeConfig { cfg := nodeConfig{} if isAutoconf { cfg.Listen = "[::]:0" - cfg.MulticastInterfaces = []string{".*"} } else { r1 := rand.New(rand.NewSource(time.Now().UnixNano())) cfg.Listen = fmt.Sprintf("[::]:%d", r1.Intn(65534-32768)+32768) - cfg.MulticastInterfaces = []string{} } cfg.AdminListen = "[::1]:9001" cfg.EncryptionPublicKey = hex.EncodeToString(bpub[:]) @@ -104,6 +103,7 @@ func generateConfig(isAutoconf bool) *nodeConfig { cfg.SigningPrivateKey = hex.EncodeToString(spriv[:]) cfg.Peers = []string{} cfg.AllowedEncryptionPublicKeys = []string{} + cfg.MulticastInterfaces = []string{".*"} cfg.IfName = core.DEBUG_GetTUNDefaultIfName() cfg.IfMTU = core.DEBUG_GetTUNDefaultIfMTU() cfg.IfTAPMode = core.DEBUG_GetTUNDefaultIfTAPMode() @@ -113,7 +113,6 @@ func generateConfig(isAutoconf bool) *nodeConfig { func doGenconf() string { cfg := generateConfig(false) - cfg.MulticastInterfaces = append(cfg.MulticastInterfaces, ".*") bs, err := hjson.Marshal(cfg) if err != nil { panic(err) @@ -150,6 +149,11 @@ func main() { if err := hjson.Unmarshal(config, &dat); err != nil { panic(err) } + confJson, err := json.Marshal(dat) + if err != nil { + panic(err) + } + json.Unmarshal(confJson, &cfg) // For now we will do a little bit to help the user adjust their // configuration to match the new configuration format changes := map[string]string{