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.math.BigInteger;
11 import java.util.Formatter;
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;
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();
38 private IfmCLIUtil() {
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"));
46 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "", "Dpn", "PortName",
49 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Tag", "PortNo",
50 "AdmState", "OpState"));
52 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Description", "", "", ""));
54 session.getConsole().println(fmt
55 .format("--------------------------------------------------------------------------------"));
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,
68 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
69 "", ifaceInfo == null ? UNSET : ifaceInfo.getDpId(),
70 ifaceInfo == null ? UNSET : ifaceInfo.getPortName(), vlanId));
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()));
78 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT + "%n",
79 iface.getDescription(), "", "", ""));
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"));
90 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "Local IP",
91 "Remote IP", "Gateway IP", "AdmState"));
93 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "OpState", "Parent",
96 session.getConsole().println(fmt
97 .format("--------------------------------------------------------------------------------"));
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,
106 iface.getDescription() == null ? UNSET : iface.getDescription()));
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()));
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(),
120 interfaceInfo == null ? UNSET : interfaceInfo.getInterfaceTag(), ""));
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"));
131 session.getConsole().println(fmt
132 .format(IF_TP_OUTPUT_FORMAT, "InterfaceName"));
134 session.getConsole().println(fmt
135 .format("--------------------------------------------------------------------------------"));
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()));
146 session.getConsole().println(fmt.format(IF_TP_OUTPUT_FORMAT, ifName));
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"));
156 session.getConsole().println(fmt
157 .format("--------------------------------------------------------------------------------"));
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()));
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));
176 session.getConsole().println(fmt
177 .format("--------------------------------------------------------------------------------"));
179 session.getConsole().println(fmt
180 .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
182 session.getConsole().println(fmt
183 .format(TP_OUTPUT_FORMAT_LINE2, "PortDetails"));
185 session.getConsole().println(fmt
186 .format("--------------------------------------------------------------------------------"));
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()));
196 session.getConsole().println(getPortDetails(port));
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);
211 private static String getPortDetails(OvsdbTerminationPointAugmentation port) {
212 if (SouthboundUtils.isInterfaceTypeTunnel(port.getInterfaceType())) {
213 String remoteIp = UNSET;
214 String localIp = UNSET;
216 for (Options portOption: port.getOptions()) {
217 switch (portOption.getOption()) {
219 localIp = portOption.getValue();
222 remoteIp = portOption.getValue();
225 key = portOption.getValue();
231 return String.format(TP_VXLAN_OUTPUT_FORMAT_LINE1, localIp, remoteIp, key);
233 return String.format(TP_OUTPUT_FORMAT_LINE2, UNSET);