From 00daf7e15909a845e7bfe71fd213c690df8f7ed2 Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Fri, 10 Apr 2015 11:52:11 +0200 Subject: [PATCH] PortTranslator modification Note: we've changed PortTranslator method input type to PortGrouping from PortStatus. Change-Id: I5dcae0ae781f6e2a6903fc368270ecc8b02059e0 Signed-off-by: Vaclav Demcak Signed-off-by: Jozef Gloncak --- .../common/NodeStaticReplyTranslatorUtil.java | 22 +++++--- .../impl/device/DeviceContextImpl.java | 54 ++++++++----------- .../impl/device/DeviceManagerImpl.java | 26 ++++++--- .../impl/translator/PortUpdateTranslator.java | 15 +++--- .../impl/util/TranslatorLibraryUtil.java | 8 +-- .../openflow/md/util/OpenflowPortsUtil.java | 33 ++++++------ 6 files changed, 84 insertions(+), 74 deletions(-) diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/NodeStaticReplyTranslatorUtil.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/NodeStaticReplyTranslatorUtil.java index 70a8e784dd..ce3e910404 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/NodeStaticReplyTranslatorUtil.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/NodeStaticReplyTranslatorUtil.java @@ -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)); } } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java index d8fbee6ef9..12a014aff5 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java @@ -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 messageTranslator = translatorLibrary.lookupTranslator(translatorKey); + final TranslatorKey translatorKey = new TranslatorKey(portStatus.getVersion(), PortGrouping.class.getName()); + final MessageTranslator messageTranslator = translatorLibrary.lookupTranslator(translatorKey); FlowCapableNodeConnector flowCapableNodeConnector = messageTranslator.translate(portStatus, this, null); - final KeyedInstanceIdentifier iiToNodeConnector = - provideIIToNodeConnector(portStatus.getPortNo(), portStatus.getVersion()); + final KeyedInstanceIdentifier 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 iiToFlowCapableNodeConnector = iiToNodeConnector.augmentation(FlowCapableNodeConnector.class); + final InstanceIdentifier 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 provideIIToNodes() { - return InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(deviceState.getNodeId())); - } - - private KeyedInstanceIdentifier provideIIToNodeConnector(final Long portNo, final Short version) { - final KeyedInstanceIdentifier 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 provideIIToNodeConnector(final long portNo, final short version) { + final InstanceIdentifier 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; } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java index 40020aee7c..41723684c8 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java @@ -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 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 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 connectorII = nodeII.child(NodeConnector.class, connector.getKey()); dContext.writeToTransaction(LogicalDatastoreType.OPERATIONAL, connectorII, connector); //FlowCapableNodeConnectorBuilder } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PortUpdateTranslator.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PortUpdateTranslator.java index 0d1027ec1d..beb341d14b 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PortUpdateTranslator.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PortUpdateTranslator.java @@ -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 { +public class PortUpdateTranslator implements MessageTranslator { @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())); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/TranslatorLibraryUtil.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/TranslatorLibraryUtil.java index 8ad8d51afb..eb57d066c5 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/TranslatorLibraryUtil.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/TranslatorLibraryUtil.java @@ -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); } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/OpenflowPortsUtil.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/OpenflowPortsUtil.java index a8d830b542..a6debe24ca 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/OpenflowPortsUtil.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/OpenflowPortsUtil.java @@ -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 OFv10 = new ImmutableBiMap.Builder() + final ImmutableBiMap OFv10 = new ImmutableBiMap.Builder() .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 OFv13 = new ImmutableBiMap.Builder() + final ImmutableBiMap OFv13 = new ImmutableBiMap.Builder() .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()); -- 2.36.6