github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/network/devices/link.go (about)

     1  package devices
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  
     7  	"github.com/docker/libcontainer/netlink"
     8  )
     9  
    10  type Link struct{}
    11  
    12  func (Link) AddIP(intf *net.Interface, ip net.IP, subnet *net.IPNet) error {
    13  	netlinkMu.Lock()
    14  	defer netlinkMu.Unlock()
    15  
    16  	return errF(netlink.NetworkLinkAddIp(intf, ip, subnet))
    17  }
    18  
    19  func (Link) AddDefaultGW(intf *net.Interface, ip net.IP) error {
    20  	netlinkMu.Lock()
    21  	defer netlinkMu.Unlock()
    22  
    23  	return errF(netlink.AddDefaultGw(ip.String(), intf.Name))
    24  }
    25  
    26  func (Link) SetUp(intf *net.Interface) error {
    27  	netlinkMu.Lock()
    28  	defer netlinkMu.Unlock()
    29  
    30  	return errF(netlink.NetworkLinkUp(intf))
    31  }
    32  
    33  func (Link) SetMTU(intf *net.Interface, mtu int) error {
    34  	netlinkMu.Lock()
    35  	defer netlinkMu.Unlock()
    36  
    37  	return errF(netlink.NetworkSetMTU(intf, mtu))
    38  }
    39  
    40  func (Link) SetNs(intf *net.Interface, ns int) error {
    41  	netlinkMu.Lock()
    42  	defer netlinkMu.Unlock()
    43  
    44  	return errF(netlink.NetworkSetNsPid(intf, ns))
    45  }
    46  
    47  func (Link) InterfaceByName(name string) (*net.Interface, bool, error) {
    48  	netlinkMu.Lock()
    49  	defer netlinkMu.Unlock()
    50  
    51  	intfs, err := net.Interfaces()
    52  	if err != nil {
    53  		return nil, false, errF(err)
    54  	}
    55  
    56  	for _, intf := range intfs {
    57  		if intf.Name == name {
    58  			return &intf, true, nil
    59  		}
    60  	}
    61  
    62  	return nil, false, nil
    63  }
    64  
    65  func (Link) List() (names []string, err error) {
    66  	netlinkMu.Lock()
    67  	defer netlinkMu.Unlock()
    68  
    69  	intfs, err := net.Interfaces()
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	for _, i := range intfs {
    75  		names = append(names, i.Name)
    76  	}
    77  
    78  	return names, nil
    79  }
    80  
    81  func errF(err error) error {
    82  	if err == nil {
    83  		return err
    84  	}
    85  
    86  	return fmt.Errorf("devices: %v", err)
    87  }