From adafb79e34c398ba20896ae9314defb86ca13735 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 21 Dec 2015 13:41:54 +0000 Subject: [PATCH] Move endpoint creation into CreateEndpoint so we can return the MAC address --- plugin/net/driver.go | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/plugin/net/driver.go b/plugin/net/driver.go index 12b4a62f..c4b9c61e 100644 --- a/plugin/net/driver.go +++ b/plugin/net/driver.go @@ -73,18 +73,27 @@ func (driver *driver) DeleteNetwork(delete *api.DeleteNetworkRequest) error { } func (driver *driver) CreateEndpoint(create *api.CreateEndpointRequest) (*api.CreateEndpointResponse, error) { - Log.Debugf("Create endpoint request %+v", create) + Log.Debugf("Create endpoint request %+v interface %+v", create, create.Interface) endID := create.EndpointID if create.Interface == nil { return nil, fmt.Errorf("Not supported: creating an interface from within CreateEndpoint") } + // create veths. note we assume endpoint IDs are unique in the first 5 chars + local := vethPair(endID[:5]) + if err := netlink.LinkAdd(local); err != nil { + return nil, errorf("could not create veth pair: %s", err) + } driver.Lock() driver.endpoints[endID] = struct{}{} driver.Unlock() - resp := &api.CreateEndpointResponse{} + + // Send back the MAC address + link, _ := netlink.LinkByName(local.PeerName) + resp := &api.CreateEndpointResponse{Interface: &api.EndpointInterface{MacAddress: link.Attrs().HardwareAddr.String()}} Log.Infof("Create endpoint %s %+v", endID, resp) + Log.Infof("Veth info %+v", local) return resp, nil } @@ -94,6 +103,10 @@ func (driver *driver) DeleteEndpoint(deleteReq *api.DeleteEndpointRequest) error driver.Lock() delete(driver.endpoints, deleteReq.EndpointID) driver.Unlock() + local := vethPair(deleteReq.EndpointID[:5]) + if err := netlink.LinkDel(local); err != nil { + Log.Warningf("unable to delete veth: %s", err) + } return nil } @@ -118,11 +131,9 @@ func (driver *driver) JoinEndpoint(j *api.JoinRequest) (*api.JoinResponse, error return nil, errorf(`bridge "%s" not present; did you launch weave?`, WeaveBridge) } - // create and attach local name to the bridge local := vethPair(endID[:5]) - local.Attrs().MTU = maybeBridge.Attrs().MTU - if err := netlink.LinkAdd(local); err != nil { - return nil, errorf("could not create veth pair: %s", err) + if err = netlink.LinkSetMTU(local, maybeBridge.Attrs().MTU); err != nil { + return nil, errorf(`unable to set mtu: %s`, err) } switch maybeBridge.(type) { @@ -177,11 +188,6 @@ func (driver *driver) JoinEndpoint(j *api.JoinRequest) (*api.JoinResponse, error func (driver *driver) LeaveEndpoint(leave *api.LeaveRequest) error { Log.Debugf("Leave request: %+v", leave) - - local := vethPair(leave.EndpointID[:5]) - if err := netlink.LinkDel(local); err != nil { - Log.Warningf("unable to delete veth on leave: %s", err) - } Log.Infof("Leave %s:%s", leave.NetworkID, leave.EndpointID) return nil }