diff --git a/libnetwork/drivers/windows/windows.go b/libnetwork/drivers/windows/windows.go index 0b15b2aa49..16d1ca2cb9 100644 --- a/libnetwork/drivers/windows/windows.go +++ b/libnetwork/drivers/windows/windows.go @@ -62,10 +62,17 @@ type EndpointConnectivity struct { } type hnsEndpoint struct { - id string - nid string - profileID string - Type string + id string + nid string + profileID string + Type string + //Note: Currently, the sandboxID is the same as the containerID since windows does + //not expose the sandboxID. + //In the future, windows will support a proper sandboxID that is different + //than the containerID. + //Therefore, we are using sandboxID now, so that we won't have to change this code + //when windows properly supports a sandboxID. + sandboxID string macAddress net.HardwareAddr epOption *endpointOption // User specified parameters epConnectivity *EndpointConnectivity // User specified parameters @@ -730,7 +737,15 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, return err } - // This is just a stub for now + endpoint.sandboxID = sboxKey + + err = hcsshim.HotAttachEndpoint(endpoint.sandboxID, endpoint.profileID) + if err != nil { + // If container doesn't exists in hcs, do not throw error for hot add/remove + if err != hcsshim.ErrComputeSystemDoesNotExist { + return err + } + } jinfo.DisableGatewayService() return nil @@ -744,13 +759,18 @@ func (d *driver) Leave(nid, eid string) error { } // Ensure that the endpoint exists - _, err = network.getEndpoint(eid) + endpoint, err := network.getEndpoint(eid) if err != nil { return err } - // This is just a stub for now - + err = hcsshim.HotDetachEndpoint(endpoint.sandboxID, endpoint.profileID) + if err != nil { + // If container doesn't exists in hcs, do not throw error for hot add/remove + if err != hcsshim.ErrComputeSystemDoesNotExist { + return err + } + } return nil } diff --git a/libnetwork/osl/namespace_windows.go b/libnetwork/osl/namespace_windows.go index bfdca30bcb..49503c00ff 100644 --- a/libnetwork/osl/namespace_windows.go +++ b/libnetwork/osl/namespace_windows.go @@ -5,12 +5,7 @@ import "testing" // GenerateKey generates a sandbox key based on the passed // container id. func GenerateKey(containerID string) string { - maxLen := 12 - if len(containerID) < maxLen { - maxLen = len(containerID) - } - - return containerID[:maxLen] + return containerID } // NewSandbox provides a new sandbox instance created in an os specific way