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