package daemon import ( "context" "fmt" "isle/bootstrap" "isle/dnsmasq" "path/filepath" "sort" "code.betamike.com/micropelago/pmux/pmuxlib" "dev.mediocregopher.com/mediocre-go-lib.git/mlog" ) func dnsmasqPmuxProcConfig( logger *mlog.Logger, runtimeDirPath, binDirPath string, hostBootstrap bootstrap.Bootstrap, daemonConfig Config, ) ( pmuxlib.ProcessConfig, error, ) { confPath := filepath.Join(runtimeDirPath, "dnsmasq.conf") hostsSlice := make([]dnsmasq.ConfDataHost, 0, len(hostBootstrap.Hosts)) for _, host := range hostBootstrap.Hosts { hostsSlice = append(hostsSlice, dnsmasq.ConfDataHost{ Name: string(host.Name), IP: host.IP().String(), }) } sort.Slice(hostsSlice, func(i, j int) bool { return hostsSlice[i].IP < hostsSlice[j].IP }) confData := dnsmasq.ConfData{ Resolvers: daemonConfig.DNS.Resolvers, Domain: hostBootstrap.NetworkCreationParams.Domain, IP: hostBootstrap.ThisHost().IP().String(), Hosts: hostsSlice, } if err := dnsmasq.WriteConfFile(confPath, confData); err != nil { return pmuxlib.ProcessConfig{}, fmt.Errorf("writing dnsmasq.conf to %q: %w", confPath, err) } return pmuxlib.ProcessConfig{ Cmd: filepath.Join(binDirPath, "dnsmasq"), Args: []string{"-d", "-C", confPath}, StartAfterFunc: func(ctx context.Context) error { return waitForNebula(ctx, logger, hostBootstrap) }, }, nil }