Fixup Augmentable and Identifiable methods changing
[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 final 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 BFD_OUTPUT_FORMAT = "%-24s %-8s";
32     private static final String TP_VXLAN_OUTPUT_FORMAT_LINE1 = "local_ip:%-24s remote_ip:%-24s key:%-12s";
33     private static final String BRIDGE_PORTS_OUTPUT_FORMAT_HEADER = "%-8s %-20s";
34     private static final String TP_OUTPUT_FORMAT_LINE2 = "%-12s";
35     private static final String UNSET = "N/A";
36     private static final int IFTYPE_LEN = "InterfaceType".length();
37
38     private IfmCLIUtil() {
39     }
40
41     static void showVlanHeaderOutput(CommandSession session) {
42         StringBuilder sb = new StringBuilder();
43         Formatter fmt = new Formatter(sb);
44         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1, "Name"));
45         sb.setLength(0);
46         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "", "Dpn", "PortName",
47                 "Vlan-Id"));
48         sb.setLength(0);
49         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Tag", "PortNo",
50                 "AdmState", "OpState"));
51         sb.setLength(0);
52         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Description", "", "", ""));
53         sb.setLength(0);
54         session.getConsole().println(fmt
55             .format("--------------------------------------------------------------------------------"));
56         sb.setLength(0);
57         fmt.close();
58     }
59
60     static void showVlanOutput(InterfaceInfo ifaceInfo, Interface iface, CommandSession session) {
61         StringBuilder sb = new StringBuilder();
62         Formatter fmt = new Formatter(sb);
63         IfL2vlan l2vlan = iface.augmentation(IfL2vlan.class);
64         int vlanId = l2vlan != null ? l2vlan.getVlanId() != null ? l2vlan.getVlanId().getValue() : 0 : 0;
65         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1,
66                 iface.getName()));
67         sb.setLength(0);
68         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
69                 "", ifaceInfo == null ? UNSET : ifaceInfo.getDpId(),
70                 ifaceInfo == null ? UNSET : ifaceInfo.getPortName(), vlanId));
71         sb.setLength(0);
72         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
73                 ifaceInfo == null ? UNSET : ifaceInfo.getInterfaceTag(),
74                 ifaceInfo == null ? UNSET  : ifaceInfo.getPortNo(),
75                 ifaceInfo == null ? UNSET : ifaceInfo.getAdminState(),
76                 ifaceInfo == null ? UNSET : ifaceInfo.getOpState()));
77         sb.setLength(0);
78         session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT + "%n",
79                 iface.getDescription(), "", "", ""));
80         sb.setLength(0);
81         fmt.close();
82     }
83
84     static void showVxlanHeaderOutput(CommandSession session) {
85         StringBuilder sb = new StringBuilder();
86         Formatter fmt = new Formatter(sb);
87         session.getConsole().println(fmt
88                 .format(VXLAN_OUTPUT_FORMAT_LINE1, "Name", "Description"));
89         sb.setLength(0);
90         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "Local IP",
91                 "Remote IP", "Gateway IP", "AdmState"));
92         sb.setLength(0);
93         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "OpState", "Parent",
94                 "Tag", ""));
95         sb.setLength(0);
96         session.getConsole().println(fmt
97                 .format("--------------------------------------------------------------------------------"));
98         fmt.close();
99     }
100
101     static void showVxlanOutput(Interface iface, InterfaceInfo interfaceInfo, CommandSession session) {
102         StringBuilder sb = new StringBuilder();
103         Formatter fmt = new Formatter(sb);
104         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT_LINE1,
105                 iface.getName(),
106                 iface.getDescription() == null ? UNSET : iface.getDescription()));
107         sb.setLength(0);
108         IfTunnel ifTunnel = iface.augmentation(IfTunnel.class);
109         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT,
110                 new String(ifTunnel.getTunnelSource().getValue()),
111                 new String(ifTunnel.getTunnelDestination().getValue()),
112                 ifTunnel.getTunnelGateway() == null ? UNSET : new String(ifTunnel.getTunnelGateway().getValue()),
113                 interfaceInfo == null ? InterfaceInfo.InterfaceAdminState.DISABLED : interfaceInfo.getAdminState()));
114         sb.setLength(0);
115         ParentRefs parentRefs = iface.augmentation(ParentRefs.class);
116         session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT + "\n",
117                 interfaceInfo == null ? InterfaceOpState.DOWN : interfaceInfo.getOpState(),
118                 String.format("%s/%s", parentRefs.getDatapathNodeIdentifier(),
119                         iface.getName()),
120                 interfaceInfo == null ? UNSET : interfaceInfo.getInterfaceTag(), ""));
121         fmt.close();
122     }
123
124     //TODO: Capture more information and cleaner display for TerminationPoint
125     static void showInterfaceToTpHeader(CommandSession session) {
126         StringBuilder sb = new StringBuilder();
127         Formatter fmt = new Formatter(sb);
128         session.getConsole().println(fmt
129                         .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
130         sb.setLength(0);
131         session.getConsole().println(fmt
132                 .format(IF_TP_OUTPUT_FORMAT, "InterfaceName"));
133         sb.setLength(0);
134         session.getConsole().println(fmt
135                 .format("--------------------------------------------------------------------------------"));
136         fmt.close();
137     }
138
139     static void showInterfaceToTpOutput(String ifName, OvsdbTerminationPointAugmentation port,
140                                         CommandSession session) {
141         StringBuilder sb = new StringBuilder();
142         Formatter fmt = new Formatter(sb);
143         session.getConsole().println(fmt
144                 .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
145         sb.setLength(0);
146         session.getConsole().println(fmt.format(IF_TP_OUTPUT_FORMAT, ifName));
147         sb.setLength(0);
148         fmt.close();
149     }
150
151     static void printBfdCachesHeader(CommandSession session) {
152         StringBuilder sb = new StringBuilder();
153         Formatter fmt = new Formatter(sb);
154         session.getConsole().println(fmt.format(BFD_OUTPUT_FORMAT, "InterfaceName", "OperStatus"));
155         sb.setLength(0);
156         session.getConsole().println(fmt
157                 .format("--------------------------------------------------------------------------------"));
158         fmt.close();
159     }
160
161     static void printBfdCachesOutput(String ifName, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
162             .interfaces.rev140508.interfaces.state.Interface.OperStatus st,
163                                        CommandSession session) {
164         StringBuilder sb = new StringBuilder();
165         Formatter fmt = new Formatter(sb);
166         session.getConsole().println(fmt.format(BFD_OUTPUT_FORMAT, ifName, st.getName()));
167         fmt.close();
168     }
169
170     static void showBridgePortsHeader(CommandSession session, BigInteger dpnId) {
171         StringBuilder sb = new StringBuilder();
172         Formatter fmt = new Formatter(sb);
173         session.getConsole().println(fmt
174                 .format(BRIDGE_PORTS_OUTPUT_FORMAT_HEADER, "DPN-ID", dpnId));
175         sb.setLength(0);
176         session.getConsole().println(fmt
177                 .format("--------------------------------------------------------------------------------"));
178         sb.setLength(0);
179         session.getConsole().println(fmt
180                         .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
181         sb.setLength(0);
182         session.getConsole().println(fmt
183                         .format(TP_OUTPUT_FORMAT_LINE2, "PortDetails"));
184         sb.setLength(0);
185         session.getConsole().println(fmt
186                         .format("--------------------------------------------------------------------------------"));
187         fmt.close();
188     }
189
190     static void showBridgePortsOutput(CommandSession session, OvsdbTerminationPointAugmentation port) {
191         StringBuilder sb = new StringBuilder();
192         Formatter fmt = new Formatter(sb);
193         session.getConsole().println(fmt
194             .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
195         sb.setLength(0);
196         session.getConsole().println(getPortDetails(port));
197         sb.setLength(0);
198         fmt.close();
199     }
200
201     private static String getPortTypeStr(OvsdbTerminationPointAugmentation port) {
202         String portType = port.getInterfaceType().getSimpleName();
203         // Skip the InterfaceType part
204         if (portType.startsWith("InterfaceType")) {
205             return portType.substring(IFTYPE_LEN);
206         } else {
207             return portType;
208         }
209     }
210
211     private static String getPortDetails(OvsdbTerminationPointAugmentation port) {
212         if (SouthboundUtils.isInterfaceTypeTunnel(port.getInterfaceType())) {
213             String remoteIp = UNSET;
214             String localIp = UNSET;
215             String key = UNSET;
216             for (Options portOption: port.getOptions()) {
217                 switch (portOption.getOption()) {
218                     case "local_ip":
219                         localIp = portOption.getValue();
220                         break;
221                     case "remote_ip":
222                         remoteIp = portOption.getValue();
223                         break;
224                     case "key":
225                         key = portOption.getValue();
226                         break;
227                     default:
228                         break;
229                 }
230             }
231             return String.format(TP_VXLAN_OUTPUT_FORMAT_LINE1, localIp, remoteIp, key);
232         }
233         return String.format(TP_OUTPUT_FORMAT_LINE2, UNSET);
234     }
235 }