in lib/filesourcer.go [78:135]
func (fs *FileSourcer) GetServersFromTier(path string) ([]*DHCPServer, error) {
inputFile, err := os.Open(path)
if err != nil {
return nil, err
}
defer inputFile.Close()
scanner := bufio.NewScanner(inputFile)
var servers []*DHCPServer
for scanner.Scan() {
var (
hostname string
port int64
)
line := scanner.Text()
h, p, err := net.SplitHostPort(line)
if err != nil {
hostname = line
if fs.version == 4 {
port = 67
} else {
port = 547
}
} else {
hostname = h
var errPort error
port, errPort = strconv.ParseInt(p, 10, 32)
if errPort != nil {
glog.Errorf("Can't convert port %s to int", p)
continue
}
}
ip := net.ParseIP(hostname)
if ip == nil {
ips, err := net.LookupHost(hostname)
if err != nil {
glog.Errorf("Can't resolve IPv4 for %s", hostname)
continue
}
for i := range ips {
addr := net.ParseIP(ips[i])
if addr != nil {
if fs.version == 4 && addr.To4() != nil {
ip = addr
break
}
if fs.version == 6 && addr.To16() != nil {
ip = addr
break
}
}
}
}
server := NewDHCPServer(hostname, ip, int(port))
servers = append(servers, server)
}
return servers, nil
}