mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	Make multicasting use config instead of ifceExpr in Core
This commit is contained in:
		
							parent
							
								
									9e486ed4fe
								
							
						
					
					
						commit
						f6b663c257
					
				
					 3 changed files with 14 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue