package soundbox import ( "fmt" "net" ) // getInterface is a function guessing which interface should be used for // soundbox streaming. This is required since soundbox relies on communication // via IPv6 link-local addresses which require a specified interface to allow // communication. This function returns the first interface it finds which is // up and has a link-local address assigned. func getInterface() (net.Interface, error) { all, err := net.Interfaces() if err != nil { return net.Interface{}, err } for _, iface := range all { if iface.Flags&net.FlagUp == 0 { continue } addresses, err := iface.Addrs() if err != nil { return net.Interface{}, err } for _, addr := range addresses { ip, _, err := net.ParseCIDR(addr.String()) if err != nil { return net.Interface{}, err } if ip.IsLinkLocalUnicast() { return iface, nil } } } return net.Interface{}, fmt.Errorf("No interface found for soundbox streaming") }