PortTranslator modification 23/18023/4
authorJozef Gloncak <jgloncak@cisco.com>
Fri, 10 Apr 2015 09:52:11 +0000 (11:52 +0200)
committerJozef Gloncak <jgloncak@cisco.com>
Fri, 10 Apr 2015 11:50:57 +0000 (13:50 +0200)
Note: we've changed PortTranslator method input type
to PortGrouping from PortStatus.

Change-Id: I5dcae0ae781f6e2a6903fc368270ecc8b02059e0
Signed-off-by: Vaclav Demcak <vdemcak@cisco.com>
Signed-off-by: Jozef Gloncak <jgloncak@cisco.com>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/NodeStaticReplyTranslatorUtil.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PortUpdateTranslator.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/TranslatorLibraryUtil.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/OpenflowPortsUtil.java

index 70a8e784dd369df46394c519a4f54cee168173ef..ce3e91040423d637dbd99620fcb2cd14fb428255 100644 (file)
@@ -9,13 +9,13 @@
 package org.opendaylight.openflowplugin.impl.common;
 
 import com.google.common.base.Preconditions;
-import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import javax.annotation.CheckForNull;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.TableFeaturesReplyConvertor;
-import org.opendaylight.openflowplugin.openflow.md.util.PortTranslatorUtil;
+import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter32;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
@@ -32,7 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectLiveness;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterFeaturesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.nodes.node.MeterFeaturesBuilder;
@@ -48,7 +48,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeatures;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.Ports;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
 
@@ -212,8 +211,17 @@ public class NodeStaticReplyTranslatorUtil {
         return TableFeaturesReplyConvertor.toTableFeaturesReply(reply);
     }
 
-    public static NodeConnectorUpdated nodePortDescTranslator(@CheckForNull final Ports reply, @CheckForNull final BigInteger datapathId, final short version) {
-        Preconditions.checkArgument(reply != null);
-        return PortTranslatorUtil.translatePort(version, datapathId, reply.getPortNo(), reply);
+    /**
+     * Method build a ID Node Connector from version and port number.
+     *
+     * @param datapathid
+     * @param portNo
+     * @param ofVersion
+     * @return
+     */
+    public static NodeConnectorId nodeConnectorId(@CheckForNull final String datapathId, final long portNo, final short version) {
+        Preconditions.checkArgument(datapathId != null);
+        final String logicalName = OpenflowPortsUtil.getPortLogicalName(version, portNo);
+        return new NodeConnectorId(OFConstants.OF_URI_PREFIX + datapathId + ":" + (logicalName == null ? portNo : logicalName));
     }
 }
index d8fbee6ef9166f670cf4ea22b3abfbeac364e5ce..12a014aff55dd68bcd4a4f94f1f34ae795d938f2 100644 (file)
@@ -7,20 +7,6 @@
  */
 package org.opendaylight.openflowplugin.impl.device;
 
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
-import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
-import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.SettableFuture;
@@ -39,6 +25,7 @@ import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
@@ -51,21 +38,31 @@ import org.opendaylight.openflowplugin.api.openflow.device.listener.OpenflowMess
 import org.opendaylight.openflowplugin.api.openflow.flow.registry.DeviceFlowRegistry;
 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
 import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey;
+import org.opendaylight.openflowplugin.impl.common.NodeStaticReplyTranslatorUtil;
 import org.opendaylight.openflowplugin.impl.flow.registry.DeviceFlowRegistryImpl;
 import org.opendaylight.openflowplugin.impl.translator.PacketReceivedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.session.SwitchConnectionCookieOFImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Error;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage;
