2 * Copyright © 2016, 2017 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.vpnmanager.shell;
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.HashSet;
13 import java.util.List;
15 import java.util.Objects;
16 import java.util.Optional;
18 import java.util.concurrent.ExecutionException;
19 import org.apache.karaf.shell.commands.Command;
20 import org.apache.karaf.shell.commands.Option;
21 import org.apache.karaf.shell.console.OsgiCommandSupport;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.opendaylight.mdsal.binding.api.DataBroker;
24 import org.opendaylight.mdsal.binding.api.ReadTransaction;
25 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
26 import org.opendaylight.netvirt.vpnmanager.api.VpnHelper;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInterfaceOpData;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn._interface.op.data.VpnInterfaceOpDataEntry;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInstances;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInterfaces;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstance;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.interfaces.VpnInterface;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.interfaces.vpn._interface.VpnInstanceNames;
34 import org.opendaylight.yangtools.yang.binding.DataObject;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 @Command(scope = "vpnservice", name = "vpn-show", description = "Display all present vpnInstances with their "
40 + "respective count of oper and config vpnInterfaces")
41 public class ShowVpn extends OsgiCommandSupport {
43 @Option(name = "--detail", aliases = {"--vpninstance"}, description = "Display oper and config interfaces for "
44 + "given vpnInstanceName", required = false, multiValued = false)
45 private String detail;
47 private static final Logger LOG = LoggerFactory.getLogger(ShowVpn.class);
48 private DataBroker dataBroker;
49 private int configCount = 0;
50 private int operCount = 0;
51 private int totalOperCount = 0;
52 private int totalConfigCount = 0;
53 private Integer ifPresent;
54 private List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances
55 .VpnInstance> vpnInstanceList = new ArrayList<>();
56 private List<VpnInterface> vpnInterfaceConfigList = new ArrayList<>();
57 private List<VpnInterfaceOpDataEntry> vpnInterfaceOpList = new ArrayList<>();
59 public void setDataBroker(DataBroker broker) {
60 this.dataBroker = broker;
65 protected Object doExecute() {
66 Map<String, Integer> vpnNameToConfigInterfaceMap = new HashMap<>();
67 Map<String, Integer> vpnNameToOperInterfaceMap = new HashMap<>();
70 Set<String> vpnInstances = new HashSet<>();
71 for (VpnInterface vpnInterface : vpnInterfaceConfigList) {
72 if (vpnInterface.getVpnInstanceNames() != null) {
73 for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.getVpnInstanceNames().values()) {
74 String vpnName = vpnInterfaceVpnInstance.getVpnName();
75 if (vpnName != null) {
76 vpnInstances.add(vpnName);
81 for (String routerId : vpnInstances) {
82 ifPresent = vpnNameToConfigInterfaceMap.get(routerId);
83 if (ifPresent == null) {
84 vpnNameToConfigInterfaceMap.put(routerId, 1);
86 vpnNameToConfigInterfaceMap.put(routerId,
87 vpnNameToConfigInterfaceMap.get(routerId) + 1);
90 for (VpnInterfaceOpDataEntry vpnInterfaceOp : vpnInterfaceOpList) {
91 ifPresent = vpnNameToOperInterfaceMap.get(vpnInterfaceOp.getVpnInstanceName());
92 if (ifPresent == null) {
93 vpnNameToOperInterfaceMap.put(vpnInterfaceOp.getVpnInstanceName(), 1);
95 vpnNameToOperInterfaceMap.put(vpnInterfaceOp.getVpnInstanceName(),
96 vpnNameToOperInterfaceMap.get(vpnInterfaceOp.getVpnInstanceName()) + 1);
99 session.getConsole().println("-----------------------------------------------------------------------");
100 session.getConsole().println(
101 String.format(" %s %14s %5s %5s", "VpnInstanceName", "RD", "Config Count",
103 session.getConsole().println(
104 "\n-----------------------------------------------------------------------");
105 for (VpnInstance vpnInstance : vpnInstanceList) {
108 Integer count = vpnNameToConfigInterfaceMap.get(vpnInstance.getVpnInstanceName());
110 configCount = vpnNameToConfigInterfaceMap.get(vpnInstance.getVpnInstanceName());
111 totalConfigCount = totalConfigCount + configCount;
113 count = vpnNameToOperInterfaceMap.get(vpnInstance.getVpnInstanceName());
115 operCount = vpnNameToOperInterfaceMap.get(vpnInstance.getVpnInstanceName());
116 totalOperCount = totalOperCount + operCount;
118 session.getConsole().println(
119 String.format("%-32s %-10s %-10s %-10s", vpnInstance.getVpnInstanceName(),
120 vpnInstance.getRouteDistinguisher(), configCount, operCount));
122 session.getConsole().println("-----------------------------------------------------------------------");
123 session.getConsole().println(
124 String.format("Total Count: %19s %8s", totalConfigCount, totalOperCount));
125 session.getConsole().println(getshowVpnCLIHelp());
128 session.getConsole().println("Present Config VpnInterfaces are:");
129 for (VpnInterface vpnInterface : vpnInterfaceConfigList) {
130 if (vpnInterface.getVpnInstanceNames() != null && VpnHelper.doesVpnInterfaceBelongToVpnInstance(detail,
131 new ArrayList<VpnInstanceNames>(vpnInterface.getVpnInstanceNames().values()))) {
132 session.getConsole().println(vpnInterface.getName());
135 session.getConsole().println("Present Oper VpnInterfaces are:");
136 for (VpnInterfaceOpDataEntry vpnInterfaceOp : vpnInterfaceOpList) {
137 if (Objects.equals(vpnInterfaceOp.getVpnInstanceName(), detail)) {
138 session.getConsole().println(vpnInterfaceOp.getName());
145 private <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType,
146 InstanceIdentifier<T> path) {
147 try (ReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
148 return tx.read(datastoreType, path).get();
149 } catch (InterruptedException | ExecutionException e) {
150 throw new RuntimeException(e);
154 private void showVpn() {
155 InstanceIdentifier<VpnInstances> vpnsIdentifier = InstanceIdentifier.builder(VpnInstances.class).build();
156 InstanceIdentifier<VpnInterfaces> vpnInterfacesIdentifier = InstanceIdentifier.builder(VpnInterfaces
158 Optional<VpnInstances> optionalVpnInstances = read(LogicalDatastoreType.CONFIGURATION, vpnsIdentifier);
160 if (!optionalVpnInstances.isPresent()) {
161 LOG.trace("No VPNInstances configured.");
162 session.getConsole().println("No VPNInstances configured.");
164 vpnInstanceList = new ArrayList<VpnInstance>(optionalVpnInstances.get().nonnullVpnInstance().values());
167 Optional<VpnInterfaces> optionalVpnInterfacesConfig =
168 read(LogicalDatastoreType.CONFIGURATION, vpnInterfacesIdentifier);
170 if (!optionalVpnInterfacesConfig.isPresent() && optionalVpnInterfacesConfig.get().getVpnInterface() == null) {
171 LOG.trace("No Config VpnInterface is present");
172 session.getConsole().println("No Config VpnInterface is present");
174 vpnInterfaceConfigList = new ArrayList<VpnInterface>(optionalVpnInterfacesConfig.get()
175 .nonnullVpnInterface().values());
179 InstanceIdentifier<VpnInterfaceOpData> id = InstanceIdentifier.create(VpnInterfaceOpData.class);
180 Optional<VpnInterfaceOpData> optionalVpnInterfacesOper = read(LogicalDatastoreType.OPERATIONAL, id);
182 if (!optionalVpnInterfacesOper.isPresent()
183 && optionalVpnInterfacesOper.get().getVpnInterfaceOpDataEntry() == null) {
184 LOG.trace("No Oper VpnInterface is present");
185 session.getConsole().println("No Oper VpnInterface is present");
187 vpnInterfaceOpList = new ArrayList<VpnInterfaceOpDataEntry>(optionalVpnInterfacesOper.get()
188 .getVpnInterfaceOpDataEntry().values());
192 private String getshowVpnCLIHelp() {
193 StringBuilder help = new StringBuilder("\nUsage:");
194 help.append("To display vpn-interfaces for a particular vpnInstance vpn-show --detail [<vpnInstanceName>]");
195 return help.toString();