mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-30 07:05:06 +03:00
Tidy up somewhat
This commit is contained in:
parent
872a6d18e8
commit
5101205866
2 changed files with 35 additions and 24 deletions
|
@ -28,6 +28,7 @@ type Multicast struct {
|
|||
listeners map[string]*listenerInfo
|
||||
listenPort uint16
|
||||
isOpen bool
|
||||
stop chan struct{}
|
||||
_interfaces map[string]interfaceInfo
|
||||
}
|
||||
|
||||
|
@ -74,6 +75,7 @@ func (m *Multicast) _start() error {
|
|||
if len(m.config.GetCurrent().MulticastInterfaces) == 0 {
|
||||
return nil
|
||||
}
|
||||
m.stop = make(chan struct{})
|
||||
m.log.Infoln("Starting multicast module")
|
||||
addr, err := net.ResolveUDPAddr("udp", m.groupAddr)
|
||||
if err != nil {
|
||||
|
@ -121,6 +123,7 @@ func (m *Multicast) Stop() error {
|
|||
|
||||
func (m *Multicast) _stop() error {
|
||||
m.log.Infoln("Stopping multicast module")
|
||||
close(m.stop)
|
||||
m.isOpen = false
|
||||
if m.sock != nil {
|
||||
m.sock.Close()
|
||||
|
@ -158,8 +161,10 @@ func (m *Multicast) Interfaces() map[string]net.Interface {
|
|||
interfaces := make(map[string]net.Interface)
|
||||
phony.Block(m, func() {
|
||||
for _, info := range m._interfaces {
|
||||
if len(info.addrs) > 0 {
|
||||
interfaces[info.iface.Name] = info.iface
|
||||
}
|
||||
}
|
||||
})
|
||||
return interfaces
|
||||
}
|
||||
|
@ -188,7 +193,7 @@ func (m *Multicast) _announce() {
|
|||
}
|
||||
// If the interface is no longer visible on the system then stop the
|
||||
// listener, as another one will be started further down
|
||||
if _, ok := m._interfaces[name]; !ok {
|
||||
if intf, ok := m._interfaces[name]; !ok || len(intf.addrs) == 0 {
|
||||
stop()
|
||||
continue
|
||||
}
|
||||
|
@ -201,7 +206,7 @@ func (m *Multicast) _announce() {
|
|||
continue
|
||||
}
|
||||
// Find the interface that matches the listener
|
||||
if info, ok := m._interfaces[name]; ok {
|
||||
if info, ok := m._interfaces[name]; ok && len(info.addrs) > 0 {
|
||||
for _, addr := range info.addrs {
|
||||
if ip, _, err := net.ParseCIDR(addr.String()); err == nil {
|
||||
// Does the interface address match our listener address?
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
package multicast
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"regexp"
|
||||
"syscall"
|
||||
|
@ -21,7 +20,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
addrClose := make(chan struct{})
|
||||
|
||||
errorCallback := func(err error) {
|
||||
fmt.Println("Netlink error:", err)
|
||||
m.log.Warnln("Netlink error:", err)
|
||||
}
|
||||
|
||||
linkSubscribeOptions := netlink.LinkSubscribeOptions{
|
||||
|
@ -45,10 +44,10 @@ func (m *Multicast) _multicastStarted() {
|
|||
}
|
||||
}()
|
||||
|
||||
fmt.Println("Listening for netlink changes")
|
||||
m.log.Debugln("Listening for netlink interface changes")
|
||||
|
||||
go func() {
|
||||
defer fmt.Println("No longer listening for netlink changes")
|
||||
defer m.log.Debugln("No longer listening for netlink interface changes")
|
||||
|
||||
indexToIntf := map[int]string{}
|
||||
|
||||
|
@ -60,10 +59,11 @@ func (m *Multicast) _multicastStarted() {
|
|||
case change := <-linkChanges:
|
||||
attrs := change.Attrs()
|
||||
add := true
|
||||
add = add && attrs.Flags&net.FlagUp == 1
|
||||
//add = add && attrs.Flags&net.FlagMulticast == 1
|
||||
//add = add && attrs.Flags&net.FlagPointToPoint == 0
|
||||
add = add && attrs.Flags&net.FlagUp != 0
|
||||
add = add && attrs.Flags&net.FlagMulticast != 0
|
||||
add = add && attrs.Flags&net.FlagPointToPoint == 0
|
||||
|
||||
if add {
|
||||
match := false
|
||||
for _, expr := range exprs {
|
||||
e, err := regexp.Compile(expr)
|
||||
|
@ -76,6 +76,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
}
|
||||
}
|
||||
add = add && match
|
||||
}
|
||||
|
||||
if add {
|
||||
indexToIntf[attrs.Index] = attrs.Name
|
||||
|
@ -84,7 +85,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println("Link added:", attrs.Name)
|
||||
m.log.Debugln("Multicast on interface", attrs.Name, "enabled")
|
||||
if info, ok := m._interfaces[attrs.Name]; ok {
|
||||
info.iface = *iface
|
||||
m._interfaces[attrs.Name] = info
|
||||
|
@ -97,7 +98,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
} else {
|
||||
delete(indexToIntf, attrs.Index)
|
||||
m.Act(nil, func() {
|
||||
fmt.Println("Link removed:", attrs.Name)
|
||||
m.log.Debugln("Multicast on interface", attrs.Name, "disabled")
|
||||
delete(m._interfaces, attrs.Name)
|
||||
})
|
||||
}
|
||||
|
@ -113,7 +114,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
|
||||
if add {
|
||||
m.Act(nil, func() {
|
||||
fmt.Println("Addr added:", change)
|
||||
m.log.Debugln("Multicast address", change.LinkAddress.IP, "on", name, "enabled")
|
||||
if info, ok := m._interfaces[name]; ok {
|
||||
info.addrs = append(info.addrs, &net.IPAddr{
|
||||
IP: change.LinkAddress.IP,
|
||||
|
@ -124,7 +125,7 @@ func (m *Multicast) _multicastStarted() {
|
|||
})
|
||||
} else {
|
||||
m.Act(nil, func() {
|
||||
fmt.Println("Addr removed:", change)
|
||||
m.log.Debugln("Multicast address", change.LinkAddress.IP, "on", name, "disabled")
|
||||
if info, ok := m._interfaces[name]; ok {
|
||||
info.addrs = nil
|
||||
m._interfaces[name] = info
|
||||
|
@ -137,6 +138,11 @@ func (m *Multicast) _multicastStarted() {
|
|||
|
||||
case <-addrClose:
|
||||
return
|
||||
|
||||
case <-m.stop:
|
||||
close(linkClose)
|
||||
close(addrClose)
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue