2016-04-21 14:20:01 -04:00
|
|
|
package netutils
|
2016-03-04 17:13:12 -05:00
|
|
|
|
|
|
|
// Solaris: TODO
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
2016-04-21 14:20:01 -04:00
|
|
|
|
|
|
|
"github.com/docker/libnetwork/ipamutils"
|
2016-03-04 17:13:12 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
// ElectInterfaceAddresses looks for an interface on the OS with the specified name
|
|
|
|
// and returns its IPv4 and IPv6 addresses in CIDR form. If the interface does not exist,
|
|
|
|
// it chooses from a predifined list the first IPv4 address which does not conflict
|
|
|
|
// with other interfaces on the system.
|
|
|
|
func ElectInterfaceAddresses(name string) (*net.IPNet, []*net.IPNet, error) {
|
|
|
|
var (
|
|
|
|
v4Net *net.IPNet
|
|
|
|
err error
|
|
|
|
)
|
|
|
|
|
2016-04-21 14:20:01 -04:00
|
|
|
v4Net, err = FindAvailableNetwork(ipamutils.PredefinedBroadNetworks)
|
2016-03-04 17:13:12 -05:00
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
return v4Net, nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// FindAvailableNetwork returns a network from the passed list which does not
|
|
|
|
// overlap with existing interfaces in the system
|
|
|
|
func FindAvailableNetwork(list []*net.IPNet) (*net.IPNet, error) {
|
|
|
|
return list[0], nil
|
|
|
|
}
|