github.com/rish1988/moby@v25.0.2+incompatible/libnetwork/drivers/bridge/setup_ipv6_linux_test.go (about)

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