diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index e91115a..26f228b 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -144,6 +144,8 @@ func initCLI() { _ = runCmd.Flags().MarkHidden("homedir") runCmd.Flags().StringVarP(&iface, "iface", "", "", `Update DNS setting for iface, "auto" means the default interface gateway`) _ = runCmd.Flags().MarkHidden("iface") + runCmd.Flags().BoolVarP(&setupRouter, "router", "", false, "Do setup router") + _ = runCmd.Flags().MarkHidden("router") runCmd.Flags().StringVarP(&cdUpstreamProto, "proto", "", ctrld.ResolverTypeDOH, `Control D upstream type, either "doh" or "doh3"`) rootCmd.AddCommand(runCmd) @@ -253,7 +255,7 @@ func initCLI() { return } - if router.Name() != "" { + if router.Name() != "" && setupRouter { mainLog.Load().Debug().Msg("cleaning up router before installing") _ = p.router.Cleanup() } @@ -307,6 +309,8 @@ func initCLI() { startCmd.Flags().StringVarP(&iface, "iface", "", "", `Update DNS setting for iface, "auto" means the default interface gateway`) startCmd.Flags().StringVarP(&nextdns, nextdnsFlagName, "", "", "NextDNS resolver id") startCmd.Flags().StringVarP(&cdUpstreamProto, "proto", "", ctrld.ResolverTypeDOH, `Control D upstream type, either "doh" or "doh3"`) + startCmd.Flags().BoolVarP(&setupRouter, "router", "", false, "Do router setup") + _ = startCmd.Flags().MarkHidden("router") routerCmd := &cobra.Command{ Use: "setup", @@ -591,11 +595,16 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`, if !cmd.Flags().Changed("iface") { os.Args = append(os.Args, "--iface="+ifaceStartStop) } + if !cmd.Flags().Changed("router") { + os.Args = append(os.Args, fmt.Sprintf("--router=%v", setupRouterStartStop)) + } iface = ifaceStartStop + setupRouter = setupRouterStartStop startCmd.Run(cmd, args) }, } startCmdAlias.Flags().StringVarP(&ifaceStartStop, "iface", "", "auto", `Update DNS setting for iface, "auto" means the default interface gateway`) + startCmdAlias.Flags().BoolVarP(&setupRouterStartStop, "router", "", true, "Do router setup") startCmdAlias.Flags().AddFlagSet(startCmd.Flags()) rootCmd.AddCommand(startCmdAlias) stopCmdAlias := &cobra.Command{ @@ -609,11 +618,16 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`, if !cmd.Flags().Changed("iface") { os.Args = append(os.Args, "--iface="+ifaceStartStop) } + if !cmd.Flags().Changed("router") { + os.Args = append(os.Args, fmt.Sprintf("--router=%v", setupRouterStartStop)) + } iface = ifaceStartStop + setupRouter = setupRouterStartStop stopCmd.Run(cmd, args) }, } stopCmdAlias.Flags().StringVarP(&ifaceStartStop, "iface", "", "auto", `Reset DNS setting for iface, "auto" means the default interface gateway`) + stopCmdAlias.Flags().BoolVarP(&setupRouterStartStop, "router", "", true, "Do router setup") stopCmdAlias.Flags().AddFlagSet(stopCmd.Flags()) rootCmd.AddCommand(stopCmdAlias) @@ -974,19 +988,21 @@ func run(appCallback *AppCallback, stopCh chan struct{}) { if cp := router.CertPool(); cp != nil { rootCertPool = cp } - p.onStarted = append(p.onStarted, func() { - mainLog.Load().Debug().Msg("router setup on start") - if err := p.router.Setup(); err != nil { - mainLog.Load().Error().Err(err).Msg("could not configure router") - } - }) - p.onStopped = append(p.onStopped, func() { - mainLog.Load().Debug().Msg("router cleanup on stop") - if err := p.router.Cleanup(); err != nil { - mainLog.Load().Error().Err(err).Msg("could not cleanup router") - } - p.resetDNS() - }) + if setupRouter { + p.onStarted = append(p.onStarted, func() { + mainLog.Load().Debug().Msg("router setup on start") + if err := p.router.Setup(); err != nil { + mainLog.Load().Error().Err(err).Msg("could not configure router") + } + }) + p.onStopped = append(p.onStopped, func() { + mainLog.Load().Debug().Msg("router cleanup on stop") + if err := p.router.Cleanup(); err != nil { + mainLog.Load().Error().Err(err).Msg("could not cleanup router") + } + p.resetDNS() + }) + } } close(waitCh) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index bf65044..b1287ae 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -14,26 +14,28 @@ import ( ) var ( - configPath string - configBase64 string - daemon bool - listenAddress string - primaryUpstream string - secondaryUpstream string - domains []string - logPath string - homedir string - cacheSize int - cfg ctrld.Config - verbose int - silent bool - cdUID string - cdOrg string - cdDev bool - iface string - ifaceStartStop string - nextdns string - cdUpstreamProto string + configPath string + configBase64 string + daemon bool + listenAddress string + primaryUpstream string + secondaryUpstream string + domains []string + logPath string + homedir string + cacheSize int + cfg ctrld.Config + verbose int + silent bool + cdUID string + cdOrg string + cdDev bool + iface string + ifaceStartStop string + nextdns string + cdUpstreamProto string + setupRouter bool + setupRouterStartStop bool mainLog atomic.Pointer[zerolog.Logger] consoleWriter zerolog.ConsoleWriter