From c694efade53896970137ca1ccfa2fa8adf2000c2 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 23 Jan 2026 16:28:41 -0800 Subject: [PATCH] fix dante discovery bugs: filter .in-addr names, dedupe multicast flows, fix unicast channel numbers --- dante_control.go | 6 ++++-- mdns.go | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dante_control.go b/dante_control.go index c20360d..3872727 100644 --- a/dante_control.go +++ b/dante_control.go @@ -410,7 +410,7 @@ func (t *Tendrils) queryDanteSubscriptions(conn *net.UDPConn, ip net.IP, rxCount break } - rxChannelNum := int(binary.BigEndian.Uint16(resp[recordOffset : recordOffset+2])) + rxChannelNum := idx + 1 txChannelOffset := int(binary.BigEndian.Uint16(resp[recordOffset+4 : recordOffset+6])) txDeviceOffset := int(binary.BigEndian.Uint16(resp[recordOffset+6 : recordOffset+8])) @@ -468,6 +468,7 @@ func (t *Tendrils) probeDanteDeviceWithPort(ip net.IP, port int) { t.nodes.Update(nil, nil, []net.IP{ip}, "", info.Name, "dante-control") } + needIGMPFallback := info.HasMulticast && info.Name != "" for _, sub := range info.Subscriptions { if t.DebugDante { log.Printf("[dante] %s: subscription rx=%d -> %s@%s", @@ -479,10 +480,11 @@ func (t *Tendrils) probeDanteDeviceWithPort(ip net.IP, port int) { channelInfo = fmt.Sprintf("%s->%d", sub.TxChannelName, sub.RxChannel) } t.danteFlows.Update(sub.TxDeviceName, info.Name, channelInfo) + needIGMPFallback = false } } - if info.HasMulticast && info.Name != "" { + if needIGMPFallback { groups := t.nodes.GetDanteMulticastGroups(ip) for _, groupIP := range groups { sourceName := t.nodes.GetDanteTxDeviceInGroup(groupIP) diff --git a/mdns.go b/mdns.go index 4b6d319..d57a372 100644 --- a/mdns.go +++ b/mdns.go @@ -28,6 +28,9 @@ func extractDanteName(s string) string { if at := strings.LastIndex(name, "@"); at >= 0 { name = name[at+1:] } + if strings.Contains(name, ".in-addr") { + return "" + } return name }