Merge "On container removal, all container flows should be uninstalled"
authorChi-Vien Ly <chivly@cisco.com>
Mon, 1 Jul 2013 23:38:18 +0000 (23:38 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 1 Jul 2013 23:38:18 +0000 (23:38 +0000)
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java
opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerImpl.java

index 8a77825d7943c12e8be971687cb4f3e8ac187b72..2b9696ddb9cdf058640caa671735757556fb1a5a 100644 (file)
@@ -730,8 +730,8 @@ public class FlowConfig implements Serializable {
                 Short port = Short.decode(ingressPort);
                 if (isPortValid(sw, port) == false) {
                     String msg = String.format("Ingress port %d is not valid for the Switch", port);
-                    if ((container != null) && !container.getName().equals(GlobalConstants.DEFAULT.toString())) {
-                        msg += " in Container " + container.getName();
+                    if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
+                        msg += " in Container " + containerName;
                     }
                     return new Status(StatusCode.BADREQUEST, msg);
                 }
@@ -841,9 +841,8 @@ public class FlowConfig implements Serializable {
                                     Short port = Short.parseShort(n.group(1));
                                     if (isPortValid(sw, port) == false) {
                                         String msg = String.format("Output port %d is not valid for this switch", port);
-                                        if ((container != null)
-                                                && !container.getName().equals(GlobalConstants.DEFAULT.toString())) {
-                                            msg += " in Container " + container.getName();
+                                        if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
+                                            msg += " in Container " + containerName;
                                         }
                                         return new Status(StatusCode.BADREQUEST, msg);
                                     }
@@ -855,9 +854,9 @@ public class FlowConfig implements Serializable {
                     // Check src IP
                     sstr = Pattern.compile(ActionType.FLOOD.toString()).matcher(actiongrp);
                     if (sstr.matches()) {
-                        if (container != null) {
+                        if (!containerName.equals(GlobalConstants.DEFAULT.toString())) {
                             return new Status(StatusCode.BADREQUEST, String.format(
-                                    "flood is not allowed in container %s", container.getName()));
+                                    "flood is not allowed in container %s", containerName));
                         }
                         continue;
                     }
@@ -955,7 +954,7 @@ public class FlowConfig implements Serializable {
             }
             // Check against the container flow
             Status status;
-            if ((container != null) && !(status = conflictWithContainerFlow(container)).isSuccess()) {
+            if (!containerName.equals(GlobalConstants.DEFAULT.toString()) && !(status = conflictWithContainerFlow(container)).isSuccess()) {
                 return status;
             }
         } catch (NumberFormatException e) {
index 443c7a42ab7da517fbb8df65082c36d1a220a79e..ab3149610309b08f314b9cee1ca85a6998063a5c 100644 (file)
@@ -863,7 +863,6 @@ CommandProvider {
                 addNodeProps(node, null);
             }
 
-            // check if span is configed
             addSpanPort(nodeConnector);
             break;
         case REMOVED:
@@ -1670,10 +1669,10 @@ CommandProvider {
     /*
      * Add span configuration to local cache and notify clients
      */
-    private void addSpanPorts(Node node, List<NodeConnector> nodeConncetors) {
+    private void addSpanPorts(Node node, List<NodeConnector> nodeConnectors) {
         List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
 
-        for (NodeConnector nodeConnector : nodeConncetors) {
+        for (NodeConnector nodeConnector : nodeConnectors) {
             if (!spanNodeConnectors.contains(nodeConnector)) {
                 ncLists.add(nodeConnector);
             }
@@ -1691,19 +1690,25 @@ CommandProvider {
         }
     }
 
-    private void addSpanPort(NodeConnector nodeConncetor) {
-        List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
-        ncLists.add(nodeConncetor);
-        addSpanPorts(nodeConncetor.getNode(), ncLists);
+    private void addSpanPort(NodeConnector nodeConnector) {
+        // only add if span is configured on this nodeConnector
+        for (SpanConfig conf : getSpanConfigList(nodeConnector.getNode())) {
+            if (conf.getPortArrayList().contains(nodeConnector)) {
+                List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
+                ncLists.add(nodeConnector);
+                addSpanPorts(nodeConnector.getNode(), ncLists);
+                return;
+            }
+        }
     }
 
     /*
      * Remove span configuration to local cache and notify clients
      */
-    private void removeSpanPorts(Node node, List<NodeConnector> nodeConncetors) {
+    private void removeSpanPorts(Node node, List<NodeConnector> nodeConnectors) {
         List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
 
-        for (NodeConnector nodeConnector : nodeConncetors) {
+        for (NodeConnector nodeConnector : nodeConnectors) {
             if (spanNodeConnectors.contains(nodeConnector)) {
                 ncLists.add(nodeConnector);
             }
@@ -1721,10 +1726,12 @@ CommandProvider {
         }
     }
 
-    private void removeSpanPort(NodeConnector nodeConncetor) {
-        List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
-        ncLists.add(nodeConncetor);
-        removeSpanPorts(nodeConncetor.getNode(), ncLists);
+    private void removeSpanPort(NodeConnector nodeConnector) {
+        if (spanNodeConnectors.contains(nodeConnector)) {
+            List<NodeConnector> ncLists = new ArrayList<NodeConnector>();
+            ncLists.add(nodeConnector);
+            removeSpanPorts(nodeConnector.getNode(), ncLists);
+        }
     }
 
     private void addNodeProps(Node node, Map<String, Property> propMap) {