SetupNetworking creates multiple namespaces with a central router in the following topology . . ┌──────────────┐ . │ │ . │ Server ├─────────────────────────────────────┐ . │ │fdac:38fa:ffff:3::2 │ . └──────────────┘
(t *testing.T, l slog.Logger)
| 422 | // . └──────────────┘ |
| 423 | // The veth link between Client 1 and the router has a configurable MTU via Client1MTU. |
| 424 | func (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) |
nothing calls this directly
no test coverage detected