diff --git a/cmd/ctrld/cli.go b/cmd/ctrld/cli.go index 080faec..6ef1c0f 100644 --- a/cmd/ctrld/cli.go +++ b/cmd/ctrld/cli.go @@ -168,7 +168,7 @@ func initCLI() { // Processing --cd flag require connecting to ControlD API, which needs valid // time for validating server certificate. Some routers need NTP synchronization // to set the current time, so this check must happen before processCDFlags. - if err := router.PreRun(); err != nil { + if err := router.PreRun(svcConfig); err != nil { mainLog.Fatal().Err(err).Msg("failed to perform router pre-run check") } diff --git a/internal/router/router.go b/internal/router/router.go index 0c18f50..38c65b6 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -127,10 +127,13 @@ func ConfigureService(sc *service.Config) error { } // PreRun blocks until the router is ready for running ctrld. -func PreRun() (err error) { +func PreRun(svc *service.Config) (err error) { // On some routers, NTP may out of sync, so waiting for it to be ready. switch Name() { - case Merlin, Tomato: + case DDWrt, Merlin, Tomato: + // Cleanup router to ensure valid DNS for NTP synchronization. + _ = Cleanup(svc) + // Wait until `ntp_ready=1` set. b := backoff.NewBackoff("PreRun", func(format string, args ...any) {}, 10*time.Second) for {