c3982b81169c66ff9648c8c7ab6704790c472036
[genius.git] / interfacemanager / interfacemanager-shell / src / main / java / org / opendaylight / genius / interfacemanager / shell / IfmCLIUtil.java
1 /*
2  * Copyright (c) 2016 - 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.genius.interfacemanager.shell;
9
10 import java.math.BigInteger;
11 import java.util.Formatter;
12
13 import org.apache.felix.service.command.CommandSession;
14 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
15 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceOpState;
16 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
23
24 public class IfmCLIUtil {
25     private static final String VLAN_OUTPUT_FORMAT_LINE1 = "%-55s";
26     private static final String VLAN_OUTPUT_FORMAT = "%-24s %-20s %-15s %-24s";
27     private static final String VXLAN_OUTPUT_FORMAT = "%-24s %-24s %-18s %-5s";
28     private static final String VXLAN_OUTPUT_FORMAT_LINE1 = "%-49s %-45s";
29     private static final String IF_TP_OUTPUT_FORMAT = "%-24s";
30     private static final String TP_OUTPUT_FORMAT = "%-24s %-20s %-8s";
31     private static final String TP_VXLAN_OUTPUT_FORMAT_LINE1 = "local_ip:%-24s remote_ip:%-24s key:%-12s";
32     private static final String BRIDGE_PORTS_OUTPUT_FORMAT_HEADER = "%-8s %-20s";
33     private static final String TP_OUTPUT_FORMAT_LINE2 = "%-12s";
34     private static final String UNSET = "N/A";
35     private static final int IFTYPE_LEN = "InterfaceType".length();
36
37     public static void showVlanHeaderOutput(CommandSession session) {
38         StringBuilder sb = new StringBuilder();
39         Formatter fmt = new Formatter(sb);
40         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1, "Name"));
41         sb.setLength(0);
42         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "", "Dpn", "PortName",
43                 "Vlan-Id"));
44         sb.setLength(0);
45         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Tag", "PortNo",
46                 "AdmState", "OpState"));
47         sb.setLength(0);
48         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Description", "", "", ""));
49         sb.setLength(0);
50         session.getConsole().println(fmt
51             .format("--------------------------------------------------------------------------------"));
52         sb.setLength(0);
53         fmt.close();
54     }
55
56     public static void showVlanOutput(InterfaceInfo ifaceInfo, Interface iface, CommandSession session) {
57         StringBuilder sb = new StringBuilder();
58         Formatter fmt = new Formatter(sb);
59         IfL2vlan l2vlan = iface.getAugmentation(IfL2vlan.class);
60         int vlanId = l2vlan != null ? l2vlan.getVlanId() != null ? l2vlan.getVlanId().getValue() : 0 : 0;
61         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1,
62                 iface.getName()));
63         sb.setLength(0);
64         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
65                 "", ifaceInfo == null ? UNSET : ifaceInfo.getDpId(),
66                 ifaceInfo == null ? UNSET : ifaceInfo.getPortName(), vlanId));
67         sb.setLength(0);
68         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
69                 ifaceInfo == null ? UNSET : ifaceInfo.getInterfaceTag(),
70                 ifaceInfo == null ? UNSET  : ifaceInfo.getPortNo(),
71                 ifaceInfo == null ? UNSET : ifaceInfo.getAdminState(),
72                 ifaceInfo == null ? UNSET : ifaceInfo.getOpState()));
73         sb.setLength(0);
74         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT + "\n",
75                 iface.getDescription(), "", "", ""));
76         sb.setLength(0);
77         fmt.close();
78     }
79
80     public static void showVxlanHeaderOutput(CommandSession session) {
81         StringBuilder sb = new StringBuilder();
82         Formatter fmt = new Formatter(sb);
83         session.getConsole().println(fmt
84                 .format(VXLAN_OUTPUT_FORMAT_LINE1, "Name", "Description"));
85         sb.setLength(0);
86         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "Local IP",
87                 "Remote IP", "Gateway IP", "AdmState"));
88         sb.setLength(0);
89         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "OpState", "Parent",
90                 "Tag", ""));
91         sb.setLength(0);
92         session.getConsole().println(fmt
93                 .format("--------------------------------------------------------------------------------"));
94         fmt.close();
95     }
96
97     public static void showVxlanOutput(Interface iface, InterfaceInfo interfaceInfo, CommandSession session) {
98         StringBuilder sb = new StringBuilder();
99         Formatter fmt = new Formatter(sb);
100         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT_LINE1,
101                 iface.getName(),
102                 iface.getDescription() == null ? UNSET : iface.getDescription()));
103         sb.setLength(0);
104         IfTunnel ifTunnel = iface.getAugmentation(IfTunnel.class);
105         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT,
106                 new String(ifTunnel.getTunnelSource().getValue()),
107                 new String(ifTunnel.getTunnelDestination().getValue()),
108                 ifTunnel.getTunnelGateway() == null ? UNSET : new String(ifTunnel.getTunnelGateway().getValue()),
109                 interfaceInfo == null ? InterfaceInfo.InterfaceAdminState.DISABLED : interfaceInfo.getAdminState()));
110         sb.setLength(0);
111         ParentRefs parentRefs = iface.getAugmentation(ParentRefs.class);
112         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT + "\n",
113                 interfaceInfo == null ? InterfaceOpState.DOWN : interfaceInfo.getOpState(),
114                 String.format("%s/%s", parentRefs.getDatapathNodeIdentifier(),
115                         iface.getName()),
116                 interfaceInfo == null ? UNSET : interfaceInfo.getInterfaceTag(), ""));
117         fmt.close();
118     }
119
120     //TODO: Capture more information and cleaner display for TerminationPoint
121     public static void showInterfaceToTpHeader(CommandSession session) {
122         StringBuilder sb = new StringBuilder();
123         Formatter fmt = new Formatter(sb);
124         session.getConsole().println(fmt
125                         .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
126         sb.setLength(0);
127         session.getConsole().println(fmt
128                 .format(IF_TP_OUTPUT_FORMAT, "InterfaceName"));
129         sb.setLength(0);
130         session.getConsole().println(fmt
131                 .format("--------------------------------------------------------------------------------"));
132         fmt.close();
133     }
134
135     public static void showInterfaceToTpOutput(String ifName, OvsdbTerminationPointAugmentation port,
136                     CommandSession session) {
137         StringBuilder sb = new StringBuilder();
138         Formatter fmt = new Formatter(sb);
139         session.getConsole().println(fmt
140             .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
141         sb.setLength(0);
142         session.getConsole().println(fmt.format(IF_TP_OUTPUT_FORMAT, ifName));
143         sb.setLength(0);
144         fmt.close();
145     }
146
147     public static void showBridgePortsHeader(CommandSession session, BigInteger dpnId) {
148         StringBuilder sb = new StringBuilder();
149         Formatter fmt = new Formatter(sb);
150         session.getConsole().println(fmt
151                 .format(BRIDGE_PORTS_OUTPUT_FORMAT_HEADER, "DPN-ID", dpnId));
152         sb.setLength(0);
153         session.getConsole().println(fmt
154                 .format("--------------------------------------------------------------------------------"));
155         sb.setLength(0);
156         session.getConsole().println(fmt
157                         .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
158         sb.setLength(0);
159         session.getConsole().println(fmt
160                         .format(TP_OUTPUT_FORMAT_LINE2, "PortDetails"));
161         sb.setLength(0);
162         session.getConsole().println(fmt
163                         .format("--------------------------------------------------------------------------------"));
164         fmt.close();
165     }
166
167     public static void showBridgePortsOutput(CommandSession session, OvsdbTerminationPointAugmentation port) {
168         StringBuilder sb = new StringBuilder();
169         Formatter fmt = new Formatter(sb);
170         session.getConsole().println(fmt
171             .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
172         sb.setLength(0);
173         session.getConsole().println(getPortDetails(port));
174         sb.setLength(0);
175         fmt.close();
176     }
177
178     private static String getPortTypeStr(OvsdbTerminationPointAugmentation port) {
179         String portType = port.getInterfaceType().getSimpleName();
180         // Skip the InterfaceType part
181         if (portType.startsWith("InterfaceType")) {
182             return portType.substring(IFTYPE_LEN);
183         } else {
184             return portType;
185         }
186     }
187
188     private static String getPortDetails(OvsdbTerminationPointAugmentation port) {
189         if (SouthboundUtils.isInterfaceTypeTunnel(port.getInterfaceType())) {
190             String remoteIp = UNSET;
191             String localIp = UNSET;
192             String key = UNSET;
193             for (Options portOption: port.getOptions()) {
194                 if (portOption.getOption().equals("local_ip")) {
195                     localIp = portOption.getValue();
196                 } else if (portOption.getOption().equals("remote_ip")) {
197                     remoteIp = portOption.getValue();
198                 } else if (portOption.getOption().equals("key")) {
199                     key = portOption.getValue();
200                 }
201             }
202             return String.format(TP_VXLAN_OUTPUT_FORMAT_LINE1, localIp, remoteIp, key);
203         }
204         return String.format(TP_OUTPUT_FORMAT_LINE2, UNSET);
205     }
206 }