func findLocalAddress()

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
}