mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-20 11:52:12 +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.MplsPathIntent;
|
||||
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.LinkResourceAllocations;
|
||||
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.ResourceAllocation;
|
||||
import org.onosproject.net.resource.ResourceType;
|
||||
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static org.slf4j.LoggerFactory.getLogger;
|
||||
@ -117,11 +123,34 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> {
|
||||
linkRequest.add(linkStore.getLink(link.dst(), link.src()));
|
||||
}
|
||||
|
||||
LinkResourceRequest.Builder request = DefaultLinkResourceRequest
|
||||
.builder(intent.id(), linkRequest).addMplsRequest();
|
||||
LinkResourceAllocations reqMpls = resourceService
|
||||
.requestResources(request.build());
|
||||
return reqMpls;
|
||||
Map<Link, MplsLabel> labels = findMplsLabels(linkRequest);
|
||||
|
||||
LinkResourceRequest request = DefaultLinkResourceRequest
|
||||
.builder(intent.id(), linkRequest)
|
||||
.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) {
|
||||
|
@ -45,7 +45,6 @@ import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
|
||||
import org.onosproject.net.resource.link.MplsLabelResourceRequest;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
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
|
||||
public LinkResourceAllocations requestResources(LinkResourceRequest req) {
|
||||
checkPermission(LINK_WRITE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user