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.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
11 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
12 import static org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker.syncReadOptional;
14 import com.google.common.base.Optional;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Locale;
21 import org.apache.karaf.shell.commands.Argument;
22 import org.apache.karaf.shell.commands.Command;
23 import org.apache.karaf.shell.commands.Option;
24 import org.apache.karaf.shell.console.OsgiCommandSupport;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
34 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
38 @Command(scope = "vpnservice", name = "subnet-show",
39 description = "Comparison of data present in subnetMap and subnetOpDataEntry")
40 public class ShowSubnet extends OsgiCommandSupport {
42 private static final Logger LOG = LoggerFactory.getLogger(ShowSubnet.class);
44 @Option(name = "--subnetmap", aliases = {"--subnetmap"},
45 description = "Display subnetMap details for given subnetId", required = false, multiValued = false)
48 @Option(name = "--subnetopdata", aliases = {"--subnetopdata"},
49 description = "Display subnetOpData details for given subnetId", required = false, multiValued = false)
52 @Argument(name = "subnetopdataall|subnetmapall", description = "Display subnetOpData details or subnetmap details"
53 + "for all subnet", required = false, multiValued = true)
54 private final List<String> options = null;
56 private DataBroker dataBroker;
57 private List<Subnetmap> subnetmapList = new ArrayList<>();
58 private final Map<Uuid, SubnetOpDataEntry> subnetOpDataEntryMap = new HashMap<>();
60 public void setDataBroker(DataBroker broker) {
61 this.dataBroker = broker;
65 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
66 protected Object doExecute() throws Exception {
67 if (subnetmap == null && subnetopdata == null && (options == null || options.isEmpty())) {
69 System.out.println("Following subnetId is present in both subnetMap and subnetOpDataEntry\n");
70 for (Subnetmap candidateSubnetmap : subnetmapList) {
71 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
73 System.out.println(candidateSubnetmap.getId().toString() + "\n");
76 System.out.println("\n\nFollowing subnetId is present in subnetMap but not in subnetOpDataEntry\n");
77 for (Subnetmap candidateSubnetmap : subnetmapList) {
78 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
80 System.out.println(candidateSubnetmap.getId().toString() + "\n");
84 } else if (subnetmap == null) {
85 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
86 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
87 Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
88 SubnetOpDataEntry data = optionalSubs.get();
89 System.out.println("Fetching subnetmap for given subnetId\n");
90 System.out.println("------------------------------------------------------------------------------");
91 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
92 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
93 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
94 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
95 System.out.println("------------------------------------------------------------------------------");
97 if (subnetmap == null && subnetopdata != null) {
98 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
99 .child(SubnetOpDataEntry.class).build();
100 Optional<SubnetOpDataEntry> optionalSubnetOpDataEntries =
101 syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
102 if (optionalSubnetOpDataEntries.isPresent()) {
103 optionalSubnetOpDataEntries.asSet().forEach(subnetOpDataEntry -> {
104 SubnetOpDataEntry data = subnetOpDataEntry;
105 System.out.println("Fetching subnetmapdataentry for given subnetId\n");
106 System.out.println("------------------------"
107 + "------------------------------------------------------");
108 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
109 + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
110 + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
111 + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
112 + data.getVpnName() + "\n");
113 System.out.println("------------------------"
114 + "------------------------------------------------------");
118 if (subnetmap != null && subnetopdata == null) {
119 InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
120 .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
121 Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
122 Subnetmap data = sn.get();
123 System.out.println("Fetching subnetopdata for given subnetId\n");
124 System.out.println("------------------------------------------------------------------------------");
125 String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
126 ? data.getRouterInterfacePortId().getValue() : "null");
127 System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
128 + "InternetVpnId: " + data.getInternetVpnId() + "\n"
129 + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
130 + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
131 + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
132 + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
133 + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
134 + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
135 + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
136 System.out.println("------------------------------------------------------------------------------");
137 } else if (subnetopdata == null) {
138 InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
139 .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
140 Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
141 Subnetmap data = sn.get();
142 System.out.println("Fetching subnetopdata for given subnetId\n");
143 System.out.println("------------------------------------------------------------------------------");
144 String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
145 ? data.getRouterInterfacePortId().getValue() : "null");
146 System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
147 + "InternetVpnId: " + data.getInternetVpnId() + "\n"
148 + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
149 + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
150 + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
151 + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
152 + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
153 + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
154 + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
155 System.out.println("------------------------------------------------------------------------------");
157 InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
158 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
159 Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
160 SubnetOpDataEntry data = optionalSubs.get();
161 System.out.println("Fetching subnetmap for given subnetId\n");
162 System.out.println("------------------------------------------------------------------------------");
163 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
164 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
165 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
166 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
167 System.out.println("------------------------------------------------------------------------------");
169 Boolean optionsSubnetopdataall = false;
170 Boolean optionsSubnetmapall = false;
171 if (options != null && !options.isEmpty()) {
172 for (String opt : options) {
173 String optLowCase = opt == null ? "" : opt.toLowerCase(Locale.ENGLISH);
174 if (optLowCase.startsWith("subnetop")) {
175 optionsSubnetopdataall = true;
177 if (optLowCase.startsWith("subnetmap")) {
178 optionsSubnetmapall = true;
182 if (optionsSubnetopdataall) {
183 InstanceIdentifier<SubnetOpData> subOpIdentifier =
184 InstanceIdentifier.builder(SubnetOpData.class).build();
185 Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
186 if (optionalSubnetOpData.isPresent()) {
187 List<SubnetOpDataEntry> subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
188 System.out.println("number of subnetOpDataEntry found are : " + subnetOpDataEntryList + "\n");
189 subnetOpDataEntryList.forEach(subnetOpDataEntry -> {
190 SubnetOpDataEntry data = subnetOpDataEntry;
191 System.out.println("Fetching subnetmap for given subnetId\n");
192 System.out.println("------------------------"
193 + "------------------------------------------------------");
194 System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
195 + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
196 + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
197 + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
198 + data.getVpnName() + "\n");
199 System.out.println("------------------------"
200 + "------------------------------------------------------");
203 System.out.println("No SubnetOpDataEntry present in Oper DS");
206 if (optionsSubnetmapall) {
207 InstanceIdentifier<Subnetmaps> subMapIdentifier = InstanceIdentifier.builder(Subnetmaps.class).build();
208 Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subMapIdentifier);
209 if (optionalSubnetmaps.isPresent()) {
210 List<Subnetmap> subnetMapList = optionalSubnetmaps.get().getSubnetmap();
211 System.out.println("number of subnetmaps found are : " + subnetMapList.size() + "\n");
212 subnetMapList.forEach(sn -> {
214 System.out.println("Fetching subnetmap for given subnetId\n");
215 System.out.println("------------------------"
216 + "------------------------------------------------------");
217 System.out.println("Uuid: " + sn.getId() + "\n" + "SubnetIp: " + sn.getSubnetIp() + "\n"
218 + "NetworkId: " + sn.getNetworkId() + "\n" + "NetworkType: " + sn.getNetworkType()
219 + "\nSegmentationId: " + sn.getSegmentationId() + "\n" + "TenantId: " + sn.getTenantId()
220 + "\n" + "RouterId: " + sn.getRouterId() + "\n" + "RouterInterfacePortId: "
221 + sn.getRouterInterfacePortId() + "\nRouterIntfMacAddress: "
222 + sn.getRouterIntfMacAddress() + "\n"
223 + "RouterInterfaceFixedIp: " + sn.getRouterInterfaceFixedIp() + "\n"
224 + "VpnId: " + sn.getVpnId() + "\n"
225 + "InternetVpnId: " + sn.getInternetVpnId() + "\n");
226 if (sn.getPortList() != null) {
227 System.out.println("There are " + sn.getPortList().size()
228 + " port in the port-list");
229 for (int i = 0; i < sn.getPortList().size(); i++) {
230 System.out.println("\tport num " + i + " :\t" + sn.getPortList().get(i));
233 if (sn.getDirectPortList() != null) {
234 System.out.println("There are " + sn.getDirectPortList().size()
235 + " port in the list of direct-port");
236 for (int i = 0; i < sn.getDirectPortList().size(); i++) {
237 System.out.println("\tdirect port num " + i
238 + " :\t" + sn.getDirectPortList().get(i));
241 System.out.println("------------------------"
242 + "------------------------------------------------------");
246 System.out.println("No Subnetmap present in Config DS");
253 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
254 private void getSubnet() throws ReadFailedException {
255 List<SubnetOpDataEntry> subnetOpDataEntryList = new ArrayList<>();
256 InstanceIdentifier<Subnetmaps> subnetmapsid = InstanceIdentifier.builder(Subnetmaps.class).build();
257 InstanceIdentifier<SubnetOpData> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class).build();
258 Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subnetmapsid);
259 if (!optionalSubnetmaps.isPresent()) {
260 System.out.println("No Subnetmaps configured.");
262 subnetmapList = optionalSubnetmaps.get().getSubnetmap();
265 Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
266 if (!optionalSubnetOpData.isPresent()) {
267 System.out.println("No SubnetOpData configured.");
269 subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
272 for (SubnetOpDataEntry subnetOpDataEntry : subnetOpDataEntryList) {
273 subnetOpDataEntryMap.put(subnetOpDataEntry.getSubnetId(), subnetOpDataEntry);
277 // TODO Clean up the console output
278 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
279 private void getshowVpnCLIHelp() {
280 System.out.println("\nUsage 1: "
281 + "To display subnetMaps for a given subnetId subnet-show --subnetmap [<subnetId>]");
282 System.out.println("\nUsage 2: "
283 + "To display subnetOpDataEntry for a given subnetId subnet-show --subnetopdata [<subnetId>]");
284 System.out.println("\nUsage 3 : To display all subnetopdata or all subnetmap"
285 + " use these options subnetopdataall or subnetmapall");