github.com/AbhinandanKurakure/podman/v3@v3.4.10/libpod/network/devices.go (about) 1 package network 2 3 import ( 4 "fmt" 5 6 "github.com/containers/common/pkg/config" 7 "github.com/containers/podman/v3/pkg/util" 8 "github.com/sirupsen/logrus" 9 "github.com/vishvananda/netlink" 10 ) 11 12 // GetFreeDeviceName returns a device name that is unused; used when no network 13 // name is provided by user 14 func GetFreeDeviceName(config *config.Config) (string, error) { 15 var ( 16 deviceNum uint 17 deviceName string 18 ) 19 networkNames, err := GetNetworkNamesFromFileSystem(config) 20 if err != nil { 21 return "", err 22 } 23 liveNetworksNames, err := GetLiveNetworkNames() 24 if err != nil { 25 return "", err 26 } 27 bridgeNames, err := GetBridgeNamesFromFileSystem(config) 28 if err != nil { 29 return "", err 30 } 31 for { 32 deviceName = fmt.Sprintf("%s%d", CNIDeviceName, deviceNum) 33 logrus.Debugf("checking if device name %q exists in other cni networks", deviceName) 34 if util.StringInSlice(deviceName, networkNames) { 35 deviceNum++ 36 continue 37 } 38 logrus.Debugf("checking if device name %q exists in live networks", deviceName) 39 if util.StringInSlice(deviceName, liveNetworksNames) { 40 deviceNum++ 41 continue 42 } 43 logrus.Debugf("checking if device name %q already exists as a bridge name ", deviceName) 44 if !util.StringInSlice(deviceName, bridgeNames) { 45 break 46 } 47 deviceNum++ 48 } 49 return deviceName, nil 50 } 51 52 // RemoveInterface removes an interface by the given name 53 func RemoveInterface(interfaceName string) error { 54 link, err := netlink.LinkByName(interfaceName) 55 if err != nil { 56 return err 57 } 58 return netlink.LinkDel(link) 59 }