(peer *ipcSetPeer, key, value string)
| 305 | } |
| 306 | |
| 307 | func (device *Device) handlePeerLine(peer *ipcSetPeer, key, value string) error { |
| 308 | switch key { |
| 309 | case "update_only": |
| 310 | // allow disabling of creation |
| 311 | if value != "true" { |
| 312 | return ipcErrorf(ipc.IpcErrorInvalid, "failed to set update only, invalid value: %v", value) |
| 313 | } |
| 314 | if peer.created && !peer.dummy { |
| 315 | device.RemovePeer(peer.handshake.remoteStatic) |
| 316 | peer.Peer = &Peer{} |
| 317 | peer.dummy = true |
| 318 | } |
| 319 | |
| 320 | case "remove": |
| 321 | // remove currently selected peer from device |
| 322 | if value != "true" { |
| 323 | return ipcErrorf(ipc.IpcErrorInvalid, "failed to set remove, invalid value: %v", value) |
| 324 | } |
| 325 | if !peer.dummy { |
| 326 | device.Log.Verbosef("%v - UAPI: Removing", peer.Peer) |
| 327 | device.RemovePeer(peer.handshake.remoteStatic) |
| 328 | } |
| 329 | peer.Peer = &Peer{} |
| 330 | peer.dummy = true |
| 331 | |
| 332 | case "preshared_key": |
| 333 | device.Log.Verbosef("%v - UAPI: Updating preshared key", peer.Peer) |
| 334 | |
| 335 | peer.handshake.mutex.Lock() |
| 336 | err := peer.handshake.presharedKey.FromHex(value) |
| 337 | peer.handshake.mutex.Unlock() |
| 338 | |
| 339 | if err != nil { |
| 340 | return ipcErrorf(ipc.IpcErrorInvalid, "failed to set preshared key: %w", err) |
| 341 | } |
| 342 | |
| 343 | case "endpoint": |
| 344 | device.Log.Verbosef("%v - UAPI: Updating endpoint", peer.Peer) |
| 345 | endpoint, err := device.net.bind.ParseEndpoint(value) |
| 346 | if err != nil { |
| 347 | return ipcErrorf(ipc.IpcErrorInvalid, "failed to set endpoint %v: %w", value, err) |
| 348 | } |
| 349 | peer.endpoints.Lock() |
| 350 | defer peer.endpoints.Unlock() |
| 351 | peer.endpoints.val = []conn.Endpoint{endpoint} |
| 352 | |
| 353 | case "persistent_keepalive_interval": |
| 354 | device.Log.Verbosef("%v - UAPI: Updating persistent keepalive interval", peer.Peer) |
| 355 | |
| 356 | secs, err := strconv.ParseUint(value, 10, 16) |
| 357 | if err != nil { |
| 358 | return ipcErrorf(ipc.IpcErrorInvalid, "failed to set persistent keepalive interval: %w", err) |
| 359 | } |
| 360 | |
| 361 | old := peer.persistentKeepaliveInterval.Swap(uint32(secs)) |
| 362 | |
| 363 | // Send immediate keepalive if we're turning it on and before it wasn't on. |
| 364 | peer.pkaOn = old == 0 && secs != 0 |
no test coverage detected