Merge "Increase timeout for waiting for broker service in sal-binding-it."
[controller.git] / opendaylight / web / troubleshoot / src / main / java / org / opendaylight / controller / troubleshoot / web / Troubleshoot.java
index f5fda3d1bc8fe245323d3cb8666a185e9753472a..36b5043dd94ebf6956c499da4ad4909864a9c936 100644 (file)
@@ -21,9 +21,18 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.opendaylight.controller.sal.action.Action;
 import org.opendaylight.controller.sal.action.Output;
+import org.opendaylight.controller.sal.action.SetDlDst;
+import org.opendaylight.controller.sal.action.SetDlSrc;
+import org.opendaylight.controller.sal.action.SetNwDst;
+import org.opendaylight.controller.sal.action.SetNwSrc;
+import org.opendaylight.controller.sal.action.SetNwTos;
+import org.opendaylight.controller.sal.action.SetTpDst;
+import org.opendaylight.controller.sal.action.SetTpSrc;
 import org.opendaylight.controller.sal.action.SetVlanId;
+import org.opendaylight.controller.sal.action.SetVlanPcp;
 import org.opendaylight.controller.sal.authorization.Privilege;
 import org.opendaylight.controller.sal.authorization.UserLevel;
+import org.opendaylight.controller.sal.core.Description;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
 import org.opendaylight.controller.sal.core.TimeStamp;
