X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Ftranslator%2FPacketReceivedTranslator.java;h=9b5f76069f1d38d303bf27c4365ad7d6335be526;hb=refs%2Fchanges%2F90%2F40490%2F1;hp=991a855c9dc7c62e8e0943f7d5d503e5fb4909cb;hpb=17f9969eb979585ce051d3ebb14181df51dbf00d;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PacketReceivedTranslator.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PacketReceivedTranslator.java index 991a855c9d..9b5f76069f 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PacketReceivedTranslator.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/translator/PacketReceivedTranslator.java @@ -5,67 +5,65 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ + package org.opendaylight.openflowplugin.impl.translator; -import org.opendaylight.openflowplugin.api.OFConstants; -import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; +import com.google.common.annotations.VisibleForTesting; +import java.math.BigInteger; +import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; import org.opendaylight.openflowplugin.api.openflow.device.MessageTranslator; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; import org.opendaylight.openflowplugin.extension.api.AugmentTuple; import org.opendaylight.openflowplugin.extension.api.path.MatchPath; +import org.opendaylight.openflowplugin.impl.util.NodeConnectorRefToPortTranslator; import org.opendaylight.openflowplugin.openflow.md.core.extension.MatchExtensionHelper; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl; -import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; import org.opendaylight.openflowplugin.openflow.md.util.PacketInUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.MatchBuilder; - -import java.math.BigInteger; -import java.util.List; +import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId; /** * Created by tkubas on 4/1/15. */ public class PacketReceivedTranslator implements MessageTranslator { @Override - public PacketReceived translate(PacketInMessage input, DeviceContext deviceContext, Object connectionDistinguisher) { + public PacketReceived translate(final PacketInMessage input, final DeviceInfo deviceInfo, final Object connectionDistinguisher) { PacketReceivedBuilder packetReceivedBuilder = new PacketReceivedBuilder(); - BigInteger datapathId = deviceContext.getPrimaryConnectionContext().getFeatures().getDatapathId(); + BigInteger datapathId = deviceInfo.getDatapathId(); - // extract the port number - Long port = null; - if(input.getVersion() == OFConstants.OFP_VERSION_1_0 && input.getInPort() != null) { - port = input.getInPort().longValue(); - } else if (input.getVersion() == OFConstants.OFP_VERSION_1_3) { - if (input.getMatch() != null && input.getMatch().getMatchEntry() != null) { - port = getPortNumberFromMatch(input.getMatch().getMatchEntry()); - } - } + // TODO: connection cookie from connection distinguisher + // packetReceivedBuilder.setConnectionCookie(new ConnectionCookie(input.getCookie().longValue())); - //TODO connection cookie from connection distinguisher -// packetReceivedBuilder.setConnectionCookie(new ConnectionCookie(input.getCookie().longValue())); packetReceivedBuilder.setPayload(input.getData()); + // get the Cookie if it exists if (input.getCookie() != null) { packetReceivedBuilder.setFlowCookie(new FlowCookie(input.getCookie())); } - if(port != null) { - packetReceivedBuilder.setIngress(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(datapathId, port, OpenflowVersion.get(input.getVersion()))); + + // Try to create the NodeConnectorRef + BigInteger dataPathId = deviceInfo.getDatapathId(); + NodeConnectorRef nodeConnectorRef = NodeConnectorRefToPortTranslator.toNodeConnectorRef(input, dataPathId); + + // If we was able to create NodeConnectorRef, use it + if (nodeConnectorRef != null) { + packetReceivedBuilder.setIngress(nodeConnectorRef); } + packetReceivedBuilder.setPacketInReason(PacketInUtil.getMdSalPacketInReason(input.getReason())); - if(input.getTableId() != null) { - packetReceivedBuilder.setTableId(new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId(input.getTableId().getValue().shortValue())); + if (input.getTableId() != null) { + packetReceivedBuilder.setTableId(new TableId(input.getTableId().getValue().shortValue())); } - if(input.getMatch() != null) { + if (input.getMatch() != null) { org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match packetInMatch = getPacketInMatch(input, datapathId); packetReceivedBuilder.setMatch(packetInMatch); } @@ -73,7 +71,8 @@ public class PacketReceivedTranslator implements MessageTranslator entries) { - Long port = null; - for (MatchEntry entry : entries) { - InPortCase inPortCase = ((InPortCase) entry.getMatchEntryValue()); - org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPort inPort = inPortCase.getInPort(); - if (inPort != null) { - - if (port == null) { - port = inPort.getPortNumber().getValue(); - } else { -// LOG.warn("Multiple input ports discovered when walking through match entries (at least {} and {})", -// port, inPort.getPortNumber().getValue()); - } - } - } - return port; - } }