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.List;
16 import java.util.Optional;
17 import java.util.concurrent.ExecutionException;
19 import org.apache.karaf.shell.commands.Argument;
20 import org.apache.karaf.shell.commands.Command;
21 import org.apache.karaf.shell.console.OsgiCommandSupport;
22 import org.opendaylight.mdsal.binding.api.DataBroker;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortData;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPort;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPortKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPort;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPortKey;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 @Command(scope = "vpnservice", name = "vpn-ipaddress-to-port-show",
34 description = "Displays the IPAddresses and Ports on which they are configured (or) discovered for "
36 public class ShowVpnIpToPort extends OsgiCommandSupport {
38 private static final Logger LOG = LoggerFactory.getLogger(ShowVpnIpToPort.class);
40 @Argument(index = 0, name = "--vpn-name", description = "Name of the Vpn Instance", required = false,
42 private String vpnName;
43 @Argument(index = 1, name = "--ip-address", description = "Ip address to search for in the Vpn Instance",
44 required = false, multiValued = false)
45 private String portFixedIp;
47 private DataBroker dataBroker;
48 private List<VpnPortipToPort> vpnPortipToPortList = new ArrayList<>();
49 private List<LearntVpnVipToPort> vpnVipToPortList = new ArrayList<>();
51 public void setDataBroker(DataBroker broker) {
52 this.dataBroker = broker;
56 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
57 protected Object doExecute() throws Exception {
58 if (vpnName == null && portFixedIp == null) {
60 getLearntVpnVipPort();
61 System.out.println(vpnPortipToPortList.size() + " Entries are present: ");
62 System.out.println("-----------------------------------------------------------------------");
63 System.out.println(String.format(" %s %24s %20s %32s", "VpnName", "IPAddress",
64 "MacAddress", "Port"));
65 System.out.println("-----------------------------------------------------------------------");
66 for (VpnPortipToPort vpnPortipToPort : vpnPortipToPortList) {
67 System.out.println(String.format(" %-32s %-16s %-16s %-32s", vpnPortipToPort.getVpnName(),
68 vpnPortipToPort.getPortFixedip(),
69 vpnPortipToPort.getMacAddress(),
70 vpnPortipToPort.getPortName()));
72 for (LearntVpnVipToPort learntVpnVipToPort : vpnVipToPortList) {
73 System.out.println(String.format("* %-32s %-16s %-16s %-32s", learntVpnVipToPort.getVpnName(),
74 learntVpnVipToPort.getPortFixedip(),
75 learntVpnVipToPort.getMacAddress(),
76 learntVpnVipToPort.getPortName()));
78 System.out.println("\n * prefixed entries are Learned.");
79 System.out.println("\n" + getshowVpnCLIHelp());
80 } else if (portFixedIp == null || vpnName == null) {
81 System.out.println("Insufficient arguments"
82 + "\nCorrect Usage : neutronvpn-port-show [<vpnName> <portFixedIp>]");
84 InstanceIdentifier<VpnPortipToPort> id =
85 InstanceIdentifier.builder(NeutronVpnPortipPortData.class)
86 .child(VpnPortipToPort.class, new VpnPortipToPortKey(portFixedIp, vpnName)).build();
87 Optional<VpnPortipToPort> vpnPortipToPortData = syncReadOptional(dataBroker, CONFIGURATION, id);
88 if (vpnPortipToPortData.isPresent()) {
89 VpnPortipToPort data = vpnPortipToPortData.get();
90 System.out.println("\n----------"
91 + "---------------------------------------------------------------------------------");
92 System.out.println("VpnName: " + data.getVpnName() + "\nIPAddress: " + data.getPortFixedip()
93 + "\nMacAddress: " + data.getMacAddress() + "\nPort: " + data.getPortName());
94 System.out.println("\n----------"
95 + "---------------------------------------------------------------------------------");
97 InstanceIdentifier<LearntVpnVipToPort> learntId =
98 InstanceIdentifier.builder(LearntVpnVipToPortData.class)
99 .child(LearntVpnVipToPort.class, new LearntVpnVipToPortKey(portFixedIp, vpnName)).build();
100 Optional<LearntVpnVipToPort> learntVpnVipToPortData =
101 syncReadOptional(dataBroker, OPERATIONAL, learntId);
102 if (!learntVpnVipToPortData.isPresent()) {
103 System.out.println("Data not available");
106 LearntVpnVipToPort data = learntVpnVipToPortData.get();
107 System.out.println("\n----------"
108 + "---------------------------------------------------------------------------------");
109 System.out.println("VpnName: * " + data.getVpnName() + "\nIPAddress: " + data.getPortFixedip()
110 + "\nMacAddress: " + data.getMacAddress() + "\nPort: " + data.getPortName());
111 System.out.println("\n----------"
112 + "---------------------------------------------------------------------------------");
114 System.out.println("\n" + getshowVpnCLIHelp());
119 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
120 private void getNeutronVpnPort() throws ExecutionException, InterruptedException {
121 InstanceIdentifier<NeutronVpnPortipPortData> neutronVpnPortipPortDataIdentifier = InstanceIdentifier
122 .builder(NeutronVpnPortipPortData.class).build();
123 Optional<NeutronVpnPortipPortData> optionalNeutronVpnPort = syncReadOptional(dataBroker, CONFIGURATION,
124 neutronVpnPortipPortDataIdentifier);
125 if (!optionalNeutronVpnPort.isPresent()) {
126 System.out.println("No NeutronVpnPortIpToPortData configured.");
128 vpnPortipToPortList = optionalNeutronVpnPort.get().getVpnPortipToPort();
132 @SuppressWarnings("checkstyle:RegexpSinglelineJava")
133 private void getLearntVpnVipPort() throws ExecutionException, InterruptedException {
134 InstanceIdentifier<LearntVpnVipToPortData> learntVpnVipPortDataIdentifier = InstanceIdentifier
135 .builder(LearntVpnVipToPortData.class).build();
136 Optional<LearntVpnVipToPortData> optionalLearntVpnPort = syncReadOptional(dataBroker, OPERATIONAL,
137 learntVpnVipPortDataIdentifier);
138 if (!optionalLearntVpnPort.isPresent()) {
139 System.out.println("No LearntVpnVipToPortData discovered.");
141 vpnVipToPortList = optionalLearntVpnPort.get().getLearntVpnVipToPort();
145 private String getshowVpnCLIHelp() {
146 StringBuilder help = new StringBuilder("Usage:");
147 help.append("To display ports and their associated vpn instances "
148 + "neutronvpn-port-show [<vpnName> <portFixedIp>].\n");
149 return help.toString();