Files
linuxkit/alpine/packages/mdnstool/mdnstool.go
2015-12-09 15:33:50 +00:00

58 lines
1.5 KiB
Go

package main
// CLI tool for mDNSmon. Monitors a network interface for IP changes and re-publishes the mDNS service
import (
"flag"
"log"
"net"
"os"
"syscall"
"mdnstool/mdnsmon"
)
func main() {
hostname := flag.String("hostname", "docker.local.", "Hostname - must be FQDN and end with .")
instance := flag.String("instance", "Moby", "Instance description")
port := flag.Int("port", 22, "Service port")
srv := flag.String("service", "_ssh._tcp", "SRV service type")
info := flag.String("info", "Moby", "TXT service description")
iface_name := flag.String("if", "eth0", "Network interface to bind multicast listener to. This interface will be monitored for IP changes.")
detach := flag.Bool("detach", false, "Detach from terminal")
flag.Parse()
// Deatch from terminal (based on code from 9pudc)
if *detach {
logFile, err := os.Create("/var/log/mdnstool.log")
if err != nil {
log.Fatalln("Failed to open log file", err)
}
log.SetOutput(logFile)
null, err := os.OpenFile("/dev/null", os.O_RDWR, 0)
if err != nil {
log.Fatalln("Failed to open /dev/null", err)
}
fd := null.Fd()
syscall.Dup2(int(fd), int(os.Stdin.Fd()))
syscall.Dup2(int(fd), int(os.Stdout.Fd()))
syscall.Dup2(int(fd), int(os.Stderr.Fd()))
}
iface, err := net.InterfaceByName(*iface_name)
if err != nil {
log.Fatal(err)
}
s, err := mdnsmon.NewServer(*hostname, *instance, *port, *srv, []string{*info}, iface)
if err != nil {
log.Fatal(err)
}
go s.Start()
defer s.Shutdown()
select {}
}