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=35e031ffe2a79cc1ef40c70f3e2cd220f2d1d114;hb=e4dc538e3441511f55553232b0e8709ff5a43ecb;hp=d4a650d324753a498274f7dc3af79c60186caac4;hpb=0cd77f8ef3c8045fba03dde20044a08ec44e29f5;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 d4a650d324..35e031ffe2 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 @@ -10,40 +10,40 @@ package org.opendaylight.openflowplugin.impl.translator; import com.google.common.annotations.VisibleForTesting; import java.math.BigInteger; -import java.util.List; -import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; +import java.util.Optional; +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.impl.util.PacketInUtil; 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.PacketInUtil; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData; 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 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId; -/** - * Created by tkubas on 4/1/15. - */ public class PacketReceivedTranslator implements MessageTranslator { + private final ConvertorExecutor convertorExecutor; + + public PacketReceivedTranslator(ConvertorExecutor convertorExecutor) { + this.convertorExecutor = convertorExecutor; + } + @Override - public PacketReceived translate(final PacketInMessage input, final DeviceContext deviceContext, final 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(); // TODO: connection cookie from connection distinguisher - // packetReceivedBuilder.setConnectionCookie(new ConnectionCookie(input.getCookie().longValue())); - packetReceivedBuilder.setPayload(input.getData()); // get the Cookie if it exists @@ -51,8 +51,11 @@ public class PacketReceivedTranslator implements MessageTranslator matchExtensionWrap = - MatchExtensionHelper.processAllExtensions( - input.getMatch().getMatchEntry(), OpenflowVersion.get(input.getVersion().shortValue()), MatchPath.PACKETRECEIVED_MATCH); + org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.Match getPacketInMatch( + final PacketInMessage input, final BigInteger datapathId) { + + final VersionDatapathIdConvertorData datapathIdConvertorData = new VersionDatapathIdConvertorData( + input.getVersion()); + datapathIdConvertorData.setDatapathId(datapathId); + + final Optional + matchOptional = convertorExecutor.convert(input.getMatch(), datapathIdConvertorData); + final MatchBuilder matchBuilder = matchOptional.map(matchBuilder1 -> new MatchBuilder(matchBuilder1.build())) + .orElseGet(MatchBuilder::new); + + final AugmentTuple + matchExtensionWrap = MatchExtensionHelper + .processAllExtensions(input.getMatch().getMatchEntry(), OpenflowVersion.get(input.getVersion()), + MatchPath.PACKET_RECEIVED_MATCH); + if (matchExtensionWrap != null) { - matchBuilder.addAugmentation(matchExtensionWrap.getAugmentationClass(), matchExtensionWrap.getAugmentationObject()); + matchBuilder.addAugmentation(matchExtensionWrap.getAugmentationClass(), + matchExtensionWrap.getAugmentationObject()); } - return matchBuilder.build(); - } - @VisibleForTesting - static Long getPortNumberFromMatch(final List entries) { - Long port = null; - for (MatchEntry entry : entries) { - if (InPortCase.class.equals(entry.getMatchEntryValue().getImplementedInterface())) { - 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) { - port = inPort.getPortNumber().getValue(); - break; - } - } - } - return port; + return matchBuilder.build(); } }