setup_ipv6_linux_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package bridge
  2. import (
  3. "bytes"
  4. "fmt"
  5. "net"
  6. "os"
  7. "testing"
  8. "github.com/docker/docker/internal/testutils/netnsutils"
  9. "github.com/vishvananda/netlink"
  10. )
  11. func TestSetupIPv6(t *testing.T) {
  12. defer netnsutils.SetupTestOSContext(t)()
  13. nh, err := netlink.NewHandle()
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. defer nh.Close()
  18. config, br := setupTestInterface(t, nh)
  19. if err := setupBridgeIPv6(config, br); err != nil {
  20. t.Fatalf("Failed to setup bridge IPv6: %v", err)
  21. }
  22. procSetting, err := os.ReadFile(fmt.Sprintf("/proc/sys/net/ipv6/conf/%s/disable_ipv6", config.BridgeName))
  23. if err != nil {
  24. t.Fatalf("Failed to read disable_ipv6 kernel setting: %v", err)
  25. }
  26. if expected := []byte("0\n"); !bytes.Equal(expected, procSetting) {
  27. t.Fatalf("Invalid kernel setting disable_ipv6: expected %q, got %q", string(expected), string(procSetting))
  28. }
  29. addrsv6, err := nh.AddrList(br.Link, netlink.FAMILY_V6)
  30. if err != nil {
  31. t.Fatalf("Failed to list device IPv6 addresses: %v", err)
  32. }
  33. var found bool
  34. for _, addr := range addrsv6 {
  35. if bridgeIPv6.String() == addr.IPNet.String() {
  36. found = true
  37. break
  38. }
  39. }
  40. if !found {
  41. t.Fatalf("Bridge device does not have requested IPv6 address %v", bridgeIPv6)
  42. }
  43. }
  44. func TestSetupGatewayIPv6(t *testing.T) {
  45. defer netnsutils.SetupTestOSContext(t)()
  46. _, nw, _ := net.ParseCIDR("2001:db8:ea9:9abc:ffff::/80")
  47. gw := net.ParseIP("2001:db8:ea9:9abc:ffff::254")
  48. config := &networkConfiguration{
  49. BridgeName: DefaultBridgeName,
  50. AddressIPv6: nw,
  51. DefaultGatewayIPv6: gw,
  52. }
  53. nh, err := netlink.NewHandle()
  54. if err != nil {
  55. t.Fatal(err)
  56. }
  57. defer nh.Close()
  58. br := &bridgeInterface{nlh: nh}
  59. if err := setupGatewayIPv6(config, br); err != nil {
  60. t.Fatalf("Set Default Gateway failed: %v", err)
  61. }
  62. if !gw.Equal(br.gatewayIPv6) {
  63. t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv6)
  64. }
  65. }