mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-20 20:02:17 +02:00
Move MPLS label selection logic to MplsPathIntentCompiler
Change-Id: I2c64ca2a6ac363a0138e6940471893673ce3b83f
This commit is contained in:
parent
9f676b64af
commit
cc0e65dbb0
@ -47,6 +47,7 @@ import org.onosproject.net.intent.IntentCompiler;
|
|||||||
import org.onosproject.net.intent.IntentExtensionService;
|
import org.onosproject.net.intent.IntentExtensionService;
|
||||||
import org.onosproject.net.intent.MplsPathIntent;
|
import org.onosproject.net.intent.MplsPathIntent;
|
||||||
import org.onosproject.net.link.LinkStore;
|
import org.onosproject.net.link.LinkStore;
|
||||||
|
import org.onosproject.net.resource.ResourceRequest;
|
||||||
import org.onosproject.net.resource.link.DefaultLinkResourceRequest;
|
import org.onosproject.net.resource.link.DefaultLinkResourceRequest;
|
||||||
import org.onosproject.net.resource.link.LinkResourceAllocations;
|
import org.onosproject.net.resource.link.LinkResourceAllocations;
|
||||||
import org.onosproject.net.resource.link.LinkResourceRequest;
|
import org.onosproject.net.resource.link.LinkResourceRequest;
|
||||||
@ -55,13 +56,18 @@ import org.onosproject.net.resource.link.MplsLabel;
|
|||||||
import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
|
import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
|
||||||
import org.onosproject.net.resource.ResourceAllocation;
|
import org.onosproject.net.resource.ResourceAllocation;
|
||||||
import org.onosproject.net.resource.ResourceType;
|
import org.onosproject.net.resource.ResourceType;
|
||||||
|
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static org.slf4j.LoggerFactory.getLogger;
|
import static org.slf4j.LoggerFactory.getLogger;
|
||||||
@ -117,11 +123,34 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> {
|
|||||||
linkRequest.add(linkStore.getLink(link.dst(), link.src()));
|
linkRequest.add(linkStore.getLink(link.dst(), link.src()));
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkResourceRequest.Builder request = DefaultLinkResourceRequest
|
Map<Link, MplsLabel> labels = findMplsLabels(linkRequest);
|
||||||
.builder(intent.id(), linkRequest).addMplsRequest();
|
|
||||||
LinkResourceAllocations reqMpls = resourceService
|
LinkResourceRequest request = DefaultLinkResourceRequest
|
||||||
.requestResources(request.build());
|
.builder(intent.id(), linkRequest)
|
||||||
return reqMpls;
|
.addMplsRequest(labels)
|
||||||
|
.build();
|
||||||
|
return resourceService.requestResources(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Link, MplsLabel> findMplsLabels(Set<Link> links) {
|
||||||
|
Map<Link, MplsLabel> labels = new HashMap<>();
|
||||||
|
for (Link link : links) {
|
||||||
|
Optional<MplsLabel> label = findMplsLabel(link);
|
||||||
|
if (label.isPresent()) {
|
||||||
|
labels.put(link, label.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return labels;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<MplsLabel> findMplsLabel(Link link) {
|
||||||
|
Iterable<ResourceRequest> freeLabels = resourceService.getAvailableResources(link);
|
||||||
|
return StreamSupport.stream(freeLabels.spliterator(), false)
|
||||||
|
.filter(x -> x instanceof MplsLabelResourceRequest)
|
||||||
|
.map(x -> (MplsLabelResourceRequest) x)
|
||||||
|
.map(MplsLabelResourceRequest::mplsLabel)
|
||||||
|
.findFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) {
|
private MplsLabel getMplsLabel(LinkResourceAllocations allocations, Link link) {
|
||||||
|
@ -45,7 +45,6 @@ import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
|
|||||||
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
|
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -84,28 +83,6 @@ public class LinkResourceManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns available MPLS label on specified link.
|
|
||||||
*
|
|
||||||
* @param link the link
|
|
||||||
* @return available MPLS labels on specified link
|
|
||||||
*/
|
|
||||||
private Iterable<MplsLabel> getAvailableMplsLabels(Link link) {
|
|
||||||
Set<ResourceAllocation> resAllocs = store.getFreeResources(link);
|
|
||||||
if (resAllocs == null) {
|
|
||||||
return Collections.emptySet();
|
|
||||||
}
|
|
||||||
Set<MplsLabel> mplsLabels = new HashSet<>();
|
|
||||||
for (ResourceAllocation res : resAllocs) {
|
|
||||||
if (res.type() == ResourceType.MPLS_LABEL) {
|
|
||||||
|
|
||||||
mplsLabels.add(((MplsLabelResourceAllocation) res).mplsLabel());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mplsLabels;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LinkResourceAllocations requestResources(LinkResourceRequest req) {
|
public LinkResourceAllocations requestResources(LinkResourceRequest req) {
|
||||||
checkPermission(LINK_WRITE);
|
checkPermission(LINK_WRITE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user