@@ -53,9 +62,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
 public class Troubleshoot implements IDaylightWeb {
     private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER;
     private static final List<String> flowStatsColumnNames = Arrays.asList("Node", "In Port",
-            "DL Src", "DL Dst", "DL Type", "DL Vlan", "NW Src", "NW Dst",
+            "DL Src", "DL Dst", "DL Type", "DL Vlan","Vlan Priority", "NW Src", "NW Dst","ToS Bits",
             "NW Proto", "TP Src", "TP Dst", "Actions", "Bytes", "Packets",
-            "Time (s)", "Timeout (s)", "Out Port(s)", "Out Vlan",
+            "Time (s)", "Timeout (s)",
             "Priority");
     private static final List<String> portStatsColumnNames = Arrays.asList("Node Connector",
             "Rx Pkts", "Tx Pkts", "Rx Bytes", "Tx Bytes", "Rx Drops",
@@ -109,7 +118,7 @@ public class Troubleshoot implements IDaylightWeb {
             if (nodeSet != null) {
                 for (Node node : nodeSet) {
                     Map<String, String> device = new HashMap<String, String>();
-                    device.put("nodeName", switchManager.getNodeDescription(node));
+                    device.put("nodeName", getNodeDesc(node, switchManager));
                     device.put("nodeId", node.toString());
                     lines.add(device);
                 }
@@ -139,7 +148,7 @@ public class Troubleshoot implements IDaylightWeb {
             if (nodeSet != null) {
                 for (Node node : nodeSet) {
                     Map<String, String> device = new HashMap<String, String>();
-                    device.put("nodeName", switchManager.getNodeDescription(node));
+                    device.put("nodeName", getNodeDesc(node, switchManager));
                     device.put("nodeId", node.toString());
                     TimeStamp timeStamp = (TimeStamp) switchManager.getNodeProp(
                             node, TimeStamp.TimeStampPropName);
@@ -207,7 +216,7 @@ public class Troubleshoot implements IDaylightWeb {
                 List<NodeConnectorStatistics> statistics = statisticsManager
                         .getNodeConnectorStatistics(node);
                 for (NodeConnectorStatistics stats : statistics) {
-                    cells.add(this.convertPortsStatistics(stats));
+                    cells.add(this.convertPortsStatistics(stats, containerName));
                 }
             }
         }
@@ -219,11 +228,20 @@ public class Troubleshoot implements IDaylightWeb {
     }
 
     private Map<String, String> convertPortsStatistics(
-            NodeConnectorStatistics ncStats) {
+            NodeConnectorStatistics ncStats, String containerName) {
+
         Map<String, String> row = new HashMap<String, String>();
 
+        ISwitchManager switchManager = (ISwitchManager) ServiceHelper
+                .getInstance(ISwitchManager.class, containerName, this);
+        NodeConnector nodeConnector = ncStats.getNodeConnector();
+        Description description = (Description) switchManager.getNodeProp(nodeConnector.getNode(), Description.propertyName);
+        String desc = (description == null) ? "" : description.getValue();
+        String nodeName = desc.equalsIgnoreCase("none") ? nodeConnector.getNode().getNodeIDString() : desc;
+        String nodeConnectorDisplayName = nodeConnector.getType() + "|" + nodeConnector.getID() + "@" + nodeName;
         row.put("nodeConnector",
-                String.valueOf(ncStats.getNodeConnector().toString()));
+                String.valueOf(nodeConnectorDisplayName));
+
         row.put("rxPkts", String.valueOf(ncStats.getReceivePacketCount()));
         row.put("txPkts", String.valueOf(ncStats.getTransmitPacketCount()));
         row.put("rxBytes", String.valueOf(ncStats.getReceiveByteCount()));
@@ -251,10 +269,9 @@ public class Troubleshoot implements IDaylightWeb {
         Match match = flow.getMatch();
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
-        String desc = (switchManager == null)?
-                        "" : switchManager.getNodeDescription(node);
-        desc = (desc.isEmpty() || desc.equalsIgnoreCase("none"))?
-                        node.toString(): desc;
+        String desc = getNodeDesc(node, switchManager);
+        desc = (desc == null || desc.isEmpty() || desc.equalsIgnoreCase("none"))?
+                        node.toString() : desc;
         row.put("nodeName", desc);
         if (match.isPresent(MatchType.IN_PORT)) {
             row.put(MatchType.IN_PORT.id(), ((NodeConnector) flow.getMatch()
@@ -297,6 +314,19 @@ public class Troubleshoot implements IDaylightWeb {
         } else {
             row.put(MatchType.DL_VLAN.id(), "*");
         }
+        //Vlan Priority
+        if (match.isPresent(MatchType.DL_VLAN_PR)) {
+            if (((Byte) flow.getMatch().getField(MatchType.DL_VLAN_PR).getValue())
+                    .shortValue() < 0) {
+                row.put(MatchType.DL_VLAN_PR.id(), "0");
+            } else {
+                row.put(MatchType.DL_VLAN_PR.id(), ((Byte) flow.getMatch()
+                        .getField(MatchType.DL_VLAN_PR).getValue()).toString());
+            }
+        } else {
+            row.put(MatchType.DL_VLAN_PR.id(), "*");
+        }
+
         if (match.isPresent(MatchType.NW_SRC)) {
             row.put(MatchType.NW_SRC.id(), ((InetAddress) flow.getMatch()
                     .getField(MatchType.NW_SRC).getValue()).getHostAddress());
@@ -309,6 +339,12 @@ public class Troubleshoot implements IDaylightWeb {
         } else {
             row.put(MatchType.NW_DST.id(), "*");
         }
+        if (match.isPresent(MatchType.NW_TOS)) {
+            row.put(MatchType.NW_TOS.id(), ((Byte) flow.getMatch()
+                        .getField(MatchType.NW_TOS).getValue()).toString());
+        } else {
+            row.put(MatchType.NW_TOS.id(), "*");
+        }
         if (match.isPresent(MatchType.NW_PROTO)) {
             row.put(MatchType.NW_PROTO.id(),
                     IPProtocols.getProtocolName(((Byte) flow.getMatch()
@@ -338,34 +374,61 @@ public class Troubleshoot implements IDaylightWeb {
 
         StringBuffer actions = new StringBuffer();
         StringBuffer outPorts = new StringBuffer();
-        String outVlanId = null;
         for (Action action : flow.getActions()) {
-            actions.append(action.getType().toString() + "\n");
+
             if (action instanceof Output) {
                 Output ao = (Output) action;
                 if (outPorts.length() > 0) {
                     outPorts.append(" ");
                 }
-                outPorts.append(ao.getPort().getNodeConnectorIdAsString());
+                actions.append(action.getType().toString()).append(" = ").append(ao.getPort().getNodeConnectorIdAsString()).append("<br>");
             } else if (action instanceof SetVlanId) {
                 SetVlanId av = (SetVlanId) action;
-                outVlanId = String.valueOf(av.getVlanId());
+                String outVlanId = String.valueOf(av.getVlanId());
+                actions.append(action.getType().toString()).append(" = ").append(outVlanId).append("<br>");
+            } else if (action instanceof SetDlSrc) {
+                SetDlSrc ads = (SetDlSrc) action;
+                actions.append(action.getType().toString()).append(" = ").append(HexEncode.bytesToHexStringFormat(ads.getDlAddress())).append("<br>");
+            } else if (action instanceof SetDlDst) {
+                SetDlDst add = (SetDlDst) action;
+                actions.append(action.getType().toString()).append(" = ").append(HexEncode.bytesToHexStringFormat(add.getDlAddress())).append("<br>");
+            } else if (action instanceof SetNwSrc) {
+                SetNwSrc ans = (SetNwSrc) action;
+                actions.append(action.getType().toString()).append(" = ").append(ans.getAddressAsString()).append("<br>");
+            } else if (action instanceof SetNwDst) {
+                SetNwDst and = (SetNwDst) action;
+                actions.append(action.getType().toString()).append(" = ").append(and.getAddressAsString()).append("<br>");
+            } else if (action instanceof SetNwTos) {
+                SetNwTos ant = (SetNwTos) action;
+                actions.append(action.getType().toString()).append(" = ").append(ant.getNwTos()).append("<br>");
+            } else if (action instanceof SetTpSrc) {
+                SetTpSrc ads = (SetTpSrc) action;
+                actions.append(action.getType().toString()).append(" = ").append(ads.getPort()).append("<br>");
+            } else if (action instanceof SetTpDst) {
+                SetTpDst atd = (SetTpDst) action;
+                actions.append(action.getType().toString()).append(" = ").append(atd.getPort()).append("<br>");
+            } else if (action instanceof SetVlanPcp) {
+                SetVlanPcp avp = (SetVlanPcp) action;
+                actions.append(action.getType().toString()).append(" = ").append(avp.getPcp()).append("<br>");
+                // } else if (action instanceof SetDlSrc) {
+                // SetDlSrc ads = (SetDlSrc) action;
+            } else {
+                actions.append(action.getType().toString()).append("<br>");
             }
         }
-        if (outPorts.length() == 0) {
-            outPorts.append("*");
-        }
-        if (outVlanId == null) {
-            outVlanId = "*";
-        }
         row.put("actions", actions.toString());
-        row.put("outPorts", outPorts.toString());
-        row.put("outVlanId", outVlanId);
         row.put("durationSeconds",
                 ((Integer) flowOnNode.getDurationSeconds()).toString());
         row.put("idleTimeout", ((Short) flow.getIdleTimeout()).toString());
-        row.put("priority", String.valueOf(flow.getPriority()));
+        row.put("priority", String.valueOf(NetUtils.getUnsignedShort(flow.getPriority())));
         return row;
     }
 
+    private String getNodeDesc(Node node, ISwitchManager switchManager) {
+        if (switchManager == null) {
+            return null;
+        }
+        Description desc = (Description) switchManager.getNodeProp(node, Description.propertyName);
+        return (desc == null) ? "" : desc.getValue();
+    }
 }