github.com/docker/engine@v22.0.0-20211208180946-d456264580cf+incompatible/libnetwork/drivers/bridge/setup_ipv6_test.go (about)

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