MCPcopy Index your code
hub / github.com/coder/coder / SetupNetworking

Method SetupNetworking

tailnet/test/integration/network.go:424–545  ·  view source on GitHub ↗

SetupNetworking creates multiple namespaces with a central router in the following topology . . ┌──────────────┐ . │ │ . │ Server ├─────────────────────────────────────┐ . │ │fdac:38fa:ffff:3::2 │ . └──────────────┘

(t *testing.T, l slog.Logger)

Source from the content-addressed store, hash-verified

422// . └──────────────┘
423// The veth link between Client 1 and the router has a configurable MTU via Client1MTU.
424func (n TriangleNetwork) SetupNetworking(t *testing.T, l slog.Logger) TestNetworking {
425 logger := l.Named("setup-networking").Leveled(slog.LevelDebug)
426 t.Helper()
427 var (
428 namePrefix = uniqNetName(t) + "_"
429 network = fakeTriangleNetwork{
430 NamePrefix: namePrefix,
431 }
432 // Unique Local Address prefix
433 ula = "fdac:38fa:ffff:"
434 )
435
436 // Create three network namespaces for server, client1, and client2
437 network.ServerNetNS = createNetNS(t, namePrefix+"server")
438 network.Client1NetNS = createNetNS(t, namePrefix+"client1")
439 network.Client2NetNS = createNetNS(t, namePrefix+"client2")
440 network.RouterNetNS = createNetNS(t, namePrefix+"router")
441
442 // Create veth pair between server and router
443 network.ServerVethPair = vethPair{
444 Outer: namePrefix + "s-r",
445 Inner: namePrefix + "r-s",
446 }
447 err := createVethPair(network.ServerVethPair.Outer, network.ServerVethPair.Inner)
448 require.NoErrorf(t, err, "create veth pair %q <-> %q",
449 network.ServerVethPair.Outer, network.ServerVethPair.Inner)
450
451 // Move server-router veth ends to their respective namespaces
452 err = setVethNetNS(network.ServerVethPair.Outer, int(network.ServerNetNS.Fd()))
453 require.NoErrorf(t, err, "set veth %q to server NetNS", network.ServerVethPair.Outer)
454 err = setVethNetNS(network.ServerVethPair.Inner, int(network.RouterNetNS.Fd()))
455 require.NoErrorf(t, err, "set veth %q to router NetNS", network.ServerVethPair.Inner)
456
457 // Create veth pair between client1 and router
458 network.Client1VethPair = vethPair{
459 Outer: namePrefix + "1-r",
460 Inner: namePrefix + "r-1",
461 }
462 logger.Debug(context.Background(), "creating client1 link", slog.F("mtu", n.Client1MTU))
463 err = createVethPair(network.Client1VethPair.Outer, network.Client1VethPair.Inner, withMTU(n.Client1MTU))
464 require.NoErrorf(t, err, "create veth pair %q <-> %q",
465 network.Client1VethPair.Outer, network.Client1VethPair.Inner)
466
467 // Move client1-router veth ends to their respective namespaces
468 err = setVethNetNS(network.Client1VethPair.Outer, int(network.Client1NetNS.Fd()))
469 require.NoErrorf(t, err, "set veth %q to server NetNS", network.Client1VethPair.Outer)
470 err = setVethNetNS(network.Client1VethPair.Inner, int(network.RouterNetNS.Fd()))
471 require.NoErrorf(t, err, "set veth %q to client2 NetNS", network.Client1VethPair.Inner)
472
473 // Create veth pair between client1 and client2
474 network.Client2VethPair = vethPair{
475 Outer: namePrefix + "2-r",
476 Inner: namePrefix + "r-2",
477 }
478
479 err = createVethPair(network.Client2VethPair.Outer, network.Client2VethPair.Inner)
480 require.NoErrorf(t, err, "create veth pair %q <-> %q",
481 network.Client2VethPair.Outer, network.Client2VethPair.Inner)

Callers

nothing calls this directly

Calls 13

uniqNetNameFunction · 0.85
createNetNSFunction · 0.85
createVethPairFunction · 0.85
setVethNetNSFunction · 0.85
withMTUFunction · 0.85
setInterfaceIP6Function · 0.85
setInterfaceUpFunction · 0.85
addRouteInNetNSFunction · 0.85
commandInNetNSFunction · 0.85
wrapExitErrFunction · 0.85
NamedMethod · 0.80
HelperMethod · 0.65

Tested by

no test coverage detected