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;
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;
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;
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));
}
}
*/
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;
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;
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;
private final TransactionChainManager txChainManager;
private TranslatorLibrary translatorLibrary;
private OpenflowMessageListenerFacade openflowMessageListenerFacade;
- private DeviceFlowRegistry deviceFlowRegistry;
+ private final DeviceFlowRegistry deviceFlowRegistry;
private Timeout barrierTaskTimeout;
private NotificationProviderService notificationService;
@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);
flowCapableNodeConnector = new FlowCapableNodeConnectorBuilder().build();
}
- InstanceIdentifier<FlowCapableNodeConnector> iiToFlowCapableNodeConnector = iiToNodeConnector.augmentation(FlowCapableNodeConnector.class);
+ final InstanceIdentifier<FlowCapableNodeConnector> iiToFlowCapableNodeConnector = iiToNodeConnector.augmentation(FlowCapableNodeConnector.class);
writeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToFlowCapableNodeConnector, flowCapableNodeConnector);
}
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
}
@Override
- public void setCurrentBarrierTimeout(Timeout timeout) {
+ public void setCurrentBarrierTimeout(final Timeout timeout) {
barrierTaskTimeout = timeout;
}
*/
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;
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;
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
}
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()));
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;
/**
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);
}
}
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;
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
*
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
// 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
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);
}
}
- 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);
}
* @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;
* @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());