Merge "Bug 8535: Fix IPv6 OXMHeader Mask issue"
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / util / PortTranslatorUtil.java
index 0e237f436663edba8ce99bcd52f487f98f4f6c3e..8cdafd6adb2a8b32021576a8530ad7e8ae3625e6 100644 (file)
@@ -8,12 +8,14 @@
 package org.opendaylight.openflowplugin.openflow.md.util;
 
 import java.math.BigInteger;
-
-import org.opendaylight.openflowplugin.openflow.md.OFConstants;
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdatedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortReason;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.State;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemovedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
@@ -23,44 +25,77 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortStateV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public abstract class PortTranslatorUtil {
-    public static  org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(PortFeatures apf) {
+    private static final Logger logger = LoggerFactory.getLogger(PortTranslatorUtil.class);
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(final PortFeatures apf) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
-        if(apf != null){
-                napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
-                        apf.is_100gbFd(),apf.is_100mbFd(),apf.is_100mbHd(),apf.is_10gbFd(),apf.is_10mbFd(),apf.is_10mbHd(),
-                        apf.is_1gbFd(),apf.is_1gbHd(),apf.is_1tbFd(),apf.is_40gbFd(),apf.isAutoneg(),apf.isCopper(),apf.isFiber(),apf.isOther(),
-                        apf.isPause(), apf.isPauseAsym());
+        if (apf != null) {
+            napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
+                    apf.isAutoneg(), //_autoeng
+                    apf.isCopper(), //_copper
+                    apf.isFiber(), //_fiber
+                    apf.is_40gbFd(), //_fortyGbFd
+                    apf.is_100gbFd(), //_hundredGbFd
+                    apf.is_100mbFd(), //_hundredMbFd
+                    apf.is_100mbHd(), //_hundredMbHd
+                    apf.is_1gbFd(), //_oneGbFd
+                    apf.is_1gbHd(), //_oneGbHd
+                    apf.is_1tbFd(), //_oneTbFd
+                    apf.isOther(), //_other
+                    apf.isPause(), //_pause
+                    apf.isPauseAsym(), //_pauseAsym
+                    apf.is_10gbFd(), //_tenGbFd
+                    apf.is_10mbFd(), //_tenMbFd
+                    apf.is_10mbHd()//_tenMbHd
+            );
+
         }
         return napf;
     }
-    
+
     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(
-            PortFeaturesV10 apf) {
+            final PortFeaturesV10 apf) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
-        if(apf != null){
-                napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
-                        false,apf.is_100mbFd(),apf.is_100mbHd(),apf.is_10gbFd(),apf.is_10mbFd(),apf.is_10mbHd(),
-                        apf.is_1gbFd(),apf.is_1gbHd(),false,false,apf.isAutoneg(),apf.isCopper(),apf.isFiber(),false,
-                        apf.isPause(), apf.isPauseAsym());
+        if (apf != null) {
+            napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
+                    apf.isAutoneg(), //_autoeng
+                    apf.isCopper(), //_copper
+                    apf.isFiber(), //_fiber
+                    false, //_fortyGbFd
+                    false, //_hundredGbFd
+                    apf.is_100mbFd(), //_hundredMbFd
+                    apf.is_100mbHd(), //_hundredMbHd
+                    apf.is_1gbFd(), //_oneGbFd
+                    apf.is_1gbHd(), //_oneGbHd
+                    false, //_oneTbFd
+                    false, //_other
+                    apf.isPause(), //_pause
+                    apf.isPauseAsym(), //_pauseAsym
+                    apf.is_10gbFd(), //_tenGbFd
+                    apf.is_10mbFd(), //_tenMbFd
+                    apf.is_10mbHd()//_tenMbHd
+                    );
         }
         return napf;
     }
 
-    public static  State translatePortState(PortState state) {
+    public static State translatePortState(final PortState state) {
         StateBuilder nstate = new StateBuilder();
-        if(state !=null) {
+        if (state != null) {
             nstate.setBlocked(state.isBlocked());
             nstate.setLinkDown(state.isLinkDown());
             nstate.setLive(state.isLive());
         }
         return nstate.build();
     }
-    
-    public static State translatePortState(PortStateV10 state) {
+
+    public static State translatePortState(final PortStateV10 state) {
         StateBuilder nstate = new StateBuilder();
-        if(state !=null) {
+        if (state != null) {
             nstate.setBlocked(state.isBlocked());
             nstate.setLinkDown(state.isLinkDown());
             nstate.setLive(state.isLive());
@@ -68,37 +103,39 @@ public abstract class PortTranslatorUtil {
         return nstate.build();
     }
 
-    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(PortConfig pc) {
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(final PortConfig pc) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
-        if(pc != null) {
-                npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
-                        pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
+        if (pc != null) {
+            npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
+                    pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
         }
         return npc;
     }
-    
+
     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(
-            PortConfigV10 pc) {
+            final PortConfigV10 pc) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
-        if(pc != null) {
-                npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
-                        pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
+        if (pc != null) {
+            npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
+                    pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
         }
         return npc;
     }
-    
-    public static NodeConnectorUpdated translatePort(Short version,BigInteger datapathId,Long portNo, PortGrouping port) {
+
+    public static NodeConnectorUpdated translatePort(final Short version, final BigInteger datapathId, final Long portNumber, final PortGrouping port) {
+        OpenflowVersion ofVersion = OpenflowVersion.get(version);
         NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
-                .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId,port.getPortNo());
+                .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId, port.getPortNo(), ofVersion);
         FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
-        if(version == OFConstants.OFP_VERSION_1_3) {
+        if (ofVersion == OpenflowVersion.OF13) {
             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
             fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
             fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
-        } else if (version == OFConstants.OFP_VERSION_1_0) {
+
+        } else if (ofVersion == OpenflowVersion.OF10) {
             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeaturesV10()));
             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfigV10()));
             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeaturesV10()));
@@ -106,12 +143,26 @@ public abstract class PortTranslatorUtil {
             fcncub.setState(PortTranslatorUtil.translatePortState(port.getStateV10()));
             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeaturesV10()));
         }
+        if (port instanceof PortStatusMessage) {
+            if (((PortStatusMessage) port).getReason() != null) {
+                fcncub.setReason(PortReason.forValue(((PortStatusMessage) port).getReason().getIntValue()));
+            }else {
+                logger.debug("PortStatus Message has reason as null");
+            }
+        }
         fcncub.setCurrentSpeed(port.getCurrSpeed());
         fcncub.setHardwareAddress(port.getHwAddr());
         fcncub.setMaximumSpeed(port.getMaxSpeed());
         fcncub.setName(port.getName());
-        fcncub.setPortNumber(port.getPortNo());
+        fcncub.setPortNumber(OpenflowPortsUtil.getProtocolAgnosticPort(ofVersion, portNumber));
         builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
         return builder.build();
     }
+
+    public static NodeConnectorRemoved translatePortRemoved(final Short version, final BigInteger datapathId, final Long portNumber, final PortGrouping port) {
+        OpenflowVersion ofVersion = OpenflowVersion.get(version);
+        NodeConnectorRemovedBuilder builder = new NodeConnectorRemovedBuilder();
+        builder.setNodeConnectorRef(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(datapathId, portNumber, ofVersion));
+        return builder.build();
+    }
 }