From 15d397d8a62d85c0edaf707f7d27decd719d3c7b Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 17 May 2023 23:56:04 +0700 Subject: [PATCH] cmd/ctrld: fix problem with default iface name on WSL 1 On WSL 1, the routing table do not contain default route, causing ctrld failed to get the default iface for setting DNS. However, WSL 1 only use /etc/resolv.conf for setting up DNS, so the interface does not matter, because the setting is applied global anyway. To fix it, just return "lo" as the default interface name on WSL 1. While at it, also removing the useless service.Logger call, which is not unified with the current logger, and may cause false positive on system where syslog is not configured properly (like WSL 1). Also passing the real error when doing sel-check to backoff, so we don't have to use a place holder error. --- cmd/ctrld/cli.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/cmd/ctrld/cli.go b/cmd/ctrld/cli.go index a0304da..811ac56 100644 --- a/cmd/ctrld/cli.go +++ b/cmd/ctrld/cli.go @@ -138,16 +138,7 @@ func initCLI() { mainLog.Fatal().Err(err).Msg("failed create new service") } s = newService(s) - serviceLogger, err := s.Logger(nil) - if err != nil { - mainLog.Error().Err(err).Msg("failed to get service logger") - return - } - if err := s.Run(); err != nil { - if sErr := serviceLogger.Error(err); sErr != nil { - mainLog.Error().Err(sErr).Msg("failed to write service log") - } mainLog.Error().Err(err).Msg("failed to start service") } }() @@ -854,6 +845,11 @@ func netInterface(ifaceName string) (*net.Interface, error) { func defaultIfaceName() string { dri, err := interfaces.DefaultRouteInterface() if err != nil { + // On WSL 1, the route table does not have any default route. But the fact that + // it only uses /etc/resolv.conf for setup DNS, so we can use "lo" here. + if oi := osinfo.New(); strings.Contains(oi.String(), "Microsoft") { + return "lo" + } mainLog.Fatal().Err(err).Msg("failed to get default route interface") } return dri @@ -864,7 +860,6 @@ func selfCheckStatus(status service.Status) service.Status { bo := backoff.NewBackoff("self-check", logf, 10*time.Second) bo.LogLongerThan = 500 * time.Millisecond ctx := context.Background() - err := errors.New("query failed") maxAttempts := 20 mainLog.Debug().Msg("Performing self-check") var ( @@ -890,7 +885,7 @@ func selfCheckStatus(status service.Status) service.Status { m := new(dns.Msg) m.SetQuestion(selfCheckFQDN+".", dns.TypeA) m.RecursionDesired = true - r, _, _ := c.ExchangeContext(ctx, m, net.JoinHostPort(lc.IP, strconv.Itoa(lc.Port))) + r, _, err := c.ExchangeContext(ctx, m, net.JoinHostPort(lc.IP, strconv.Itoa(lc.Port))) if r != nil && r.Rcode == dns.RcodeSuccess && len(r.Answer) > 0 { mainLog.Debug().Msgf("self-check against %q succeeded", selfCheckFQDN) return status