MCPcopy Create free account
hub / github.com/tailscale/tailcat / createEngine

Function createEngine

tailcat.go:1358–1390  ·  view source on GitHub ↗

createEngine creates the wgengine.Engine with userspace networking.

(logf logger.Logf, lb *locoBackend)

Source from the content-addressed store, hash-verified

1356
1357// createEngine creates the wgengine.Engine with userspace networking.
1358func 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]

Callers 2

StartMethod · 0.85
initLockedMethod · 0.85

Calls 2

GetMethod · 0.65

Tested by

no test coverage detected