in dp_check/dp_check.go [228:260]
func findLocalAddress(ipMatches func(net.IP) bool, ifaceFilter func(iface net.Interface) error) (*net.Interface, error) {
infoLog.Println("Check local addresses by iterating over all ip addresses from interfaces returned by: |net.Interfaces()|")
ifaces, err := net.Interfaces()
if err != nil {
return nil, err
}
var match net.Interface
foundMatch := false
for _, iface := range ifaces {
if err := ifaceFilter(iface); err != nil {
infoLog.Printf("Not checking interface: |Name: %s, hardware address: %s, flags: %s| because: %v", iface.Name, iface.HardwareAddr, iface.Flags, err)
continue
}
infoLog.Printf("Checking up network interface: |Name: %s, hardware address: %s, flags: %s|", iface.Name, iface.HardwareAddr, iface.Flags)
ifaddrs, err := iface.Addrs()
if err != nil {
return nil, err
}
for _, ifaddr := range ifaddrs {
ip := ifaddr.(*net.IPNet).IP
infoLog.Printf("Found ip address |%s| when checking network interface |%s|", ip.String(), iface.Name)
if ipMatches(ip) {
match = iface
foundMatch = true
}
}
}
if !foundMatch {
return nil, fmt.Errorf("failed to find matching address")
}
infoLog.Printf("Found the valid directpath network interface %s with hardware address |%s| and flags %s", match.Name, match.HardwareAddr, match.Flags)
return &match, nil
}