diff --git a/cmd/diagd/diagd.go b/cmd/diagd/diagd.go new file mode 100644 index 0000000..e46c1b3 --- /dev/null +++ b/cmd/diagd/diagd.go @@ -0,0 +1,63 @@ +// Binary diagd provides automated network diagnostics. +package main + +import ( + "flag" + "fmt" + "html" + "io" + "log" + "net/http" + "sync" + + "router7/internal/diag" +) + +func dump(w io.Writer, re *diag.EvalResult) { + symbol := "āœ”" + if re.Error { + symbol = "āœ˜" + } + fmt.Fprintf(w, "
  • %s %s: %s
  • ") +} + +func logic() error { + const ( + uplink = "uplink0" /* enp0s31f6 */ + ip6allrouters = "ff02::2" // no /etc/hosts on gokrazy + ) + m := diag.NewMonitor(diag.Link(uplink). + Then(diag.DHCPv4(). + Then(diag.Ping4Gateway(). + Then(diag.Ping4("google.ch"). + Then(diag.TCP4("www.google.ch:80"))))). + Then(diag.DHCPv6(). + Then(diag.Ping6("lan0", "google.ch"))). + Then(diag.RouterAdvertisments(uplink). + Then(diag.Ping6Gateway(). + Then(diag.Ping6(uplink, "google.ch"). + Then(diag.TCP6("www.google.ch:80"))))). + Then(diag.Ping6("", ip6allrouters+"%"+uplink))) + var mu sync.Mutex + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + mu.Lock() + re := m.Evaluate() + mu.Unlock() + fmt.Fprintf(w, `