setup_ipv4_linux_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package bridge
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/docker/docker/internal/testutils/netnsutils"
  6. "github.com/vishvananda/netlink"
  7. )
  8. func setupTestInterface(t *testing.T, nh *netlink.Handle) (*networkConfiguration, *bridgeInterface) {
  9. config := &networkConfiguration{
  10. BridgeName: DefaultBridgeName,
  11. }
  12. br := &bridgeInterface{nlh: nh}
  13. if err := setupDevice(config, br); err != nil {
  14. t.Fatalf("Bridge creation failed: %v", err)
  15. }
  16. return config, br
  17. }
  18. func TestSetupBridgeIPv4Fixed(t *testing.T) {
  19. defer netnsutils.SetupTestOSContext(t)()
  20. ip, netw, err := net.ParseCIDR("192.168.1.1/24")
  21. if err != nil {
  22. t.Fatalf("Failed to parse bridge IPv4: %v", err)
  23. }
  24. nh, err := netlink.NewHandle()
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. defer nh.Close()
  29. config, br := setupTestInterface(t, nh)
  30. config.AddressIPv4 = &net.IPNet{IP: ip, Mask: netw.Mask}
  31. if err := setupBridgeIPv4(config, br); err != nil {
  32. t.Fatalf("Failed to setup bridge IPv4: %v", err)
  33. }
  34. addrsv4, err := nh.AddrList(br.Link, netlink.FAMILY_V4)
  35. if err != nil {
  36. t.Fatalf("Failed to list device IPv4 addresses: %v", err)
  37. }
  38. var found bool
  39. for _, addr := range addrsv4 {
  40. if config.AddressIPv4.String() == addr.IPNet.String() {
  41. found = true
  42. break
  43. }
  44. }
  45. if !found {
  46. t.Fatalf("Bridge device does not have requested IPv4 address %v", config.AddressIPv4)
  47. }
  48. }
  49. func TestSetupGatewayIPv4(t *testing.T) {
  50. defer netnsutils.SetupTestOSContext(t)()
  51. nh, err := netlink.NewHandle()
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. defer nh.Close()
  56. ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
  57. nw.IP = ip
  58. gw := net.ParseIP("192.168.2.254")
  59. config := &networkConfiguration{
  60. BridgeName: DefaultBridgeName,
  61. DefaultGatewayIPv4: gw,
  62. }
  63. br := &bridgeInterface{bridgeIPv4: nw, nlh: nh}
  64. if err := setupGatewayIPv4(config, br); err != nil {
  65. t.Fatalf("Set Default Gateway failed: %v", err)
  66. }
  67. if !gw.Equal(br.gatewayIPv4) {
  68. t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv4)
  69. }
  70. }