Make multicasting use config instead of ifceExpr in Core

This commit is contained in:
Neil Alexander 2019-01-14 19:27:13 +00:00
parent 9e486ed4fe
commit f6b663c257
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944
3 changed files with 14 additions and 26 deletions

View File

@ -9,7 +9,6 @@ import (
"log"
"os"
"os/signal"
"regexp"
"strings"
"syscall"
@ -221,15 +220,6 @@ func main() {
// Setup the Yggdrasil node itself. The node{} type includes a Core, so we
// don't need to create this manually.
n := node{}
// Check to see if any multicast interface expressions were provided in the
// config. If they were then set them now.
for _, ll := range cfg.MulticastInterfaces {
ifceExpr, err := regexp.Compile(ll)
if err != nil {
panic(err)
}
n.core.AddMulticastInterfaceExpr(ifceExpr)
}
// Now that we have a working configuration, we can now actually start
// Yggdrasil. This will start the router, switch, DHT node, TCP and UDP
// sockets, TUN/TAP adapter and multicast discovery port.

View File

@ -5,7 +5,6 @@ import (
"io/ioutil"
"log"
"net"
"regexp"
"sync"
"time"
@ -47,7 +46,6 @@ type Core struct {
tcp tcpInterface
awdl awdl
log *log.Logger
ifceExpr []*regexp.Regexp // the zone of link-local IPv6 peers must match this
}
func (c *Core) init() error {
@ -313,13 +311,6 @@ func (c *Core) AddPeer(addr string, sintf string) error {
return c.admin.addPeer(addr, sintf)
}
// Adds an expression to select multicast interfaces for peer discovery. This
// should be done before calling Start. This function can be called multiple
// times to add multiple search expressions.
func (c *Core) AddMulticastInterfaceExpr(expr *regexp.Regexp) {
c.ifceExpr = append(c.ifceExpr, expr)
}
// Adds an allowed public key. This allow peerings to be restricted only to
// keys that you have selected.
func (c *Core) AddAllowedEncryptionPublicKey(boxStr string) error {

View File

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"net"
"regexp"
"sync"
"time"
@ -35,15 +36,13 @@ func (m *multicast) init(core *Core) {
}()
m.groupAddr = "[ff02::114]:9001"
// Check if we've been given any expressions
if len(m.core.ifceExpr) == 0 {
return
if count := len(m.interfaces()); count != 0 {
m.core.log.Println("Found", count, "multicast interface(s)")
}
// Ask the system for network interfaces
m.core.log.Println("Found", len(m.interfaces()), "multicast interface(s)")
}
func (m *multicast) start() error {
if len(m.core.ifceExpr) == 0 {
if len(m.interfaces()) == 0 {
m.core.log.Println("Multicast discovery is disabled")
} else {
m.core.log.Println("Multicast discovery is enabled")
@ -71,6 +70,10 @@ func (m *multicast) start() error {
}
func (m *multicast) interfaces() []net.Interface {
// Get interface expressions from config
m.core.configMutex.RLock()
exprs := m.core.config.MulticastInterfaces
m.core.configMutex.RUnlock()
// Ask the system for network interfaces
var interfaces []net.Interface
allifaces, err := net.Interfaces()
@ -91,8 +94,12 @@ func (m *multicast) interfaces() []net.Interface {
// Ignore point-to-point interfaces
continue
}
for _, expr := range m.core.ifceExpr {
if expr.MatchString(iface.Name) {
for _, expr := range exprs {
e, err := regexp.Compile(expr)
if err != nil {
panic(err)
}
if e.MatchString(iface.Name) {
interfaces = append(interfaces, iface)
}
}