mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-22 20:00:27 +00:00
Make multicasting use config instead of ifceExpr in Core
This commit is contained in:
parent
9e486ed4fe
commit
f6b663c257
@ -9,7 +9,6 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@ -221,15 +220,6 @@ func main() {
|
|||||||
// Setup the Yggdrasil node itself. The node{} type includes a Core, so we
|
// Setup the Yggdrasil node itself. The node{} type includes a Core, so we
|
||||||
// don't need to create this manually.
|
// don't need to create this manually.
|
||||||
n := node{}
|
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
|
// Now that we have a working configuration, we can now actually start
|
||||||
// Yggdrasil. This will start the router, switch, DHT node, TCP and UDP
|
// Yggdrasil. This will start the router, switch, DHT node, TCP and UDP
|
||||||
// sockets, TUN/TAP adapter and multicast discovery port.
|
// sockets, TUN/TAP adapter and multicast discovery port.
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"regexp"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -47,7 +46,6 @@ type Core struct {
|
|||||||
tcp tcpInterface
|
tcp tcpInterface
|
||||||
awdl awdl
|
awdl awdl
|
||||||
log *log.Logger
|
log *log.Logger
|
||||||
ifceExpr []*regexp.Regexp // the zone of link-local IPv6 peers must match this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) init() error {
|
func (c *Core) init() error {
|
||||||
@ -313,13 +311,6 @@ func (c *Core) AddPeer(addr string, sintf string) error {
|
|||||||
return c.admin.addPeer(addr, sintf)
|
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
|
// Adds an allowed public key. This allow peerings to be restricted only to
|
||||||
// keys that you have selected.
|
// keys that you have selected.
|
||||||
func (c *Core) AddAllowedEncryptionPublicKey(boxStr string) error {
|
func (c *Core) AddAllowedEncryptionPublicKey(boxStr string) error {
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"regexp"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -35,15 +36,13 @@ func (m *multicast) init(core *Core) {
|
|||||||
}()
|
}()
|
||||||
m.groupAddr = "[ff02::114]:9001"
|
m.groupAddr = "[ff02::114]:9001"
|
||||||
// Check if we've been given any expressions
|
// Check if we've been given any expressions
|
||||||
if len(m.core.ifceExpr) == 0 {
|
if count := len(m.interfaces()); count != 0 {
|
||||||
return
|
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 {
|
func (m *multicast) start() error {
|
||||||
if len(m.core.ifceExpr) == 0 {
|
if len(m.interfaces()) == 0 {
|
||||||
m.core.log.Println("Multicast discovery is disabled")
|
m.core.log.Println("Multicast discovery is disabled")
|
||||||
} else {
|
} else {
|
||||||
m.core.log.Println("Multicast discovery is enabled")
|
m.core.log.Println("Multicast discovery is enabled")
|
||||||
@ -71,6 +70,10 @@ func (m *multicast) start() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *multicast) interfaces() []net.Interface {
|
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
|
// Ask the system for network interfaces
|
||||||
var interfaces []net.Interface
|
var interfaces []net.Interface
|
||||||
allifaces, err := net.Interfaces()
|
allifaces, err := net.Interfaces()
|
||||||
@ -91,8 +94,12 @@ func (m *multicast) interfaces() []net.Interface {
|
|||||||
// Ignore point-to-point interfaces
|
// Ignore point-to-point interfaces
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for _, expr := range m.core.ifceExpr {
|
for _, expr := range exprs {
|
||||||
if expr.MatchString(iface.Name) {
|
e, err := regexp.Compile(expr)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if e.MatchString(iface.Name) {
|
||||||
interfaces = append(interfaces, iface)
|
interfaces = append(interfaces, iface)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user