Move endpoint creation into CreateEndpoint so we can return the MAC address
This commit is contained in:
1 parent
13ec517f94
commit
adafb79e34
1 file changed
+17
-11
+17
-11
@@ -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
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user