func()

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
}