A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/coder/coder/commit/af4a6682b4521b051f3d43dd75a056eee30b6f08 below:

use tailscale that avoids small MTU paths (#18323) · coder/coder@af4a668 · GitHub

@@ -390,33 +390,38 @@ func createFakeInternet(t *testing.T) fakeInternet {

390 390

}

391 391 392 392

type TriangleNetwork struct {

393 -

InterClientMTU int

393 +

Client1MTU int

394 394

}

395 395 396 396

type fakeTriangleNetwork struct {

397 -

NamePrefix string

398 -

ServerNetNS *os.File

399 -

Client1NetNS *os.File

400 -

Client2NetNS *os.File

401 -

ServerClient1VethPair vethPair

402 -

ServerClient2VethPair vethPair

403 -

Client1Client2VethPair vethPair

397 +

NamePrefix string

398 +

ServerNetNS *os.File

399 +

Client1NetNS *os.File

400 +

Client2NetNS *os.File

401 +

RouterNetNS *os.File

402 +

ServerVethPair vethPair

403 +

Client1VethPair vethPair

404 +

Client2VethPair vethPair

404 405

}

405 406 406 -

// SetupNetworking creates multiple namespaces with veth pairs between them

407 -

// with the following topology:

407 +

// SetupNetworking creates multiple namespaces with a central router in the following topology

408 408

// .

409 -

// . ┌────────────────────────────────────────────┐

410 -

// . │ Server │

411 -

// . └─────┬───────────────────────────────────┬──┘

412 -

// . │fdac:38fa:ffff:2::3 │fdac:38fa:ffff:3::3

413 -

// . veth│ veth│

414 -

// . │fdac:38fa:ffff:2::1 │fdac:38fa:ffff:3::2

415 -

// . ┌───────┴──────┐ ┌─────┴───────┐

416 -

// . │ │ fdac:38fa:ffff:1::2│ │

417 -

// . │ Client 1 ├──────────────────────┤ Client 2 │

418 -

// . │ │fdac:38fa:ffff:1::1 │ │

419 -

// . └──────────────┘ └─────────────┘

409 +

// . ┌──────────────┐

410 +

// . │ │

411 +

// . │ Server ├─────────────────────────────────────┐

412 +

// . │ │fdac:38fa:ffff:3::2 │

413 +

// . └──────────────┘ │ fdac:38fa:ffff:3::1

414 +

// . ┌──────────────┐ ┌─────┴───────┐

415 +

// . │ │ fdac:38fa:ffff:1::1│ │

416 +

// . │ Client 1 ├───────────────────────────────┤ Router │

417 +

// . │ │fdac:38fa:ffff:1::2 │ │

418 +

// . └──────────────┘ └─────┬───────┘

419 +

// . ┌──────────────┐ │ fdac:38fa:ffff:2::1

420 +

// . │ │ │

421 +

// . │ Client 2 ├─────────────────────────────────────┘

422 +

// . │ │fdac:38fa:ffff:2::2

423 +

// . └──────────────┘

424 +

// The veth link between Client 1 and the router has a configurable MTU via Client1MTU.

420 425

func (n TriangleNetwork) SetupNetworking(t *testing.T, l slog.Logger) TestNetworking {

421 426

logger := l.Named("setup-networking").Leveled(slog.LevelDebug)

422 427

t.Helper()

@@ -433,101 +438,109 @@ func (n TriangleNetwork) SetupNetworking(t *testing.T, l slog.Logger) TestNetwor

433 438

network.ServerNetNS = createNetNS(t, namePrefix+"server")

434 439

network.Client1NetNS = createNetNS(t, namePrefix+"client1")

435 440

network.Client2NetNS = createNetNS(t, namePrefix+"client2")

441 +

network.RouterNetNS = createNetNS(t, namePrefix+"router")

436 442 437 -

// Create veth pair between server and client1

438 -

network.ServerClient1VethPair = vethPair{

439 -

Outer: namePrefix + "s-1",

440 -

Inner: namePrefix + "1-s",

443 +

// Create veth pair between server and router

444 +

network.ServerVethPair = vethPair{

445 +

Outer: namePrefix + "s-r",

446 +

Inner: namePrefix + "r-s",

441 447

}

442 -

err := createVethPair(network.ServerClient1VethPair.Outer, network.ServerClient1VethPair.Inner)

448 +

err := createVethPair(network.ServerVethPair.Outer, network.ServerVethPair.Inner)

443 449

require.NoErrorf(t, err, "create veth pair %q <-> %q",

444 -

network.ServerClient1VethPair.Outer, network.ServerClient1VethPair.Inner)

450 +

network.ServerVethPair.Outer, network.ServerVethPair.Inner)

445 451 446 -

// Move server-client1 veth ends to their respective namespaces

447 -

err = setVethNetNS(network.ServerClient1VethPair.Outer, int(network.ServerNetNS.Fd()))

448 -

require.NoErrorf(t, err, "set veth %q to server NetNS", network.ServerClient1VethPair.Outer)

449 -

err = setVethNetNS(network.ServerClient1VethPair.Inner, int(network.Client1NetNS.Fd()))

450 -

require.NoErrorf(t, err, "set veth %q to client1 NetNS", network.ServerClient1VethPair.Inner)

452 +

// Move server-router veth ends to their respective namespaces

453 +

err = setVethNetNS(network.ServerVethPair.Outer, int(network.ServerNetNS.Fd()))

454 +

require.NoErrorf(t, err, "set veth %q to server NetNS", network.ServerVethPair.Outer)

455 +

err = setVethNetNS(network.ServerVethPair.Inner, int(network.RouterNetNS.Fd()))

456 +

require.NoErrorf(t, err, "set veth %q to router NetNS", network.ServerVethPair.Inner)

451 457 452 -

// Create veth pair between server and client2

453 -

network.ServerClient2VethPair = vethPair{

454 -

Outer: namePrefix + "s-2",

455 -

Inner: namePrefix + "2-s",

458 +

// Create veth pair between client1 and router

459 +

network.Client1VethPair = vethPair{

460 +

Outer: namePrefix + "1-r",

461 +

Inner: namePrefix + "r-1",

456 462

}

457 -

err = createVethPair(network.ServerClient2VethPair.Outer, network.ServerClient2VethPair.Inner)

463 +

logger.Debug(context.Background(), "creating client1 link", slog.F("mtu", n.Client1MTU))

464 +

err = createVethPair(network.Client1VethPair.Outer, network.Client1VethPair.Inner, withMTU(n.Client1MTU))

458 465

require.NoErrorf(t, err, "create veth pair %q <-> %q",

459 -

network.ServerClient2VethPair.Outer, network.ServerClient2VethPair.Inner)

466 +

network.Client1VethPair.Outer, network.Client1VethPair.Inner)

460 467 461 -

// Move server-client2 veth ends to their respective namespaces

462 -

err = setVethNetNS(network.ServerClient2VethPair.Outer, int(network.ServerNetNS.Fd()))

463 -

require.NoErrorf(t, err, "set veth %q to server NetNS", network.ServerClient2VethPair.Outer)

464 -

err = setVethNetNS(network.ServerClient2VethPair.Inner, int(network.Client2NetNS.Fd()))

465 -

require.NoErrorf(t, err, "set veth %q to client2 NetNS", network.ServerClient2VethPair.Inner)

468 +

// Move client1-router veth ends to their respective namespaces

469 +

err = setVethNetNS(network.Client1VethPair.Outer, int(network.Client1NetNS.Fd()))

470 +

require.NoErrorf(t, err, "set veth %q to server NetNS", network.Client1VethPair.Outer)

471 +

err = setVethNetNS(network.Client1VethPair.Inner, int(network.RouterNetNS.Fd()))

472 +

require.NoErrorf(t, err, "set veth %q to client2 NetNS", network.Client1VethPair.Inner)

466 473 467 474

// Create veth pair between client1 and client2

468 -

network.Client1Client2VethPair = vethPair{

469 -

Outer: namePrefix + "1-2",

470 -

Inner: namePrefix + "2-1",

475 +

network.Client2VethPair = vethPair{

476 +

Outer: namePrefix + "2-r",

477 +

Inner: namePrefix + "r-2",

471 478

}

472 -

logger.Debug(context.Background(), "creating inter-client link", slog.F("mtu", n.InterClientMTU))

473 -

err = createVethPair(network.Client1Client2VethPair.Outer, network.Client1Client2VethPair.Inner,

474 -

withMTU(n.InterClientMTU))

479 + 480 +

err = createVethPair(network.Client2VethPair.Outer, network.Client2VethPair.Inner)

475 481

require.NoErrorf(t, err, "create veth pair %q <-> %q",

476 -

network.Client1Client2VethPair.Outer, network.Client1Client2VethPair.Inner)

482 +

network.Client2VethPair.Outer, network.Client2VethPair.Inner)

477 483 478 484

// Move client1-client2 veth ends to their respective namespaces

479 -

err = setVethNetNS(network.Client1Client2VethPair.Outer, int(network.Client1NetNS.Fd()))

480 -

require.NoErrorf(t, err, "set veth %q to client1 NetNS", network.Client1Client2VethPair.Outer)

481 -

err = setVethNetNS(network.Client1Client2VethPair.Inner, int(network.Client2NetNS.Fd()))

482 -

require.NoErrorf(t, err, "set veth %q to client2 NetNS", network.Client1Client2VethPair.Inner)

485 +

err = setVethNetNS(network.Client2VethPair.Outer, int(network.Client2NetNS.Fd()))

486 +

require.NoErrorf(t, err, "set veth %q to client1 NetNS", network.Client2VethPair.Outer)

487 +

err = setVethNetNS(network.Client2VethPair.Inner, int(network.RouterNetNS.Fd()))

488 +

require.NoErrorf(t, err, "set veth %q to client2 NetNS", network.Client2VethPair.Inner)

483 489 484 490

// Set IP addresses according to the diagram:

485 -

err = setInterfaceIP6(network.ServerNetNS, network.ServerClient1VethPair.Outer, ula+"2::3")

486 -

require.NoErrorf(t, err, "set IP on server-client1 interface")

487 -

err = setInterfaceIP6(network.ServerNetNS, network.ServerClient2VethPair.Outer, ula+"3::3")

488 -

require.NoErrorf(t, err, "set IP on server-client2 interface")

489 - 490 -

err = setInterfaceIP6(network.Client1NetNS, network.ServerClient1VethPair.Inner, ula+"2::1")

491 -

require.NoErrorf(t, err, "set IP on client1-server interface")

492 -

err = setInterfaceIP6(network.Client1NetNS, network.Client1Client2VethPair.Outer, ula+"1::1")

493 -

require.NoErrorf(t, err, "set IP on client1-client2 interface")

494 - 495 -

err = setInterfaceIP6(network.Client2NetNS, network.ServerClient2VethPair.Inner, ula+"3::2")

496 -

require.NoErrorf(t, err, "set IP on client2-server interface")

497 -

err = setInterfaceIP6(network.Client2NetNS, network.Client1Client2VethPair.Inner, ula+"1::2")

498 -

require.NoErrorf(t, err, "set IP on client2-client1 interface")

491 +

err = setInterfaceIP6(network.ServerNetNS, network.ServerVethPair.Outer, ula+"3::2")

492 +

require.NoErrorf(t, err, "set IP on server interface")

493 +

err = setInterfaceIP6(network.Client1NetNS, network.Client1VethPair.Outer, ula+"1::2")

494 +

require.NoErrorf(t, err, "set IP on client1 interface")

495 +

err = setInterfaceIP6(network.Client2NetNS, network.Client2VethPair.Outer, ula+"2::2")

496 +

require.NoErrorf(t, err, "set IP on client2 interface")

497 + 498 +

err = setInterfaceIP6(network.RouterNetNS, network.ServerVethPair.Inner, ula+"3::1")

499 +

require.NoErrorf(t, err, "set IP on router-server interface")

500 +

err = setInterfaceIP6(network.RouterNetNS, network.Client1VethPair.Inner, ula+"1::1")

501 +

require.NoErrorf(t, err, "set IP on router-client1 interface")

502 +

err = setInterfaceIP6(network.RouterNetNS, network.Client2VethPair.Inner, ula+"2::1")

503 +

require.NoErrorf(t, err, "set IP on router-client2 interface")

499 504 500 505

// Bring up all interfaces

501 506

interfaces := []struct {

502 -

netNS *os.File

503 -

ifaceName string

507 +

netNS *os.File

508 +

ifaceName string

509 +

defaultRoute string

504 510

}{

505 -

{network.ServerNetNS, network.ServerClient1VethPair.Outer},

506 -

{network.ServerNetNS, network.ServerClient2VethPair.Outer},

507 -

{network.Client1NetNS, network.ServerClient1VethPair.Inner},

508 -

{network.Client1NetNS, network.Client1Client2VethPair.Outer},

509 -

{network.Client2NetNS, network.ServerClient2VethPair.Inner},

510 -

{network.Client2NetNS, network.Client1Client2VethPair.Inner},

511 +

{network.ServerNetNS, network.ServerVethPair.Outer, ula + "3::1"},

512 +

{network.Client1NetNS, network.Client1VethPair.Outer, ula + "1::1"},

513 +

{network.Client2NetNS, network.Client2VethPair.Outer, ula + "2::1"},

514 +

{network.RouterNetNS, network.ServerVethPair.Inner, ""},

515 +

{network.RouterNetNS, network.Client1VethPair.Inner, ""},

516 +

{network.RouterNetNS, network.Client2VethPair.Inner, ""},

511 517

}

512 518

for _, iface := range interfaces {

513 519

err = setInterfaceUp(iface.netNS, iface.ifaceName)

514 520

require.NoErrorf(t, err, "bring up interface %q", iface.ifaceName)

515 -

// Note: routes are not needed as we are fully connected, so nothing needs to forward IP to a further

516 -

// destination.

521 + 522 +

if iface.defaultRoute != "" {

523 +

err = addRouteInNetNS(iface.netNS, []string{"default", "via", iface.defaultRoute, "dev", iface.ifaceName})

524 +

require.NoErrorf(t, err, "add peer default route to %s", iface.defaultRoute)

525 +

}

517 526

}

518 527 528 +

// enable IP forwarding in the router

529 +

_, err = commandInNetNS(network.RouterNetNS, "sysctl", []string{"-w", "net.ipv6.conf.all.forwarding=1"}).Output()

530 +

require.NoError(t, wrapExitErr(err), "enable IPv6 forwarding in router NetNS")

531 + 519 532

return TestNetworking{

520 533

Server: TestNetworkingServer{

521 534

Process: TestNetworkingProcess{NetNS: network.ServerNetNS},

522 535

ListenAddr: "[::]:8080", // Server listens on all IPs

523 536

},

524 537

Client1: TestNetworkingClient{

525 538

Process: TestNetworkingProcess{NetNS: network.Client1NetNS},

526 -

ServerAccessURL: "http://[" + ula + "2::3]:8080", // Client1 accesses server directly

539 +

ServerAccessURL: "http://[" + ula + "3::2]:8080",

527 540

},

528 541

Client2: TestNetworkingClient{

529 542

Process: TestNetworkingProcess{NetNS: network.Client2NetNS},

530 -

ServerAccessURL: "http://[" + ula + "3::3]:8080", // Client2 accesses server directly

543 +

ServerAccessURL: "http://[" + ula + "3::2]:8080",

531 544

},

532 545

}

533 546

}


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4