+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.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -90,7 +87,7 @@ public class DeviceContextImpl implements DeviceContext {
     private final TransactionChainManager txChainManager;
     private TranslatorLibrary translatorLibrary;
     private OpenflowMessageListenerFacade openflowMessageListenerFacade;
-    private DeviceFlowRegistry deviceFlowRegistry;
+    private final DeviceFlowRegistry deviceFlowRegistry;
     private Timeout barrierTaskTimeout;
     private NotificationProviderService notificationService;
 
@@ -295,12 +292,11 @@ public class DeviceContextImpl implements DeviceContext {
 
     @Override
     public void processPortStatusMessage(final PortStatusMessage portStatus) {
-        final TranslatorKey translatorKey = new TranslatorKey(portStatus.getVersion(), PortStatusMessage.class.getName());
-        final MessageTranslator<PortStatusMessage, FlowCapableNodeConnector> messageTranslator = translatorLibrary.lookupTranslator(translatorKey);
+        final TranslatorKey translatorKey = new TranslatorKey(portStatus.getVersion(), PortGrouping.class.getName());
+        final MessageTranslator<PortGrouping, FlowCapableNodeConnector> messageTranslator = translatorLibrary.lookupTranslator(translatorKey);
         FlowCapableNodeConnector flowCapableNodeConnector = messageTranslator.translate(portStatus, this, null);
 
-        final KeyedInstanceIdentifier<NodeConnector, NodeConnectorKey> iiToNodeConnector =
-                provideIIToNodeConnector(portStatus.getPortNo(), portStatus.getVersion());
+        final KeyedInstanceIdentifier<NodeConnector, NodeConnectorKey> iiToNodeConnector = provideIIToNodeConnector(portStatus.getPortNo(), portStatus.getVersion());
         if (portStatus.getReason().equals(PortReason.OFPPRADD) ) {
             // because of ADD status node connector has to be created
             createNodeConnectorInDS(iiToNodeConnector);
@@ -310,7 +306,7 @@ public class DeviceContextImpl implements DeviceContext {
             flowCapableNodeConnector = new FlowCapableNodeConnectorBuilder().build();
         }
 
-        InstanceIdentifier<FlowCapableNodeConnector> iiToFlowCapableNodeConnector = iiToNodeConnector.augmentation(FlowCapableNodeConnector.class);
+        final InstanceIdentifier<FlowCapableNodeConnector> iiToFlowCapableNodeConnector = iiToNodeConnector.augmentation(FlowCapableNodeConnector.class);
         writeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToFlowCapableNodeConnector, flowCapableNodeConnector);
     }
 
@@ -318,17 +314,11 @@ public class DeviceContextImpl implements DeviceContext {
         writeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToNodeConnector, new NodeConnectorBuilder().setKey(iiToNodeConnector.getKey()).build());
     }
 
-    private KeyedInstanceIdentifier<Node, NodeKey> provideIIToNodes() {
-        return InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(deviceState.getNodeId()));
-    }
-
-    private KeyedInstanceIdentifier<NodeConnector, NodeConnectorKey> provideIIToNodeConnector(final Long portNo, final Short version) {
-        final KeyedInstanceIdentifier<Node, NodeKey> iiToNodes = provideIIToNodes();
-        final NodeConnectorId nodeConnectorId = InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
-                deviceState.getFeatures().getDatapathId(), portNo, OpenflowVersion.get(version));
-        final NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(new NodeConnectorId(nodeConnectorId));
-        return iiToNodes.child(NodeConnector.class, nodeConnectorKey);
-
+    private KeyedInstanceIdentifier<NodeConnector, NodeConnectorKey> provideIIToNodeConnector(final long portNo, final short version) {
+        final InstanceIdentifier<Node> iiToNodes = deviceState.getNodeInstanceIdentifier();
+        final BigInteger dataPathId = deviceState.getFeatures().getDatapathId();
+        final NodeConnectorId nodeConnectorId = NodeStaticReplyTranslatorUtil.nodeConnectorId(dataPathId.toString(), portNo, version);
+        return iiToNodes.child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId));
     }
 
     @Override
@@ -378,7 +368,7 @@ public class DeviceContextImpl implements DeviceContext {
     }
 
     @Override
