mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-30 07:05:06 +03:00
Track addresses
This commit is contained in:
parent
153a7a5768
commit
6995b989e3
1 changed files with 43 additions and 9 deletions
|
@ -35,6 +35,9 @@ func (m *Multicast) _multicastStarted() {
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer fmt.Println("No longer listening for netlink changes")
|
defer fmt.Println("No longer listening for netlink changes")
|
||||||
|
|
||||||
|
indexToIntf := map[int]string{}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
current := m.config.GetCurrent()
|
current := m.config.GetCurrent()
|
||||||
exprs := current.MulticastInterfaces
|
exprs := current.MulticastInterfaces
|
||||||
|
@ -61,18 +64,24 @@ func (m *Multicast) _multicastStarted() {
|
||||||
add = add && match
|
add = add && match
|
||||||
|
|
||||||
if add {
|
if add {
|
||||||
|
indexToIntf[attrs.Index] = attrs.Name
|
||||||
m.Act(nil, func() {
|
m.Act(nil, func() {
|
||||||
|
iface, err := net.InterfaceByIndex(attrs.Index)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
fmt.Println("Link added:", attrs.Name)
|
fmt.Println("Link added:", attrs.Name)
|
||||||
if iface, err := net.InterfaceByName(attrs.Name); err == nil {
|
if info, ok := m._interfaces[attrs.Name]; ok {
|
||||||
if addrs, err := iface.Addrs(); err == nil {
|
info.iface = *iface
|
||||||
m._interfaces[attrs.Name] = interfaceInfo{
|
m._interfaces[attrs.Name] = info
|
||||||
iface: *iface,
|
} else {
|
||||||
addrs: addrs,
|
m._interfaces[attrs.Name] = interfaceInfo{
|
||||||
}
|
iface: *iface,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
delete(indexToIntf, attrs.Index)
|
||||||
m.Act(nil, func() {
|
m.Act(nil, func() {
|
||||||
fmt.Println("Link removed:", attrs.Name)
|
fmt.Println("Link removed:", attrs.Name)
|
||||||
delete(m._interfaces, attrs.Name)
|
delete(m._interfaces, attrs.Name)
|
||||||
|
@ -80,9 +89,34 @@ func (m *Multicast) _multicastStarted() {
|
||||||
}
|
}
|
||||||
|
|
||||||
case change := <-addrChanges:
|
case change := <-addrChanges:
|
||||||
m.Act(nil, func() {
|
name, ok := indexToIntf[change.LinkIndex]
|
||||||
fmt.Println("Addr changed:", change)
|
if !ok {
|
||||||
})
|
return
|
||||||
|
}
|
||||||
|
add := true
|
||||||
|
add = add && change.NewAddr
|
||||||
|
add = add && change.LinkAddress.IP.IsLinkLocalUnicast()
|
||||||
|
|
||||||
|
if add {
|
||||||
|
m.Act(nil, func() {
|
||||||
|
fmt.Println("Addr added:", change)
|
||||||
|
if info, ok := m._interfaces[name]; ok {
|
||||||
|
info.addrs = append(info.addrs, &net.IPAddr{
|
||||||
|
IP: change.LinkAddress.IP,
|
||||||
|
Zone: name,
|
||||||
|
})
|
||||||
|
m._interfaces[name] = info
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
m.Act(nil, func() {
|
||||||
|
fmt.Println("Addr removed:", change)
|
||||||
|
if info, ok := m._interfaces[name]; ok {
|
||||||
|
info.addrs = nil
|
||||||
|
m._interfaces[name] = info
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
case <-linkClose:
|
case <-linkClose:
|
||||||
return
|
return
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue