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 }