Select IPv4-only from host interfaces

pull/6/head
Clayton Coleman 2015-05-04 14:44:58 -04:00
parent fbe3ec7513
commit 166021e765
1 changed files with 15 additions and 13 deletions

View File

@ -397,6 +397,7 @@ func chooseHostInterfaceNativeGo() (net.IP, error) {
return nil, err
}
i := 0
var ip net.IP
for i = range intfs {
if flagsSet(intfs[i].Flags, net.FlagUp) && flagsClear(intfs[i].Flags, net.FlagLoopback|net.FlagPointToPoint) {
addrs, err := intfs[i].Addrs()
@ -404,24 +405,25 @@ func chooseHostInterfaceNativeGo() (net.IP, error) {
return nil, err
}
if len(addrs) > 0 {
// This interface should suffice.
break
for _, addr := range addrs {
if addrIP, _, err := net.ParseCIDR(addr.String()); err == nil {
if addrIP.To4() != nil {
ip = addrIP.To4()
break
}
}
}
if ip != nil {
// This interface should suffice.
break
}
}
}
}
if i == len(intfs) {
return nil, err
if ip == nil {
return nil, fmt.Errorf("no acceptable interface from host")
}
glog.V(4).Infof("Choosing interface %s for from-host portals", intfs[i].Name)
addrs, err := intfs[i].Addrs()
if err != nil {
return nil, err
}
glog.V(4).Infof("Interface %s = %s", intfs[i].Name, addrs[0].String())
ip, _, err := net.ParseCIDR(addrs[0].String())
if err != nil {
return nil, err
}
return ip, nil
}