2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.neutronvpn.shell;
10 import static org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker.syncReadOptional;
11 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION;
12 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Locale;
20 import java.util.Optional;
21 import java.util.concurrent.ExecutionException;
23 import org.apache.karaf.shell.commands.Argument;
24 import org.apache.karaf.shell.commands.Command;
25 import org.apache.karaf.shell.commands.Option;
26 import org.apache.karaf.shell.console.OsgiCommandSupport;
27 import org.opendaylight.mdsal.binding.api.DataBroker;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 @Command(scope = "vpnservice", name = "subnet-show",
40 description = "Comparison of data present in subnetMap and subnetOpDataEntry")
41 public class ShowSubnet extends OsgiCommandSupport {
43 private static final Logger LOG = LoggerFactory.getLogger(ShowSubnet.class);
45 @Option(name = "--subnetmap", aliases = {"--subnetmap"},
46 description = "Display subnetMap details for given subnetId", required = false, multiValued = false)
49 @Option(name = "--subnetopdata", aliases = {"--subnetopdata"},
50 description = "Display subnetOpData details for given subnetId", required = false, multiValued = false)
53 @Argument(name = "subnetopdataall|subnetmapall", description = "Display subnetOpData details or subnetmap details"
54 + "for all subnet", required = false, multiValued = true)
55 private final List<String> options = null;
57 private DataBroker dataBroker;
58 private List<Subnetmap> subnetmapList = new ArrayList<>();
59 private final Map<Uuid, SubnetOpDataEntry> subnetOpDataEntryMap = new HashMap<>();
61 public void setDataBroker(DataBroker broker) {
62 this.dataBroker = broker;
66 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
67 protected Object doExecute() throws Exception {
68 if (subnetmap == null && subnetopdata == null && (options == null || options.isEmpty())) {
70 System.out.println("Following subnetId is present in both subnetMap and subnetOpDataEntry\n");
71 for (Subnetmap candidateSubnetmap : subnetmapList) {
72 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
74 System.out.println(candidateSubnetmap.getId().toString() + "\n");
77 System.out.println("\n\nFollowing subnetId is present in subnetMap but not in subnetOpDataEntry\n");
78 for (Subnetmap candidateSubnetmap : subnetmapList) {
79 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
81 System.out.println(candidateSubnetmap.getId().toString() + "\n");
85 } else if (subnetmap == null) {
86 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
87 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
88 Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
89 SubnetOpDataEntry data = optionalSubs.get();
90 System.out.println("Fetching subnetmap for given subnetId\n");
91 System.out.println("------------------------------------------------------------------------------");
92 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
93 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
94 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
95 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
96 System.out.println("------------------------------------------------------------------------------");
98 if (subnetmap == null && subnetopdata != null) {
99 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
100 .child(SubnetOpDataEntry.class).build();
101 Optional<SubnetOpDataEntry> optionalSubnetOpDataEntries =
102 syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
103 if (optionalSubnetOpDataEntries.isPresent()) {
104 Collections.singleton(optionalSubnetOpDataEntries.get()).forEach(subnetOpDataEntry -> {
105 SubnetOpDataEntry data = subnetOpDataEntry;
106 System.out.println("Fetching subnetmapdataentry for given subnetId\n");
107 System.out.println("------------------------"
108 + "------------------------------------------------------");
109 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
110 + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
111 + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
112 + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
113 + data.getVpnName() + "\n");
114 System.out.println("------------------------"
115 + "------------------------------------------------------");
119 if (subnetmap != null && subnetopdata == null) {
120 InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
121 .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
122 Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
123 Subnetmap data = sn.get();
124 System.out.println("Fetching subnetopdata for given subnetId\n");
125 System.out.println("------------------------------------------------------------------------------");
126 String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
127 ? data.getRouterInterfacePortId().getValue() : "null");
128 System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
129 + "InternetVpnId: " + data.getInternetVpnId() + "\n"
130 + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
131 + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
132 + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
133 + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
134 + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
135 + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
136 + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
137 System.out.println("------------------------------------------------------------------------------");
138 } else if (subnetopdata == null) {
139 InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
140 .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
141 Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
142 Subnetmap data = sn.get();
143 System.out.println("Fetching subnetopdata for given subnetId\n");
144 System.out.println("------------------------------------------------------------------------------");
145 String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
146 ? data.getRouterInterfacePortId().getValue() : "null");
147 System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
148 + "InternetVpnId: " + data.getInternetVpnId() + "\n"
149 + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
150 + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
151 + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
152 + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
153 + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
154 + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
155 + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
156 System.out.println("------------------------------------------------------------------------------");
158 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
159 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
160 Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
161 SubnetOpDataEntry data = optionalSubs.get();
162 System.out.println("Fetching subnetmap for given subnetId\n");
163 System.out.println("------------------------------------------------------------------------------");
164 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
165 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
166 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
167 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
168 System.out.println("------------------------------------------------------------------------------");
170 Boolean optionsSubnetopdataall = false;
171 Boolean optionsSubnetmapall = false;
172 if (options != null && !options.isEmpty()) {
173 for (String opt : options) {
174 String optLowCase = opt == null ? "" : opt.toLowerCase(Locale.ENGLISH);
175 if (optLowCase.startsWith("subnetop")) {
176 optionsSubnetopdataall = true;
178 if (optLowCase.startsWith("subnetmap")) {
179 optionsSubnetmapall = true;
183 if (optionsSubnetopdataall) {
184 InstanceIdentifier<SubnetOpData> subOpIdentifier =
185 InstanceIdentifier.builder(SubnetOpData.class).build();
186 Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
187 if (optionalSubnetOpData.isPresent()) {
188 List<SubnetOpDataEntry> subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
189 System.out.println("number of subnetOpDataEntry found are : " + subnetOpDataEntryList + "\n");
190 subnetOpDataEntryList.forEach(subnetOpDataEntry -> {
191 SubnetOpDataEntry data = subnetOpDataEntry;
192 System.out.println("Fetching subnetmap for given subnetId\n");
193 System.out.println("------------------------"
194 + "------------------------------------------------------");
195 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
196 + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
197 + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
198 + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
199 + data.getVpnName() + "\n");
200 System.out.println("------------------------"
201 + "------------------------------------------------------");
204 System.out.println("No SubnetOpDataEntry present in Oper DS");
207 if (optionsSubnetmapall) {
208 InstanceIdentifier<Subnetmaps> subMapIdentifier = InstanceIdentifier.builder(Subnetmaps.class).build();
209 Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subMapIdentifier);
210 if (optionalSubnetmaps.isPresent()) {
211 List<Subnetmap> subnetMapList = optionalSubnetmaps.get().getSubnetmap();
212 System.out.println("number of subnetmaps found are : " + subnetMapList.size() + "\n");
213 subnetMapList.forEach(sn -> {
215 System.out.println("Fetching subnetmap for given subnetId\n");
216 System.out.println("------------------------"
217 + "------------------------------------------------------");
218 System.out.println("Uuid: " + sn.getId() + "\n" + "SubnetIp: " + sn.getSubnetIp() + "\n"
219 + "NetworkId: " + sn.getNetworkId() + "\n" + "NetworkType: " + sn.getNetworkType()
220 + "\nSegmentationId: " + sn.getSegmentationId() + "\n" + "TenantId: " + sn.getTenantId()
221 + "\n" + "RouterId: " + sn.getRouterId() + "\n" + "RouterInterfacePortId: "
222 + sn.getRouterInterfacePortId() + "\nRouterIntfMacAddress: "
223 + sn.getRouterIntfMacAddress() + "\n"
224 + "RouterInterfaceFixedIp: " + sn.getRouterInterfaceFixedIp() + "\n"
225 + "VpnId: " + sn.getVpnId() + "\n"
226 + "InternetVpnId: " + sn.getInternetVpnId() + "\n");
227 if (sn.getPortList() != null) {
228 System.out.println("There are " + sn.getPortList().size()
229 + " port in the port-list");
230 for (int i = 0; i < sn.getPortList().size(); i++) {
231 System.out.println("\tport num " + i + " :\t" + sn.getPortList().get(i));
234 if (sn.getDirectPortList() != null) {
235 System.out.println("There are " + sn.getDirectPortList().size()
236 + " port in the list of direct-port");
237 for (int i = 0; i < sn.getDirectPortList().size(); i++) {
238 System.out.println("\tdirect port num " + i
239 + " :\t" + sn.getDirectPortList().get(i));
242 System.out.println("------------------------"
243 + "------------------------------------------------------");
247 System.out.println("No Subnetmap present in Config DS");
254 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
255 private void getSubnet() throws ExecutionException, InterruptedException {
256 List<SubnetOpDataEntry> subnetOpDataEntryList = new ArrayList<>();
257 InstanceIdentifier<Subnetmaps> subnetmapsid = InstanceIdentifier.builder(Subnetmaps.class).build();
258 InstanceIdentifier<SubnetOpData> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class).build();
259 Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subnetmapsid);
260 if (!optionalSubnetmaps.isPresent()) {
261 System.out.println("No Subnetmaps configured.");
263 subnetmapList = optionalSubnetmaps.get().getSubnetmap();
266 Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
267 if (!optionalSubnetOpData.isPresent()) {
268 System.out.println("No SubnetOpData configured.");
270 subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
273 for (SubnetOpDataEntry subnetOpDataEntry : subnetOpDataEntryList) {
274 subnetOpDataEntryMap.put(subnetOpDataEntry.getSubnetId(), subnetOpDataEntry);
278 // TODO Clean up the console output
279 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
280 private void getshowVpnCLIHelp() {
281 System.out.println("\nUsage 1: "
282 + "To display subnetMaps for a given subnetId subnet-show --subnetmap [<subnetId>]");
283 System.out.println("\nUsage 2: "
284 + "To display subnetOpDataEntry for a given subnetId subnet-show --subnetopdata [<subnetId>]");
285 System.out.println("\nUsage 3 : To display all subnetopdata or all subnetmap"
286 + " use these options subnetopdataall or subnetmapall");