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:
Stefan Junker
2016-06-28 17:46:17 -07:00
parent c3e8563e77
commit b6137de993
4 changed files with 36 additions and 41 deletions

View File

@ -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
}