Bug 5212 - Neutron-mapper has dependency on Ofoverlay renderer
[groupbasedpolicy.git] / renderers / ofoverlay / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / node / SwitchManager.java
index 6c007a7dd1df5a582599fdc8e74db98309a2a797..66a69d8afb0e4c1aa98eefc8977ef7b240ab99fd 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.getOfPortNum;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -22,11 +23,13 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.annotation.Nullable;
 
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchListener;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig.EncapsulationFormat;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfaces;
@@ -107,6 +110,22 @@ public class SwitchManager implements AutoCloseable {
         state.updateStatus();
     }
 
+    public synchronized InstanceIdentifier<NodeConnector> getNodeConnectorIidForPortName(Name portName) {
+        for (SwitchState sw : switches.values()) {
+            if (sw.fcncByNcIid == null) {
+                continue;
+            }
+            for (Entry<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIidEntry : sw.fcncByNcIid
+                .entrySet()) {
+                FlowCapableNodeConnector fcnc = fcncByNcIidEntry.getValue();
+                if (portName.getValue().equals(fcnc.getName())) {
+                    return fcncByNcIidEntry.getKey();
+                }
+            }
+        }
+        return null;
+    }
+
     /**
      * Get the collection of switches that are in the "ready" state. Note
      * that the collection is immutable.
@@ -142,6 +161,21 @@ public class SwitchManager implements AutoCloseable {
         return ImmutableSet.copyOf(state.externalPorts);
     }
 
+    public Set<Long> getExternalPortNumbers(NodeId nodeId) {
+        Set<Long> extPortNumbers = new HashSet<>();
+        for(NodeConnectorId nc : getExternalPorts(nodeId)) {
+            long portNum;
+            try {
+                portNum = getOfPortNum(nc);
+            } catch (NumberFormatException ex) {
+                LOG.warn("Could not parse port number {}", nc, ex);
+                return null;
+            }
+            extPortNumbers.add(portNum);
+        }
+        return extPortNumbers;
+    }
+
     public synchronized Collection<NodeConnectorId> getTunnelPorts(NodeId nodeId) {
         Collection<NodeConnectorId> ncIds = new HashSet<>();
         SwitchState state = switches.get(nodeId);
@@ -309,6 +343,11 @@ public class SwitchManager implements AutoCloseable {
 
         /**
          * Constructor used for tests
+         *
+         * @param node the node id
+         * @param tunnelPort the tunnel port
+         * @param externalPorts the set of expternal ports
+         * @param nodeConfig the ofoverlay node config
          */
         public SwitchState(NodeId node, NodeConnectorId tunnelPort, Set<NodeConnectorId> externalPorts,
                 OfOverlayNodeConfig nodeConfig) {