-    public void setCurrentBarrierTimeout(Timeout timeout) {
+    public void setCurrentBarrierTimeout(final Timeout timeout) {
         barrierTaskTimeout = timeout;
     }
 
index 40020aee7cc0601a4950e9cacae6da52a6e08f1d..41723684c83ba0bfe6542add7b9c2c42fd89eeb2 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.openflowplugin.impl.device;
 
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
@@ -28,39 +26,43 @@ import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceManager;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
+import org.opendaylight.openflowplugin.api.openflow.device.MessageTranslator;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler;
 import org.opendaylight.openflowplugin.api.openflow.device.handlers.MultiMsgCollector;
+import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey;
 import org.opendaylight.openflowplugin.impl.common.MultipartRequestInputFactory;
 import org.opendaylight.openflowplugin.impl.common.NodeStaticReplyTranslatorUtil;
 import org.opendaylight.openflowplugin.impl.device.listener.OpenflowProtocolListenerFullImpl;
 import org.opendaylight.openflowplugin.impl.rpc.RequestContextImpl;
 import org.opendaylight.openflowplugin.impl.services.OFJResult2RequestCtxFuture;
 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.flow.inventory.rev130819.tables.Table;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsDataBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupFeatures;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.MultipartReplyBody;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCase;
@@ -300,11 +302,19 @@ public class DeviceManagerImpl implements DeviceManager {
                     Preconditions.checkArgument(body instanceof MultipartReplyPortDescCase);
                     final MultipartReplyPortDesc portDesc = ((MultipartReplyPortDescCase) body).getMultipartReplyPortDesc();
                     for (final Ports port : portDesc.getPorts()) {
+                        final short ofVersion = dContext.getDeviceState().getVersion();
+                        final TranslatorKey translatorKey = new TranslatorKey(ofVersion, PortGrouping.class.getName());
+                        final MessageTranslator<PortGrouping, FlowCapableNodeConnector> translator = dContext.oook().lookupTranslator(translatorKey);
+                        final FlowCapableNodeConnector fcNodeConnector = translator.translate(port, dContext, null);
+
                         final BigInteger dataPathId = dContext.getPrimaryConnectionContext().getFeatures().getDatapathId();
-                        final NodeConnectorUpdated portUpd = NodeStaticReplyTranslatorUtil.nodePortDescTranslator(port, dataPathId, dContext.getDeviceState().getVersion());
-                        final InstanceIdentifier<NodeConnector> connectorII = nodeII.child(NodeConnector.class, new NodeConnectorKey(portUpd.getId()));
-                        final NodeConnector connector = new NodeConnectorBuilder(portUpd).addAugmentation(FlowCapableNodeConnectorStatisticsData.class,
-                                new FlowCapableNodeConnectorStatisticsDataBuilder().build()).build();
+                        final NodeConnectorId nodeConnectorId = NodeStaticReplyTranslatorUtil.nodeConnectorId(dataPathId.toString(), port.getPortNo(), ofVersion);
+                        final NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder().setId(nodeConnectorId);
+                        ncBuilder.addAugmentation(FlowCapableNodeConnector.class, fcNodeConnector);
+                        ncBuilder.addAugmentation(FlowCapableNodeConnectorStatisticsData.class, new FlowCapableNodeConnectorStatisticsDataBuilder().build());
+                        final NodeConnector connector = ncBuilder.build();
+
+                        final InstanceIdentifier<NodeConnector> connectorII = nodeII.child(NodeConnector.class, connector.getKey());
                         dContext.writeToTransaction(LogicalDatastoreType.OPERATIONAL, connectorII, connector);
                         //FlowCapableNodeConnectorBuilder
                     }
index 0d1027ec1d49c22a642890a6c379e7b2d4c2e990..beb341d14bf75c2197874192410fdb8c62ad9cca 100644 (file)
@@ -14,28 +14,27 @@ import org.opendaylight.openflowplugin.openflow.md.util.PortTranslatorUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
 
 /**
  * @author tkubas
  *
  */
-public class PortUpdateTranslator implements MessageTranslator<PortStatusMessage, FlowCapableNodeConnector> {
+public class PortUpdateTranslator implements MessageTranslator<PortGrouping, FlowCapableNodeConnector> {
 
     @Override
-    public FlowCapableNodeConnector translate(PortStatusMessage input,
-            DeviceContext deviceContext, Object connectionDistinguisher) {
-        // TODO Auto-generated method stub
-        FlowCapableNodeConnectorBuilder builder = new FlowCapableNodeConnectorBuilder();
+    public FlowCapableNodeConnector translate(final PortGrouping input,
+            final DeviceContext deviceContext, final Object connectionDistinguisher) {
+        final FlowCapableNodeConnectorBuilder builder = new FlowCapableNodeConnectorBuilder();
         //OF1.0
-        if(input.getVersion() == OFConstants.OFP_VERSION_1_0) {
+        if(deviceContext.getDeviceState().getVersion() == OFConstants.OFP_VERSION_1_0) {
             builder.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(input.getAdvertisedFeaturesV10()));
             builder.setConfiguration(PortTranslatorUtil.translatePortConfig(input.getConfigV10()));
             builder.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(input.getCurrentFeaturesV10()));
             builder.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(input.getPeerFeaturesV10()));
             builder.setState(PortTranslatorUtil.translatePortState(input.getStateV10()));
             builder.setSupported(PortTranslatorUtil.translatePortFeatures(input.getSupportedFeaturesV10()));
-        } else if (input.getVersion() == OFConstants.OFP_VERSION_1_3) {
+        } else if (deviceContext.getDeviceState().getVersion() == OFConstants.OFP_VERSION_1_3) {
             builder.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(input.getAdvertisedFeatures()));
             builder.setConfiguration(PortTranslatorUtil.translatePortConfig(input.getConfig()));
             builder.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(input.getCurrentFeatures()));
index 8ad8d51afbcca34517839d57932a37dc8aab255a..eb57d066c5ee22f4e0dff06b2307cdd5b5dba576 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.openflowplugin.impl.translator.PacketReceivedTranslator;
 import org.opendaylight.openflowplugin.impl.translator.PortUpdateTranslator;
 import org.opendaylight.openflowplugin.impl.translator.TranslatorKeyFactory;
 import org.opendaylight.openflowplugin.impl.translator.TranslatorLibraryBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
 
 /**
@@ -35,14 +35,14 @@ public final class TranslatorLibraryUtil {
     static {
         basicTranslatorLibrary = new TranslatorLibraryBuilder().
                 addTranslator(of13TranslatorKeyFactory.createTranslatorKey(PacketReceived.class), new PacketReceivedTranslator()).
-                addTranslator(of13TranslatorKeyFactory.createTranslatorKey(PortStatusMessage.class), new PortUpdateTranslator()).
+                addTranslator(of13TranslatorKeyFactory.createTranslatorKey(PortGrouping.class), new PortUpdateTranslator()).
                 addTranslator(of10TranslatorKeyFactory.createTranslatorKey(PacketReceived.class), new PacketReceivedTranslator()).
-                addTranslator(of10TranslatorKeyFactory.createTranslatorKey(PortStatusMessage.class), new PortUpdateTranslator()).
+                addTranslator(of10TranslatorKeyFactory.createTranslatorKey(PortGrouping.class), new PortUpdateTranslator()).
                 build();
 
     }
 
-    public static void setBasicTranslatorLibrary(TranslatorLibrarian librarian) {
+    public static void setBasicTranslatorLibrary(final TranslatorLibrarian librarian) {
         librarian.setTranslatorLibrary(basicTranslatorLibrary);
     }
 }
index a8d830b5424a9161b35b4bb479c2aa9de496145a..a6debe24ca6855f810cfb8cc9cc853c019f125cf 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.openflowplugin.openflow.md.util;
 
+import com.google.common.collect.ImmutableBiMap;
 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
@@ -7,8 +8,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Output
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
 
-import com.google.common.collect.ImmutableBiMap;
-
 /**
  * Class which integrates the port constants defined and used by MDSAL and the ports defined in openflow java
  *
@@ -28,7 +27,7 @@ public class OpenflowPortsUtil {
     public static void init() {
 
         // v1.0 ports
-        ImmutableBiMap<String, Long> OFv10 = new ImmutableBiMap.Builder<String, Long>()
+        final ImmutableBiMap<String, Long> OFv10 = new ImmutableBiMap.Builder<String, Long>()
                 .put(OutputPortValues.MAX.toString(), new Long(PortNumberValuesV10.MAX.getIntValue())) //0xff00
                 .put(OutputPortValues.INPORT.toString(), new Long(PortNumberValuesV10.INPORT.getIntValue())) //0xfff8
                 .put(OutputPortValues.TABLE.toString(), new Long(PortNumberValuesV10.TABLE.getIntValue())) //0xfff9
@@ -43,7 +42,7 @@ public class OpenflowPortsUtil {
         // openflow 1.3 reserved ports.
         // PortNumberValues are defined in OFJava yang. And yang maps an int to all enums. Hence we need to create longs from (-ve) ints
         // TODO: do we need to define these ports in yang?
-        ImmutableBiMap<String, Long> OFv13 = new ImmutableBiMap.Builder<String, Long>()
+        final ImmutableBiMap<String, Long> OFv13 = new ImmutableBiMap.Builder<String, Long>()
                 .put(OutputPortValues.MAX.toString(), BinContent.intToUnsignedLong(PortNumberValues.MAX.getIntValue())) //0xffffff00
                 .put(OutputPortValues.INPORT.toString(), BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())) //0xfffffff8
                 .put(OutputPortValues.TABLE.toString(), BinContent.intToUnsignedLong(PortNumberValues.TABLE.getIntValue())) //0xfffffff9
@@ -66,33 +65,37 @@ public class OpenflowPortsUtil {
         versionPortMap = null;
     }
 
-    public static String getPortLogicalName(OpenflowVersion ofVersion, Long portNumber) {
+    public static String getPortLogicalName(final short ofVersion, final long portNumber) {
+        return versionPortMap.get(OpenflowVersion.get(ofVersion)).inverse().get(portNumber);
+    }
+
+    public static String getPortLogicalName(final OpenflowVersion ofVersion, final Long portNumber) {
        if (ofVersion.equals(OpenflowVersion.UNSUPPORTED)){
            return null;
        }
        return versionPortMap.get(ofVersion).inverse().get(portNumber);
     }
 
-    public static Long getPortFromLogicalName(OpenflowVersion ofVersion, String logicalNameOrPort) {
+    public static Long getPortFromLogicalName(final OpenflowVersion ofVersion, final String logicalNameOrPort) {
         Long port = versionPortMap.get(ofVersion).get(logicalNameOrPort);
         if (port == null) {
             try {
                 port = Long.decode(logicalNameOrPort);
-            } catch(NumberFormatException ne) {
+            } catch(final NumberFormatException ne) {
                 //ignore, sent null back.
             }
         }
         return port;
     }
 
-    public static PortNumberUni getProtocolAgnosticPort(OpenflowVersion ofVersion, Long portNumber) {
-        String reservedPortLogicalName = getPortLogicalName(ofVersion, portNumber);
+    public static PortNumberUni getProtocolAgnosticPort(final OpenflowVersion ofVersion, final Long portNumber) {
+        final String reservedPortLogicalName = getPortLogicalName(ofVersion, portNumber);
         return (reservedPortLogicalName == null ? new PortNumberUni(portNumber) :
                 new PortNumberUni(reservedPortLogicalName));
     }
 
-    public static Long getProtocolPortNumber(OpenflowVersion ofVersion, PortNumberUni port) {
-        String portLogicalName = port.getString();
+    public static Long getProtocolPortNumber(final OpenflowVersion ofVersion, final PortNumberUni port) {
+        final String portLogicalName = port.getString();
 
         if (portLogicalName != null) {
             return versionPortMap.get(ofVersion).get(portLogicalName);
@@ -101,11 +104,11 @@ public class OpenflowPortsUtil {
         }
     }
 
-    public static Long getMaxPortForVersion(OpenflowVersion ofVersion) {
+    public static Long getMaxPortForVersion(final OpenflowVersion ofVersion) {
         return getPortFromLogicalName (ofVersion, MAX);
     }
 
-    public static boolean isPortReserved(OpenflowVersion ofVersion, Long portNumber) {
+    public static boolean isPortReserved(final OpenflowVersion ofVersion, final Long portNumber) {
         return versionPortMap.get(ofVersion).inverse().containsKey(portNumber);
     }
 
@@ -114,7 +117,7 @@ public class OpenflowPortsUtil {
      * @param portNumber
      * @return true if port number is valid for given protocol version
      */
-    public static boolean checkPortValidity(OpenflowVersion ofVersion, Long portNumber) {
+    public static boolean checkPortValidity(final OpenflowVersion ofVersion, final Long portNumber) {
         boolean portIsValid = true;
         if (portNumber == null) {
             portIsValid = false;
@@ -132,7 +135,7 @@ public class OpenflowPortsUtil {
      * @param portNumber
      * @return string containing number or logical name
      */
-    public static String portNumberToString(PortNumberUni portNumber) {
+    public static String portNumberToString(final PortNumberUni portNumber) {
         String result = null;
         if (portNumber.getUint32() != null) {
             result = String.valueOf(portNumber.getUint32());