Move endpoint creation into CreateEndpoint so we can return the MAC address

This commit is contained in:
Bryan Boreham committed 2016-01-20 16:45:08 +00:00
1 parent 13ec517f94
commit adafb79e34
1 file changed
+17 -11
+17 -11
View File
@@ -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
}