diff --git a/cli/src/main/java/org/onlab/onos/cli/net/AddPointToPointIntentCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/AddPointToPointIntentCommand.java index e1ede9fb07..ed98c7e84f 100644 --- a/cli/src/main/java/org/onlab/onos/cli/net/AddPointToPointIntentCommand.java +++ b/cli/src/main/java/org/onlab/onos/cli/net/AddPointToPointIntentCommand.java @@ -74,7 +74,7 @@ public class AddPointToPointIntentCommand extends ConnectivityIntentCommand { * @param deviceString string representing the device/port * @return port number as a string, empty string if the port is not found */ - private String getPortNumber(String deviceString) { + public static String getPortNumber(String deviceString) { int slash = deviceString.indexOf('/'); if (slash <= 0) { return ""; @@ -88,7 +88,7 @@ public class AddPointToPointIntentCommand extends ConnectivityIntentCommand { * @param deviceString string representing the device/port * @return device ID string */ - private String getDeviceId(String deviceString) { + public static String getDeviceId(String deviceString) { int slash = deviceString.indexOf('/'); if (slash <= 0) { return ""; diff --git a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java index 88548a10e3..f5c65e5f55 100644 --- a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java +++ b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.karaf.shell.commands.Command; +import org.apache.karaf.shell.commands.Option; import org.onlab.onos.cli.AbstractShellCommand; import org.onlab.onos.net.ConnectPoint; import org.onlab.onos.net.Link; @@ -44,6 +45,11 @@ import java.util.Set; description = "Lists the inventory of intents and their states") public class IntentsListCommand extends AbstractShellCommand { + @Option(name = "-i", aliases = "--installable", description = "Output Installable Intents", + required = false, multiValued = false) + private boolean showInstallable = false; + + @Override protected void execute() { IntentService service = get(IntentService.class); @@ -93,7 +99,7 @@ public class IntentsListCommand extends AbstractShellCommand { } List installable = service.getInstallableIntents(intent.id()); - if (installable != null && !installable.isEmpty()) { + if (showInstallable && installable != null && !installable.isEmpty()) { print(" installable=%s", installable); } } diff --git a/cli/src/main/java/org/onlab/onos/cli/net/ResourceAllocationsCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/ResourceAllocationsCommand.java new file mode 100644 index 0000000000..b91ed3e9c7 --- /dev/null +++ b/cli/src/main/java/org/onlab/onos/cli/net/ResourceAllocationsCommand.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.onos.cli.net; + +import org.apache.karaf.shell.commands.Argument; +import org.apache.karaf.shell.commands.Command; +import org.onlab.onos.cli.AbstractShellCommand; +import org.onlab.onos.net.ConnectPoint; +import org.onlab.onos.net.DeviceId; +import org.onlab.onos.net.Link; +import org.onlab.onos.net.PortNumber; +import org.onlab.onos.net.link.LinkService; +import org.onlab.onos.net.resource.LinkResourceAllocations; +import org.onlab.onos.net.resource.LinkResourceService; + +import static org.onlab.onos.cli.net.AddPointToPointIntentCommand.getDeviceId; +import static org.onlab.onos.cli.net.AddPointToPointIntentCommand.getPortNumber; +import static org.onlab.onos.net.DeviceId.deviceId; +import static org.onlab.onos.net.PortNumber.portNumber; + +/** + * Lists allocations by link. + */ +@Command(scope = "onos", name = "resource-allocations", + description = "Lists allocations by link") +public class ResourceAllocationsCommand extends AbstractShellCommand { + + private static final String FMT = "src=%s/%s, dst=%s/%s, type=%s%s"; + private static final String COMPACT = "%s/%s-%s/%s"; + + @Argument(index = 0, name = "srcString", description = "Link source", + required = false, multiValued = false) + String srcString = null; + @Argument(index = 1, name = "dstString", description = "Link destination", + required = false, multiValued = false) + String dstString = null; + + @Override + protected void execute() { + LinkResourceService resourceService = get(LinkResourceService.class); + LinkService linkService = get(LinkService.class); + + Iterable itr = null; + try { + DeviceId ingressDeviceId = deviceId(getDeviceId(srcString)); + PortNumber ingressPortNumber = portNumber(getPortNumber(srcString)); + ConnectPoint src = new ConnectPoint(ingressDeviceId, ingressPortNumber); + + DeviceId egressDeviceId = deviceId(getDeviceId(dstString)); + PortNumber egressPortNumber = portNumber(getPortNumber(dstString)); + ConnectPoint dst = new ConnectPoint(egressDeviceId, egressPortNumber); + + Link link = linkService.getLink(src, dst); + + itr = resourceService.getAllocations(link); + + for (LinkResourceAllocations allocation : itr) { + print("%s", allocation.getResourceAllocation(link)); + } + + } catch (Exception e) { + print("----- Displaying all resource allocations -----", e.getMessage()); + itr = resourceService.getAllocations(); + for (LinkResourceAllocations allocation : itr) { + print("%s", allocation); + } + + } + } +} diff --git a/cli/src/main/java/org/onlab/onos/cli/net/ResourceAvailableCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/ResourceAvailableCommand.java new file mode 100644 index 0000000000..e67990d048 --- /dev/null +++ b/cli/src/main/java/org/onlab/onos/cli/net/ResourceAvailableCommand.java @@ -0,0 +1,91 @@ +/* + * Copyright 2014 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.onos.cli.net; + +import org.apache.karaf.shell.commands.Argument; +import org.apache.karaf.shell.commands.Command; +import org.onlab.onos.cli.AbstractShellCommand; +import org.onlab.onos.net.ConnectPoint; +import org.onlab.onos.net.DeviceId; +import org.onlab.onos.net.Link; +import org.onlab.onos.net.PortNumber; +import org.onlab.onos.net.link.LinkService; +import org.onlab.onos.net.resource.LinkResourceService; +import org.onlab.onos.net.resource.ResourceRequest; + +import static org.onlab.onos.cli.net.AddPointToPointIntentCommand.getDeviceId; +import static org.onlab.onos.cli.net.AddPointToPointIntentCommand.getPortNumber; +import static org.onlab.onos.net.DeviceId.deviceId; +import static org.onlab.onos.net.PortNumber.portNumber; + +/** + * Lists allocations by link. + */ +@Command(scope = "onos", name = "resource-available", + description = "Lists available resources by link") +public class ResourceAvailableCommand extends AbstractShellCommand { + + private static final String FMT = "src=%s/%s, dst=%s/%s, type=%s%s"; + private static final String COMPACT = "%s/%s-%s/%s"; + + @Argument(index = 0, name = "srcString", description = "Link source", + required = false, multiValued = false) + String srcString = null; + @Argument(index = 1, name = "dstString", description = "Link destination", + required = false, multiValued = false) + String dstString = null; + + @Override + protected void execute() { + LinkResourceService resourceService = get(LinkResourceService.class); + LinkService linkService = get(LinkService.class); + + Iterable itr = null; + try { + DeviceId ingressDeviceId = deviceId(getDeviceId(srcString)); + PortNumber ingressPortNumber = portNumber(getPortNumber(srcString)); + ConnectPoint src = new ConnectPoint(ingressDeviceId, ingressPortNumber); + + DeviceId egressDeviceId = deviceId(getDeviceId(dstString)); + PortNumber egressPortNumber = portNumber(getPortNumber(dstString)); + ConnectPoint dst = new ConnectPoint(egressDeviceId, egressPortNumber); + + Link link = linkService.getLink(src, dst); + + itr = resourceService.getAvailableResources(link); + + int lambdaCount = 0; + for (ResourceRequest req : itr) { + switch (req.type()) { + case LAMBDA: + lambdaCount++; + break; + case BANDWIDTH: + print("%s", req); + break; + default: + break; + } + } + if (lambdaCount > 0) { + print("Number of available lambdas: %d", lambdaCount); + } + + } catch (Exception e) { + print("Invalid link", e.getMessage()); + } + } +} diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml index bbccb9461d..78b1dc1b17 100644 --- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml +++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml @@ -158,7 +158,22 @@ - + + + + + + + + + + + + + + + + diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceAllocation.java b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceAllocation.java index e540db2142..62051ad8bc 100644 --- a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceAllocation.java +++ b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceAllocation.java @@ -15,6 +15,8 @@ */ package org.onlab.onos.net.resource; +import com.google.common.base.MoreObjects; + /** * Representation of allocated bandwidth resource. */ @@ -35,4 +37,11 @@ public class BandwidthResourceAllocation extends BandwidthResourceRequest public BandwidthResourceAllocation(Bandwidth bandwidth) { super(bandwidth); } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("bandwidth", bandwidth()) + .toString(); + } } diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java index cced791260..52b4112515 100644 --- a/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java +++ b/core/api/src/main/java/org/onlab/onos/net/resource/BandwidthResourceRequest.java @@ -15,6 +15,8 @@ */ package org.onlab.onos.net.resource; +import com.google.common.base.MoreObjects; + /** * Representation of a request for bandwidth resource. */ @@ -53,4 +55,11 @@ public class BandwidthResourceRequest implements ResourceRequest { public ResourceType type() { return ResourceType.BANDWIDTH; } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("bandwidth", bandwidth) + .toString(); + } } diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceAllocation.java b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceAllocation.java index 1c81f1fe1e..9032cc47c8 100644 --- a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceAllocation.java +++ b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceAllocation.java @@ -15,6 +15,8 @@ */ package org.onlab.onos.net.resource; +import com.google.common.base.MoreObjects; + import java.util.Objects; /** @@ -64,4 +66,11 @@ public class LambdaResourceAllocation extends LambdaResourceRequest final LambdaResourceAllocation other = (LambdaResourceAllocation) obj; return Objects.equals(this.lambda, other.lambda); } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("lambda", lambda) + .toString(); + } } diff --git a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java index 382758a6c3..dab8793ad8 100644 --- a/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java +++ b/core/api/src/main/java/org/onlab/onos/net/resource/LambdaResourceRequest.java @@ -15,6 +15,8 @@ */ package org.onlab.onos.net.resource; +import com.google.common.base.MoreObjects; + /** * Representation of a request for lambda resource. */ @@ -25,4 +27,9 @@ public class LambdaResourceRequest implements ResourceRequest { return ResourceType.LAMBDA; } + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .toString(); + } } diff --git a/core/net/src/main/java/org/onlab/onos/net/resource/impl/DefaultLinkResourceAllocations.java b/core/net/src/main/java/org/onlab/onos/net/resource/impl/DefaultLinkResourceAllocations.java index 28ace887e9..13e02e565b 100644 --- a/core/net/src/main/java/org/onlab/onos/net/resource/impl/DefaultLinkResourceAllocations.java +++ b/core/net/src/main/java/org/onlab/onos/net/resource/impl/DefaultLinkResourceAllocations.java @@ -15,11 +15,7 @@ */ package org.onlab.onos.net.resource.impl; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Set; - +import com.google.common.base.MoreObjects; import org.onlab.onos.net.Link; import org.onlab.onos.net.intent.IntentId; import org.onlab.onos.net.resource.LinkResourceAllocations; @@ -28,6 +24,11 @@ import org.onlab.onos.net.resource.ResourceAllocation; import org.onlab.onos.net.resource.ResourceRequest; import org.onlab.onos.net.resource.ResourceType; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + /** * Implementation of {@link LinkResourceAllocations}. */ @@ -38,11 +39,11 @@ public class DefaultLinkResourceAllocations implements LinkResourceAllocations { /** * Creates a new link resource allocations. * - * @param request requested resources + * @param request requested resources * @param allocations allocated resources */ DefaultLinkResourceAllocations(LinkResourceRequest request, - Map> allocations) { + Map> allocations) { this.request = request; this.allocations = allocations; } @@ -76,4 +77,10 @@ public class DefaultLinkResourceAllocations implements LinkResourceAllocations { return result; } + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("allocations", allocations) + .toString(); + } }