2 * Copyright (c) 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.genius.interfacemanager.shell;
10 import java.util.Formatter;
11 import org.apache.felix.service.command.CommandSession;
12 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
13 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceOpState;
14 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
21 import org.opendaylight.yangtools.yang.common.Uint64;
23 public final class IfmCLIUtil {
24 private static final String VLAN_OUTPUT_FORMAT_LINE1 = "%-55s";
25 private static final String VLAN_OUTPUT_FORMAT = "%-24s %-20s %-15s %-24s";
26 private static final String VXLAN_OUTPUT_FORMAT = "%-24s %-24s %-18s %-5s";
27 private static final String VXLAN_OUTPUT_FORMAT_LINE1 = "%-49s %-45s";
28 private static final String IF_TP_OUTPUT_FORMAT = "%-24s";
29 private static final String TP_OUTPUT_FORMAT = "%-24s %-20s %-8s";
30 private static final String BFD_OUTPUT_FORMAT = "%-24s %-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();
37 private IfmCLIUtil() {
40 static void showVlanHeaderOutput(CommandSession session) {
41 StringBuilder sb = new StringBuilder();
42 Formatter fmt = new Formatter(sb);
43 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1, "Name"));
45 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "", "Dpn", "PortName",
48 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Tag", "PortNo",
49 "AdmState", "OpState"));
51 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Description", "", "", ""));
53 session.getConsole().println(fmt
54 .format("--------------------------------------------------------------------------------"));
59 static void showVlanOutput(InterfaceInfo ifaceInfo, Interface iface, CommandSession session) {
60 StringBuilder sb = new StringBuilder();
61 Formatter fmt = new Formatter(sb);
62 IfL2vlan l2vlan = iface.augmentation(IfL2vlan.class);
63 int vlanId = l2vlan != null ? l2vlan.getVlanId() != null ? l2vlan.getVlanId().getValue().toJava() : 0 : 0;
64 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT_LINE1,
67 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
68 "", ifaceInfo == null ? UNSET : ifaceInfo.getDpId(),
69 ifaceInfo == null ? UNSET : ifaceInfo.getPortName(), vlanId));
71 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
72 ifaceInfo == null ? UNSET : ifaceInfo.getInterfaceTag(),
73 ifaceInfo == null ? UNSET : ifaceInfo.getPortNo(),
74 ifaceInfo == null ? UNSET : ifaceInfo.getAdminState(),
75 ifaceInfo == null ? UNSET : ifaceInfo.getOpState()));
77 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT + "%n",
78 iface.getDescription(), "", "", ""));
83 static void showVxlanHeaderOutput(CommandSession session) {
84 StringBuilder sb = new StringBuilder();
85 Formatter fmt = new Formatter(sb);
86 session.getConsole().println(fmt
87 .format(VXLAN_OUTPUT_FORMAT_LINE1, "Name", "Description"));
89 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "Local IP",
90 "Remote IP", "Gateway IP", "AdmState"));
92 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "OpState", "Parent",
95 session.getConsole().println(fmt
96 .format("--------------------------------------------------------------------------------"));
100 static void showVxlanOutput(Interface iface, InterfaceInfo interfaceInfo, CommandSession session) {
101 StringBuilder sb = new StringBuilder();
102 Formatter fmt = new Formatter(sb);
103 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT_LINE1,
105 iface.getDescription() == null ? UNSET : iface.getDescription()));
107 IfTunnel ifTunnel = iface.augmentation(IfTunnel.class);
108 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT,
109 ifTunnel.getTunnelSource().stringValue(),
110 ifTunnel.getTunnelDestination().stringValue(),
111 ifTunnel.getTunnelGateway() == null ? UNSET : ifTunnel.getTunnelGateway().stringValue(),
112 interfaceInfo == null ? InterfaceInfo.InterfaceAdminState.DISABLED : interfaceInfo.getAdminState()));
114 ParentRefs parentRefs = iface.augmentation(ParentRefs.class);
115 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT + "\n",
116 interfaceInfo == null ? InterfaceOpState.DOWN : interfaceInfo.getOpState(),
117 String.format("%s/%s", parentRefs.getDatapathNodeIdentifier(),
119 interfaceInfo == null ? UNSET : interfaceInfo.getInterfaceTag(), ""));
123 //TODO: Capture more information and cleaner display for TerminationPoint
124 static void showInterfaceToTpHeader(CommandSession session) {
125 StringBuilder sb = new StringBuilder();
126 Formatter fmt = new Formatter(sb);
127 session.getConsole().println(fmt
128 .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
130 session.getConsole().println(fmt
131 .format(IF_TP_OUTPUT_FORMAT, "InterfaceName"));
133 session.getConsole().println(fmt
134 .format("--------------------------------------------------------------------------------"));
138 static void showInterfaceToTpOutput(String ifName, OvsdbTerminationPointAugmentation port,
139 CommandSession session) {
140 StringBuilder sb = new StringBuilder();
141 Formatter fmt = new Formatter(sb);
142 session.getConsole().println(fmt
143 .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
145 session.getConsole().println(fmt.format(IF_TP_OUTPUT_FORMAT, ifName));
150 static void printBfdCachesHeader(CommandSession session) {
151 StringBuilder sb = new StringBuilder();
152 Formatter fmt = new Formatter(sb);
153 session.getConsole().println(fmt.format(BFD_OUTPUT_FORMAT, "InterfaceName", "OperStatus"));
155 session.getConsole().println(fmt
156 .format("--------------------------------------------------------------------------------"));
160 static void printBfdCachesOutput(String ifName, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
161 .interfaces.rev140508.interfaces.state.Interface.OperStatus st,
162 CommandSession session) {
163 StringBuilder sb = new StringBuilder();
164 Formatter fmt = new Formatter(sb);
165 session.getConsole().println(fmt.format(BFD_OUTPUT_FORMAT, ifName, st.getName()));
169 static void showBridgePortsHeader(CommandSession session, Uint64 dpnId) {
170 StringBuilder sb = new StringBuilder();
171 Formatter fmt = new Formatter(sb);
172 session.getConsole().println(fmt
173 .format(BRIDGE_PORTS_OUTPUT_FORMAT_HEADER, "DPN-ID", dpnId));
175 session.getConsole().println(fmt
176 .format("--------------------------------------------------------------------------------"));
178 session.getConsole().println(fmt
179 .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
181 session.getConsole().println(fmt
182 .format(TP_OUTPUT_FORMAT_LINE2, "PortDetails"));
184 session.getConsole().println(fmt
185 .format("--------------------------------------------------------------------------------"));
189 static void showBridgePortsOutput(CommandSession session, OvsdbTerminationPointAugmentation port) {
190 StringBuilder sb = new StringBuilder();
191 Formatter fmt = new Formatter(sb);
192 session.getConsole().println(fmt
193 .format(TP_OUTPUT_FORMAT, port.getName(), getPortTypeStr(port), port.getOfport()));
195 session.getConsole().println(getPortDetails(port));
200 private static String getPortTypeStr(OvsdbTerminationPointAugmentation port) {
201 String portType = port.getInterfaceType().getSimpleName();
202 // Skip the InterfaceType part
203 if (portType.startsWith("InterfaceType")) {
204 return portType.substring(IFTYPE_LEN);
210 private static String getPortDetails(OvsdbTerminationPointAugmentation port) {
211 if (SouthboundUtils.isInterfaceTypeTunnel(port.getInterfaceType())) {
212 String remoteIp = UNSET;
213 String localIp = UNSET;
215 for (Options portOption: port.nonnullOptions()) {
216 switch (portOption.getOption()) {
218 localIp = portOption.getValue();
221 remoteIp = portOption.getValue();
224 key = portOption.getValue();
230 return String.format(TP_VXLAN_OUTPUT_FORMAT_LINE1, localIp, remoteIp, key);
232 return String.format(TP_OUTPUT_FORMAT_LINE2, UNSET);