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 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();
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"));
42 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "", "Dpn", "PortName",
45 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Tag", "PortNo",
46 "AdmState", "OpState"));
48 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT, "Description", "", "", ""));
50 session.getConsole().println(fmt
51 .format("--------------------------------------------------------------------------------"));
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,
64 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT,
65 "", ifaceInfo == null ? UNSET : ifaceInfo.getDpId(),
66 ifaceInfo == null ? UNSET : ifaceInfo.getPortName(), vlanId));
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()));
74 session.getConsole().println(fmt.format(VLAN_OUTPUT_FORMAT + "\n",
75 iface.getDescription(), "", "", ""));
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"));
86 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "Local IP",
87 "Remote IP", "Gateway IP", "AdmState"));
89 session.getConsole().println(fmt.format(VXLAN_OUTPUT_FORMAT, "OpState", "Parent",
92 session.getConsole().println(fmt
93 .format("--------------------------------------------------------------------------------"));
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,
102 iface.getDescription() == null ? UNSET : iface.getDescription()));
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()));
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(),
116 interfaceInfo == null ? UNSET : interfaceInfo.getInterfaceTag(), ""));
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"));
127 session.getConsole().println(fmt
128 .format(IF_TP_OUTPUT_FORMAT, "InterfaceName"));
130 session.getConsole().println(fmt
131 .format("--------------------------------------------------------------------------------"));
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()));
142 session.getConsole().println(fmt.format(IF_TP_OUTPUT_FORMAT, ifName));
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));
153 session.getConsole().println(fmt
154 .format("--------------------------------------------------------------------------------"));
156 session.getConsole().println(fmt
157 .format(TP_OUTPUT_FORMAT, "PortName", "Type", "OFPort"));
159 session.getConsole().println(fmt
160 .format(TP_OUTPUT_FORMAT_LINE2, "PortDetails"));
162 session.getConsole().println(fmt
163 .format("--------------------------------------------------------------------------------"));
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()));
173 session.getConsole().println(getPortDetails(port));
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);
188 private static String getPortDetails(OvsdbTerminationPointAugmentation port) {
189 if (SouthboundUtils.isInterfaceTypeTunnel(port.getInterfaceType())) {
190 String remoteIp = UNSET;
191 String localIp = 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();
202 return String.format(TP_VXLAN_OUTPUT_FORMAT_LINE1, localIp, remoteIp, key);
204 return String.format(TP_OUTPUT_FORMAT_LINE2, UNSET);