From bf54bdfd7f8d53b97f47c0cbe51016f8c45940a4 Mon Sep 17 00:00:00 2001 From: Malte Janduda Date: Mon, 29 Sep 2014 23:51:53 +0200 Subject: [PATCH] implementing SetInterfaceMac Docker-DCO-1.1-Signed-off-by: Malte Janduda (github: MalteJ) --- network/network.go | 8 ++++++++ network/types.go | 3 +++ network/veth.go | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/network/network.go b/network/network.go index c7560c04a..014ba7431 100644 --- a/network/network.go +++ b/network/network.go @@ -68,6 +68,14 @@ func SetDefaultGateway(ip, ifaceName string) error { return netlink.AddDefaultGw(ip, ifaceName) } +func SetInterfaceMac(name string, macaddr string) error { + iface, err := net.InterfaceByName(name) + if err != nil { + return err + } + return netlink.NetworkSetMacAddress(iface, macaddr) +} + func SetInterfaceIp(name string, rawIp string) error { iface, err := net.InterfaceByName(name) if err != nil { diff --git a/network/types.go b/network/types.go index ae098981b..41b7aadb5 100644 --- a/network/types.go +++ b/network/types.go @@ -17,6 +17,9 @@ type Network struct { // Prefix for the veth interfaces. VethPrefix string `json:"veth_prefix,omitempty"` + // MACAddress contains the MAC address to set on the network interface + MACAddress string `json:"mac_address,omitempty"` + // Address contains the IPv4 and mask to set on the network interface Address string `json:"address,omitempty"` diff --git a/network/veth.go b/network/veth.go index c38fe3d2d..b9533c58f 100644 --- a/network/veth.go +++ b/network/veth.go @@ -60,6 +60,11 @@ func (v *Veth) Initialize(config *Network, networkState *NetworkState) error { if err := ChangeInterfaceName(vethChild, defaultDevice); err != nil { return fmt.Errorf("change %s to %s %s", vethChild, defaultDevice, err) } + if config.MACAddress != "" { + if err := SetInterfaceMac(defaultDevice, config.MACAddress); err != nil { + return fmt.Errorf("set %s mac %s", defaultDevice, err) + } + } if err := SetInterfaceIp(defaultDevice, config.Address); err != nil { return fmt.Errorf("set %s ip %s", defaultDevice, err) }