github.com/cilium/cilium@v1.16.2/pkg/mac/mac_linux.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package mac 5 6 import ( 7 "errors" 8 "net" 9 10 "github.com/vishvananda/netlink" 11 ) 12 13 // HasMacAddr returns true if the given network interface has L2 addr. 14 func HasMacAddr(iface string) bool { 15 link, err := netlink.LinkByName(iface) 16 if err != nil { 17 return false 18 } 19 return LinkHasMacAddr(link) 20 } 21 22 // LinkHasMacAddr returns true if the given network interface has L2 addr. 23 func LinkHasMacAddr(link netlink.Link) bool { 24 return len(link.Attrs().HardwareAddr) != 0 25 } 26 27 // ReplaceMacAddressWithLinkName replaces the MAC address of the given link 28 func ReplaceMacAddressWithLinkName(ifName, macAddress string) error { 29 l, err := netlink.LinkByName(ifName) 30 if err != nil { 31 if errors.As(err, &netlink.LinkNotFoundError{}) { 32 return nil 33 } 34 return err 35 } 36 hw, err := net.ParseMAC(macAddress) 37 if err != nil { 38 return err 39 } 40 return netlink.LinkSetHardwareAddr(l, hw) 41 }