From c81c45bbdeb2287753d08d050f71f07516f2f53e Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Thu, 20 Oct 2016 17:02:44 -0700 Subject: [PATCH] CLI command that shows all subnets configured in Segment Routing Change-Id: Ib03ec2039b763f3796548923883fc89913a1ceac --- .../segmentrouting/SegmentRoutingManager.java | 10 ++++ .../segmentrouting/SegmentRoutingService.java | 12 +++++ .../cli/DeviceSubnetListCommand.java | 49 +++++++++++++++++++ .../cli/RerouteNetworkCommand.java | 16 ++++++ .../OSGI-INF/blueprint/shell-config.xml | 3 ++ 5 files changed, 90 insertions(+) create mode 100644 apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/DeviceSubnetListCommand.java diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java index 72b6401ab5..6c25b7d817 100644 --- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java +++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java @@ -15,6 +15,7 @@ */ package org.onosproject.segmentrouting; +import com.google.common.collect.Maps; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; @@ -454,6 +455,15 @@ public class SegmentRoutingManager implements SegmentRoutingService { defaultRoutingHandler.startPopulationProcess(); } + @Override + public Map> getDeviceSubnetMap() { + Map> deviceSubnetMap = Maps.newHashMap(); + deviceService.getAvailableDevices().forEach(device -> { + deviceSubnetMap.put(device.id(), deviceConfiguration.getSubnets(device.id())); + }); + return deviceSubnetMap; + } + /** * Returns the tunnel object with the tunnel ID. * diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java index f78d869d62..d8d155e614 100644 --- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java +++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java @@ -15,7 +15,12 @@ */ package org.onosproject.segmentrouting; +import org.onlab.packet.Ip4Prefix; +import org.onosproject.net.DeviceId; + import java.util.List; +import java.util.Map; +import java.util.Set; /** * Segment Routing Service for REST API. @@ -109,4 +114,11 @@ public interface SegmentRoutingService { * */ void rerouteNetwork(); + + /** + * Returns device-subnet mapping. + * + * @return device-subnet mapping + */ + Map> getDeviceSubnetMap(); } diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/DeviceSubnetListCommand.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/DeviceSubnetListCommand.java new file mode 100644 index 0000000000..119d1e933e --- /dev/null +++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/DeviceSubnetListCommand.java @@ -0,0 +1,49 @@ +/* + * Copyright 2016-present 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.onosproject.segmentrouting.cli; + +import org.apache.karaf.shell.commands.Command; +import org.onlab.packet.Ip4Prefix; +import org.onosproject.cli.AbstractShellCommand; +import org.onosproject.net.DeviceId; +import org.onosproject.segmentrouting.SegmentRoutingService; + +import java.util.Map; +import java.util.Set; + +/** + * Command to list device-subnet mapping in Segment Routing. + */ +@Command(scope = "onos", name = "sr-device-subnets", + description = "List device-subnet mapping in Segment Routing") +public class DeviceSubnetListCommand extends AbstractShellCommand { + @Override + protected void execute() { + SegmentRoutingService srService = + AbstractShellCommand.get(SegmentRoutingService.class); + printDeviceSubnetMap(srService.getDeviceSubnetMap()); + } + + private void printDeviceSubnetMap(Map> deviceSubnetMap) { + deviceSubnetMap.forEach(((deviceId, ip4Prefices) -> { + print("%s", deviceId); + ip4Prefices.forEach(ip4Prefix -> { + print(" %s", ip4Prefix); + }); + })); + } +} diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/RerouteNetworkCommand.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/RerouteNetworkCommand.java index 3c7d782356..cf34629746 100644 --- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/RerouteNetworkCommand.java +++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/cli/RerouteNetworkCommand.java @@ -1,3 +1,19 @@ +/* + * Copyright 2016-present 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.onosproject.segmentrouting.cli; diff --git a/apps/segmentrouting/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/segmentrouting/src/main/resources/OSGI-INF/blueprint/shell-config.xml index 4c13a4118a..65b8608aa3 100644 --- a/apps/segmentrouting/src/main/resources/OSGI-INF/blueprint/shell-config.xml +++ b/apps/segmentrouting/src/main/resources/OSGI-INF/blueprint/shell-config.xml @@ -37,6 +37,9 @@ + + +