mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2024-12-24 16:57:53 +00:00
New detail in getMulticastInterfaces
admin endpoint
This commit is contained in:
parent
d3b4de46ea
commit
7790a19e4c
@ -281,9 +281,21 @@ func run() int {
|
||||
if err := json.Unmarshal(recv.Response, &resp); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
table.SetHeader([]string{"Interface"})
|
||||
fmtBool := func(b bool) string {
|
||||
if b {
|
||||
return "Yes"
|
||||
}
|
||||
return "-"
|
||||
}
|
||||
table.SetHeader([]string{"Name", "Listen Address", "Beacon", "Listen", "Password"})
|
||||
for _, p := range resp.Interfaces {
|
||||
table.Append([]string{p})
|
||||
table.Append([]string{
|
||||
p.Name,
|
||||
p.Address,
|
||||
fmtBool(p.Beacon),
|
||||
fmtBool(p.Listen),
|
||||
fmtBool(p.Password),
|
||||
})
|
||||
}
|
||||
table.Render()
|
||||
|
||||
|
@ -8,7 +8,7 @@ package config
|
||||
func getDefaults() platformDefaultParameters {
|
||||
return platformDefaultParameters{
|
||||
// Admin
|
||||
DefaultAdminListen: "tcp://localhost:9001",
|
||||
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||
|
||||
// Configuration (used for yggdrasilctl)
|
||||
DefaultConfigFile: "/etc/yggdrasil.conf",
|
||||
|
@ -2,20 +2,47 @@ package multicast
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/Arceliar/phony"
|
||||
"github.com/yggdrasil-network/yggdrasil-go/src/admin"
|
||||
)
|
||||
|
||||
type GetMulticastInterfacesRequest struct{}
|
||||
type GetMulticastInterfacesResponse struct {
|
||||
Interfaces []string `json:"multicast_interfaces"`
|
||||
Interfaces []MulticastInterfaceState `json:"multicast_interfaces"`
|
||||
}
|
||||
|
||||
type MulticastInterfaceState struct {
|
||||
Name string `json:"name"`
|
||||
Address string `json:"address"`
|
||||
Beacon bool `json:"beacon"`
|
||||
Listen bool `json:"listen"`
|
||||
Password bool `json:"password"`
|
||||
}
|
||||
|
||||
func (m *Multicast) getMulticastInterfacesHandler(_ *GetMulticastInterfacesRequest, res *GetMulticastInterfacesResponse) error {
|
||||
res.Interfaces = []string{}
|
||||
for _, v := range m.Interfaces() {
|
||||
res.Interfaces = append(res.Interfaces, v.Name)
|
||||
}
|
||||
res.Interfaces = []MulticastInterfaceState{}
|
||||
phony.Block(m, func() {
|
||||
for name, intf := range m._interfaces {
|
||||
is := MulticastInterfaceState{
|
||||
Name: intf.iface.Name,
|
||||
Beacon: intf.beacon,
|
||||
Listen: intf.listen,
|
||||
Password: len(intf.password) > 0,
|
||||
}
|
||||
if li := m._listeners[name]; li != nil && li.listener != nil {
|
||||
is.Address = li.listener.Addr().String()
|
||||
} else {
|
||||
is.Address = "-"
|
||||
}
|
||||
res.Interfaces = append(res.Interfaces, is)
|
||||
}
|
||||
})
|
||||
slices.SortStableFunc(res.Interfaces, func(a, b MulticastInterfaceState) int {
|
||||
return strings.Compare(a.Name, b.Name)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -156,7 +156,13 @@ func (m *Multicast) _updateInterfaces() {
|
||||
delete(interfaces, name)
|
||||
continue
|
||||
}
|
||||
info.addrs = addrs
|
||||
for _, addr := range addrs {
|
||||
addrIP, _, err := net.ParseCIDR(addr.String())
|
||||
if err != nil || addrIP.To4() != nil || !addrIP.IsLinkLocalUnicast() {
|
||||
continue
|
||||
}
|
||||
info.addrs = append(info.addrs, addr)
|
||||
}
|
||||
interfaces[name] = info
|
||||
m.log.Debugf("Discovered addresses for interface %s: %s", name, addrs)
|
||||
}
|
||||
@ -299,13 +305,9 @@ func (m *Multicast) _announce() {
|
||||
for _, info := range m._interfaces {
|
||||
iface := info.iface
|
||||
for _, addr := range info.addrs {
|
||||
addrIP, _, _ := net.ParseCIDR(addr.String())
|
||||
// Ignore IPv4 addresses
|
||||
if addrIP.To4() != nil {
|
||||
continue
|
||||
}
|
||||
// Ignore non-link-local addresses
|
||||
if !addrIP.IsLinkLocalUnicast() {
|
||||
addrIP, _, err := net.ParseCIDR(addr.String())
|
||||
// Ignore IPv4 addresses or non-link-local addresses
|
||||
if err != nil || addrIP.To4() != nil || !addrIP.IsLinkLocalUnicast() {
|
||||
continue
|
||||
}
|
||||
if info.listen {
|
||||
|
Loading…
x
Reference in New Issue
Block a user