(ctx context.Context, args []string)
| 129 | ) |
| 130 | |
| 131 | func runSet(ctx context.Context, args []string) (retErr error) { |
| 132 | if len(args) > 0 { |
| 133 | fatalf("too many non-flag arguments: %q", args) |
| 134 | } |
| 135 | |
| 136 | st, err := localClient.Status(ctx) |
| 137 | if err != nil { |
| 138 | return err |
| 139 | } |
| 140 | |
| 141 | // Note that even though we set the values here regardless of whether the |
| 142 | // user passed the flag, the value is only used if the user passed the flag. |
| 143 | // See updateMaskedPrefsFromUpOrSetFlag. |
| 144 | maskedPrefs := &ipn.MaskedPrefs{ |
| 145 | Prefs: ipn.Prefs{ |
| 146 | ProfileName: setArgs.profileName, |
| 147 | RouteAll: setArgs.acceptRoutes, |
| 148 | CorpDNS: setArgs.acceptDNS, |
| 149 | ExitNodeAllowLANAccess: setArgs.exitNodeAllowLANAccess, |
| 150 | ShieldsUp: setArgs.shieldsUp, |
| 151 | RunSSH: setArgs.runSSH, |
| 152 | RunWebClient: setArgs.runWebClient, |
| 153 | Hostname: setArgs.hostname, |
| 154 | OperatorUser: setArgs.opUser, |
| 155 | NoSNAT: !setArgs.snat, |
| 156 | ForceDaemon: setArgs.forceDaemon, |
| 157 | Sync: opt.NewBool(setArgs.sync), |
| 158 | AutoUpdate: ipn.AutoUpdatePrefs{ |
| 159 | Check: setArgs.updateCheck, |
| 160 | Apply: opt.NewBool(setArgs.updateApply), |
| 161 | }, |
| 162 | AppConnector: ipn.AppConnectorPrefs{ |
| 163 | Advertise: setArgs.advertiseConnector, |
| 164 | }, |
| 165 | PostureChecking: setArgs.reportPosture, |
| 166 | NoStatefulFiltering: opt.NewBool(!setArgs.statefulFiltering), |
| 167 | }, |
| 168 | } |
| 169 | |
| 170 | if effectiveGOOS() == "linux" { |
| 171 | nfMode, warning, err := netfilterModeFromFlag(setArgs.netfilterMode) |
| 172 | if err != nil { |
| 173 | return err |
| 174 | } |
| 175 | if warning != "" { |
| 176 | warnf(warning) |
| 177 | } |
| 178 | maskedPrefs.Prefs.NetfilterMode = nfMode |
| 179 | } |
| 180 | |
| 181 | if setArgs.exitNodeIP != "" { |
| 182 | if expr, useAutoExitNode := ipn.ParseAutoExitNodeString(setArgs.exitNodeIP); useAutoExitNode { |
| 183 | maskedPrefs.AutoExitNode = expr |
| 184 | maskedPrefs.AutoExitNodeSet = true |
| 185 | } else if err := maskedPrefs.Prefs.SetExitNodeIP(setArgs.exitNodeIP, st); err != nil { |
| 186 | if _, ok := errors.AsType[ipn.ExitNodeLocalIPError](err); ok { |
| 187 | return fmt.Errorf("%w; did you mean --advertise-exit-node?", err) |
| 188 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…