createEngine creates the wgengine.Engine with userspace networking.
(logf logger.Logf, lb *locoBackend)
| 1356 | |
| 1357 | // createEngine creates the wgengine.Engine with userspace networking. |
| 1358 | func createEngine(logf logger.Logf, lb *locoBackend) (err error) { |
| 1359 | sys := &lb.sys |
| 1360 | conf := wgengine.Config{ |
| 1361 | ListenPort: 0, |
| 1362 | NetMon: sys.NetMon.Get(), |
| 1363 | Dialer: sys.Dialer.Get(), |
| 1364 | SetSubsystem: sys.Set, |
| 1365 | Metrics: sys.UserMetricsRegistry(), |
| 1366 | HealthTracker: sys.HealthTracker.Get(), |
| 1367 | EventBus: sys.Bus.Get(), |
| 1368 | OnDERPRecv: lb.onDERPRecv, |
| 1369 | DERPAppName: "tailcat-client", |
| 1370 | } |
| 1371 | if lb.isServer { |
| 1372 | conf.DERPAppName = "tailcat-server" |
| 1373 | } |
| 1374 | // Both sides force their disco key to be derived from their node |
| 1375 | // key. For the server, that lets clients predict its disco key |
| 1376 | // from the ConnBlob without extra round trips. And knowing our own |
| 1377 | // disco private key is what lets either side seal the |
| 1378 | // call-me-maybe messages that advertise our UDP endpoints (see |
| 1379 | // locoBackend.advertiseEndpoints). |
| 1380 | conf.ForceDiscoKey = nodePrivateAsDiscoPrivate(lb.priv) |
| 1381 | netns.SetEnabled(false) |
| 1382 | e, err := wgengine.NewUserspaceEngine(logf, conf) |
| 1383 | if err != nil { |
| 1384 | logf("wgengine.NewUserspaceEngine(tun %q) error: %v", "userspace-networking", err) |
| 1385 | return err |
| 1386 | } |
| 1387 | sys.Set(e) |
| 1388 | sys.NetstackRouter.Set(true) |
| 1389 | return nil |
| 1390 | } |
| 1391 | |
| 1392 | // Client connects to a [Server] over a WireGuard tunnel relayed through DERP. |
| 1393 | // Populate Server (the only required field, or use the [NewClient] |
no test coverage detected