...

Source file src/edge-infra.dev/pkg/lib/kernel/netlink/netns/netns.go

Documentation: edge-infra.dev/pkg/lib/kernel/netlink/netns

     1  package netns
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"runtime"
     7  	"testing"
     8  
     9  	"github.com/vishvananda/netlink"
    10  	"github.com/vishvananda/netns"
    11  )
    12  
    13  var (
    14  	testNamespaceLinkName = "lo"
    15  	dummyLinkName         = "ens4"
    16  	dummyMTU              = 1440
    17  )
    18  
    19  // creates a testing network namespace and returns the handle and teardown function
    20  func NewTestingNetworkNamespace(t *testing.T) (netns.NsHandle, func()) {
    21  	if os.Getuid() != 0 {
    22  		t.Skip("networking test requires root privileges, ensure bazel sandbox strategy is set to linux-sandbox.")
    23  	}
    24  	runtime.LockOSThread()
    25  	ns, err := netns.New()
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  	return ns, func() {
    30  		ns.Close()
    31  		runtime.UnlockOSThread()
    32  	}
    33  }
    34  
    35  // Creates a dummy device bridge to loopback device
    36  func CreateDummyLink() error {
    37  	lo, err := netlink.LinkByName(testNamespaceLinkName)
    38  	if err != nil {
    39  		return err
    40  	}
    41  
    42  	la := netlink.NewLinkAttrs()
    43  	la.Name = dummyLinkName
    44  	la.MTU = dummyMTU
    45  	bridge := &netlink.Bridge{LinkAttrs: la}
    46  	bridge.ParentIndex = lo.Attrs().Index
    47  	if err := netlink.LinkAdd(bridge); err != nil {
    48  		return err
    49  	}
    50  	return netlink.LinkSetUp(bridge)
    51  }
    52  
    53  // Returns an up-to-date dummy link
    54  func GetDummyLink() (netlink.Link, error) {
    55  	return GetByName(dummyLinkName)
    56  }
    57  
    58  func GetByName(name string) (netlink.Link, error) {
    59  	link, err := netlink.LinkByName(name)
    60  	if err != nil {
    61  		return nil, fmt.Errorf("error getting link %s: %w", name, err)
    62  	}
    63  	return link, nil
    64  }
    65  

View as plain text