From: Pramila Singh Date: Fri, 6 Sep 2013 05:55:38 +0000 (-0700) Subject: Enhancement to switchmanager CLI commands to display all the properties of node and... X-Git-Tag: releasepom-0.1.0~125^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=c90579dcc6c893fdc4f5aebc153e8e5622c64a68 Enhancement to switchmanager CLI commands to display all the properties of node and nodeconnector Change-Id: I87ee445168e64cc74a7538593503cb43f4e1f50a Signed-off-by: Pramila Singh --- diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Actions.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Actions.java index c26800890b..7b934edfa7 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Actions.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Actions.java @@ -105,4 +105,9 @@ public class Actions extends Property { public String toString() { return "Actions[" + actionsValue + "]"; } + + @Override + public String getStringValue() { + return Integer.toHexString(actionsValue); + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Bandwidth.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Bandwidth.java index 1282d5ef9c..8c3a977518 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Bandwidth.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Bandwidth.java @@ -105,24 +105,25 @@ public class Bandwidth extends Property { @Override public String toString() { - StringBuffer sb = new StringBuffer(); + return "BandWidth[" + getStringValue() + "]"; + } - sb.append("BandWidth["); + @Override + public String getStringValue() { if (this.bandwidthValue == 0) { - sb.append("UnKnown"); + return("UnKnown"); } else if (this.bandwidthValue < BW1Kbps) { - sb.append(this.bandwidthValue + "bps"); + return(this.bandwidthValue + "bps"); } else if (this.bandwidthValue < BW1Mbps) { - sb.append(Long.toString(this.bandwidthValue / BW1Kbps) + "Kbps"); + return(Long.toString(this.bandwidthValue / BW1Kbps) + "Kbps"); } else if (this.bandwidthValue < BW1Gbps) { - sb.append(Long.toString(this.bandwidthValue / BW1Mbps) + "Mbps"); + return(Long.toString(this.bandwidthValue / BW1Mbps) + "Mbps"); } else if (this.bandwidthValue < BW1Tbps) { - sb.append(Long.toString(this.bandwidthValue / BW1Gbps) + "Gbps"); + return(Long.toString(this.bandwidthValue / BW1Gbps) + "Gbps"); } else if (this.bandwidthValue < BW1Pbps) { - sb.append(Long.toString(this.bandwidthValue / BW1Tbps) + "Tbps"); + return(Long.toString(this.bandwidthValue / BW1Tbps) + "Tbps"); + } else { + return(this.bandwidthValue + "bps"); } - - sb.append("]"); - return sb.toString(); } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Buffers.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Buffers.java index 6d7369d72b..4c6e08102b 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Buffers.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Buffers.java @@ -81,4 +81,9 @@ public class Buffers extends Property { public String toString() { return "Buffers[" + buffersValue + "]"; } + + @Override + public String getStringValue() { + return Integer.toHexString(buffersValue); + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Capabilities.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Capabilities.java index 7867b93a68..b2005913d0 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Capabilities.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Capabilities.java @@ -98,4 +98,9 @@ public class Capabilities extends Property { public String toString() { return "Capabilities[" + capabilitiesValue + "]"; } + + @Override + public String getStringValue() { + return Integer.toHexString(capabilitiesValue); + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Config.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Config.java index ef6efc5821..651c2f44e1 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Config.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Config.java @@ -75,4 +75,17 @@ public class Config extends Property { public String toString() { return "Config["+ configValue +"]"; } + + @Override + public String getStringValue() { + if (configValue == 0) { + return "ADMIN_DOWN"; + } else if (configValue == 1) { + return "ADMIN_UP"; + } else if (configValue == 0x7fff) { + return "ADMIN_UNDEF"; + } else { + return String.valueOf(configValue); + } + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Description.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Description.java index 6915404e24..ebc12cdbf7 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Description.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Description.java @@ -65,4 +65,9 @@ public class Description extends Property { public String toString() { return "Description[" + descriptionValue + "]"; } + + @Override + public String getStringValue() { + return descriptionValue; + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ForwardingMode.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ForwardingMode.java index a1d4ff9db7..1b19f19778 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ForwardingMode.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ForwardingMode.java @@ -71,4 +71,9 @@ public class ForwardingMode extends Property { public String toString() { return "Mode[" + modeValue + "]"; } + + @Override + public String getStringValue() { + return (modeValue == ForwardingMode.PROACTIVE_FORWARDING) ? "Proactive" : "Reactive"; + } } \ No newline at end of file diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Latency.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Latency.java index a0ba47b29d..a64ee105cf 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Latency.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Latency.java @@ -112,4 +112,21 @@ public class Latency extends Property { sb.append("]"); return sb.toString(); } + + @Override + public String getStringValue() { + if (this.latencyValue == 0) { + return("UnKnown"); + } else if (this.latencyValue < LATENCY1ns) { + return(this.latencyValue + "psec"); + } else if (this.latencyValue < LATENCY1us) { + return(Long.toString(this.latencyValue / LATENCY1ns) + "nsec"); + } else if (this.latencyValue < LATENCY1ms) { + return(Long.toString(this.latencyValue / LATENCY1us) + "usec"); + } else if (this.latencyValue < LATENCY1s) { + return(Long.toString(this.latencyValue / LATENCY1ms) + "msec"); + } else { + return Long.toString(this.latencyValue) + "sec"; + } + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/MacAddress.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/MacAddress.java index 27e74e0800..2dfa9168fe 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/MacAddress.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/MacAddress.java @@ -109,4 +109,9 @@ public class MacAddress extends Property implements Cloneable { public String toString() { return "MacAddress[" + address + "]"; } + + @Override + public String getStringValue() { + return address; + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Name.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Name.java index d35610add0..92c8454a4d 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Name.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Name.java @@ -74,4 +74,9 @@ public class Name extends Property { public String toString() { return "Name[" + nameValue + "]"; } + + @Override + public String getStringValue() { + return nameValue; + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Property.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Property.java index 574f6d0238..a5deb547e3 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Property.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Property.java @@ -53,6 +53,8 @@ abstract public class Property implements Serializable, Cloneable { return this.name; } + public abstract String getStringValue(); + /** * Used to copy the Property in a polymorphic way * diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/State.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/State.java index 058adb63e2..e47542a7be 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/State.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/State.java @@ -76,4 +76,17 @@ public class State extends Property { public String toString() { return "State[" + stateValue + "]"; } + + @Override + public String getStringValue() { + if (stateValue == 0) { + return ("EDGE_DOWN"); + } else if (stateValue == 1) { + return ("EDGE_UP"); + } else if (stateValue == 0x7fff) { + return ("EDGE_UNK"); + } else { + return String.valueOf(stateValue); + } + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tables.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tables.java index bd50cf9be0..b92c4b693c 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tables.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tables.java @@ -80,4 +80,9 @@ public class Tables extends Property { public String toString() { return "Tables[" + tablesValue + "]"; } + + @Override + public String getStringValue() { + return String.format("%02x", tablesValue); + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tier.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tier.java index 6756a82135..d1af778526 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tier.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Tier.java @@ -72,4 +72,9 @@ public class Tier extends Property { public String toString() { return "Tier[" + tierValue + "]"; } + + @Override + public String getStringValue() { + return String.valueOf(tierValue); + } } diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/TimeStamp.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/TimeStamp.java index b38ec8582b..a2d3d36c6f 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/TimeStamp.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/TimeStamp.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.sal.core; +import java.util.Date; + import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -103,4 +105,9 @@ public class TimeStamp extends Property { public String toString() { return "TimeStamp[" + timestampName + ": " + timestamp +"]"; } + + @Override + public String getStringValue() { + return timestampName + ": " + new Date(timestamp); + } } diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java index d3d41be19f..60330c1ad4 100644 --- a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java @@ -772,6 +772,10 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa propMap.put(Description.propertyName, desc); } continue; + } else if (prop.equals(ForwardingMode.name)) { + Property defaultMode = new ForwardingMode(ForwardingMode.REACTIVE_FORWARDING); + propMap.put(ForwardingMode.name, defaultMode); + continue; } propMap.remove(prop); } @@ -911,8 +915,8 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa } } - // copy node properties from config boolean proactiveForwarding = false; + // copy node properties from config if (nodeConfigList != null) { String nodeId = node.toString(); SwitchConfig conf = nodeConfigList.get(nodeId); @@ -926,6 +930,10 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa } } + if (!propMap.containsKey(ForwardingMode.name)) { + Property defaultMode = new ForwardingMode(ForwardingMode.REACTIVE_FORWARDING); + propMap.put(ForwardingMode.name, defaultMode); + } boolean result = false; if (propMapCurr == null) { if (nodeProps.putIfAbsent(node, propMap) == null) { @@ -1758,8 +1766,6 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa public String getHelp() { StringBuffer help = new StringBuffer(); help.append("---Switch Manager---\n"); - help.append("\t pns - Print connected nodes\n"); - help.append("\t pncs - Print node connectors for a given node\n"); help.append("\t pencs - Print enabled node connectors for a given node\n"); help.append("\t pdm - Print switch ports in device map\n"); help.append("\t snt - Set node tier number\n"); @@ -1768,37 +1774,6 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa return help.toString(); } - public void _pns(CommandInterpreter ci) { - ci.println(" Node Type MAC Name Tier"); - if (nodeProps == null) { - return; - } - Set nodeSet = nodeProps.keySet(); - if (nodeSet == null) { - return; - } - List nodeArray = new ArrayList(); - for (Node node : nodeSet) { - nodeArray.add(node.toString()); - } - Collections.sort(nodeArray); - for (String str: nodeArray) { - Node node = Node.fromString(str); - Description desc = ((Description) getNodeProp(node, - Description.propertyName)); - Tier tier = ((Tier) getNodeProp(node, Tier.TierPropName)); - String nodeName = (desc == null) ? "" : desc.getValue(); - MacAddress mac = (MacAddress) getNodeProp(node, - MacAddress.name); - String macAddr = (mac == null) ? "" : HexEncode - .bytesToHexStringFormat(mac.getMacAddress()); - int tierNum = (tier == null) ? 0 : tier.getValue(); - ci.println(node + " " + node.getType() + " " + macAddr - + " " + nodeName + " " + tierNum); - } - ci.println("Total number of Nodes: " + nodeSet.size()); - } - public void _pencs(CommandInterpreter ci) { String st = ci.nextArgument(); if (st == null) { @@ -1825,43 +1800,6 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa ci.println("Total number of NodeConnectors: " + nodeConnectorSet.size()); } - public void _pncs(CommandInterpreter ci) { - String st = ci.nextArgument(); - if (st == null) { - ci.println("Please enter node id"); - return; - } - - Node node = Node.fromString(st); - if (node == null) { - ci.println("Please enter node id"); - return; - } - - ci.println(" NodeConnector BandWidth(Gbps) Admin State"); - Set nodeConnectorSet = getNodeConnectors(node); - if (nodeConnectorSet == null) { - return; - } - for (NodeConnector nodeConnector : nodeConnectorSet) { - if (nodeConnector == null) { - continue; - } - Map propMap = getNodeConnectorProps(nodeConnector); - Bandwidth bw = (Bandwidth) propMap.get(Bandwidth.BandwidthPropName); - Config config = (Config) propMap.get(Config.ConfigPropName); - State state = (State) propMap.get(State.StatePropName); - String out = nodeConnector + " "; - out += (bw != null) ? bw.getValue() / Math.pow(10, 9) : " "; - out += " "; - out += (config != null) ? config.getValue() : " "; - out += " "; - out += (state != null) ? state.getValue() : " "; - ci.println(out); - } - ci.println("Total number of NodeConnectors: " + nodeConnectorSet.size()); - } - public void _pdm(CommandInterpreter ci) { String st = ci.nextArgument(); if (st == null) { diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerCLI.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerCLI.java index bcf9fd6d0b..268e45ad85 100644 --- a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerCLI.java +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerCLI.java @@ -11,23 +11,17 @@ package org.opendaylight.controller.switchmanager.internal; import java.util.ArrayList; import java.util.Collections; import java.util.Dictionary; +import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.felix.service.command.Descriptor; -import org.opendaylight.controller.sal.core.Bandwidth; -import org.opendaylight.controller.sal.core.Config; -import org.opendaylight.controller.sal.core.Description; -import org.opendaylight.controller.sal.core.MacAddress; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.core.Property; -import org.opendaylight.controller.sal.core.State; -import org.opendaylight.controller.sal.core.Tier; import org.opendaylight.controller.sal.utils.GlobalConstants; -import org.opendaylight.controller.sal.utils.HexEncode; import org.opendaylight.controller.sal.utils.ServiceHelper; import org.opendaylight.controller.switchmanager.ISwitchManager; import org.osgi.framework.ServiceRegistration; @@ -70,28 +64,34 @@ public class SwitchManagerCLI { return; } - System.out.println(" Node Type MAC Name Tier"); - Set nodes = sm.getNodes(); if (nodes == null || nodes.isEmpty()) { return; } - List nodeArray = new ArrayList(); + Set propertyList = new HashSet(); for (Node node : nodes) { - nodeArray.add(node.toString()); + Map propList = sm.getNodeProps(node); + propertyList.addAll(propList.keySet()); + } + List sortedProps = new ArrayList(propertyList); + Collections.sort(sortedProps); + String properties = String.format("%-26s ", "Node"); + for (String s : sortedProps) { + properties = properties.concat(String.format("%-18s ", s)); } - Collections.sort(nodeArray); - for (String str : nodeArray) { - Node node = Node.fromString(str); - Description desc = ((Description) sm.getNodeProp(node, Description.propertyName)); - Tier tier = ((Tier) sm.getNodeProp(node, Tier.TierPropName)); - String nodeName = (desc == null) ? "" : desc.getValue(); - MacAddress mac = (MacAddress) sm.getNodeProp(node, MacAddress.name); - String macAddr = (mac == null) ? "" : HexEncode.bytesToHexStringFormat(mac.getMacAddress()); - int tierNum = (tier == null) ? 0 : tier.getValue(); - System.out.println(node + " " + node.getType() + " " + macAddr + " " + nodeName + " " - + tierNum); + System.out.println(properties); + for (Node node : nodes) { + String nodeProp = String.format("%-26s ", node); + Map propList = sm.getNodeProps(node); + for (String s : sortedProps) { + if (propList.containsKey(s)) { + nodeProp = nodeProp.concat(String.format("%-18s ", propList.get(s).getStringValue())); + } else { + nodeProp = nodeProp.concat(String.format("%-18s ", "null")); + } + } + System.out.println(nodeProp); } System.out.println("Total number of Nodes: " + nodes.size()); } @@ -113,26 +113,34 @@ public class SwitchManagerCLI { return; } - System.out.println(" NodeConnector BandWidth(Gbps) Admin State"); Set nodeConnectorSet = sm.getNodeConnectors(target); - if (nodeConnectorSet == null) { + if (nodeConnectorSet == null || nodeConnectorSet.isEmpty()) { return; } + + Set propertyList = new HashSet(); + for (NodeConnector nodeConnector : nodeConnectorSet) { + Map propList = sm.getNodeConnectorProps(nodeConnector); + propertyList.addAll(propList.keySet()); + } + List sortedProps = new ArrayList(propertyList); + Collections.sort(sortedProps); + String properties = String.format("%-33s ", "NodeConnector"); + for (String s : sortedProps) { + properties = properties.concat(String.format("%-18s ", s)); + } + System.out.println(properties); for (NodeConnector nodeConnector : nodeConnectorSet) { - if (nodeConnector == null) { - continue; + String ncProp = String.format("%-33s ", nodeConnector); + Map ncProperties = sm.getNodeConnectorProps(nodeConnector); + for (String s : sortedProps) { + if (ncProperties.containsKey(s)) { + ncProp = ncProp.concat(String.format("%-18s ", ncProperties.get(s).getStringValue())); + } else { + ncProp = ncProp.concat(String.format("%-18s ", "null")); + } } - Map propMap = sm.getNodeConnectorProps(nodeConnector); - Bandwidth bw = (Bandwidth) propMap.get(Bandwidth.BandwidthPropName); - Config config = (Config) propMap.get(Config.ConfigPropName); - State state = (State) propMap.get(State.StatePropName); - String out = nodeConnector + " "; - out += (bw != null) ? bw.getValue() / Math.pow(10, 9) : " "; - out += " "; - out += (config != null) ? config.getValue() : " "; - out += " "; - out += (state != null) ? state.getValue() : " "; - System.out.println(out); + System.out.println(ncProp); } System.out.println("Total number of NodeConnectors: " + nodeConnectorSet.size()); }