plugins: set MAC addresses based on IP
This will give deterministic MAC addresses for all interfaces CNI creates and manages the IP for: * bridge: container veth and host bridge * macvlan: container veth * ptp: container veth and host veth
This commit is contained in:
17
ip/link.go
17
ip/link.go
@ -21,6 +21,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/containernetworking/cni/pkg/ns"
|
||||
"github.com/containernetworking/cni/pkg/utils/hwaddr"
|
||||
"github.com/vishvananda/netlink"
|
||||
)
|
||||
|
||||
@ -151,3 +152,19 @@ func DelLinkByNameAddr(ifName string, family int) (*net.IPNet, error) {
|
||||
|
||||
return addrs[0].IPNet, nil
|
||||
}
|
||||
|
||||
func SetHWAddrByIP(link netlink.Link, ip4 net.IP, ip6 net.IP) error {
|
||||
if ip4 != nil {
|
||||
hwAddr, err := hwaddr.GenerateHardwareAddr4(ip4, hwaddr.PrivateMACPrefix)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to generate hardware addr: %v", err)
|
||||
}
|
||||
if err = netlink.LinkSetHardwareAddr(link, hwAddr); err != nil {
|
||||
return fmt.Errorf("failed to add hardware addr to %q: %v", link.Attrs().Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: IPv6
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user