14
// +300 for IPv4 addresses
15
// +100 for non-local addresses, extra +100 for "up" interaces.
16
>
func scoreAddr(iface net.Interface, addr net.Addr) (int, net.IP) {
localip.go
17
>
var ip net.IP
18
>
if netAddr, ok := addr.(*net.IPNet); ok {
19
>
ip = netAddr.IP
20
>
} else if netIP, ok := addr.(*net.IPAddr); ok {
21
>
ip = netIP.IP
22
>
} else {
23
>
return -1, nil
24
>
}
25
27
>
if ip.To4() != nil {
28
>
score += 300
29
>
}
30
>
if iface.Flags&net.FlagLoopback == 0 && !ip.IsLoopback() {
31
>
score += 100
32
>
if iface.Flags&net.FlagUp != 0 {
33
>
score += 100
34
>
}
35
}
37
}
38