blob: 2854b1a7bee8868b875f699a15ce1422283b62b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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")
}
|