Hi Yann,
it seems that you are trying to register your deserializer as experimenter deserializer and not as extension deserializer, so when deserializing it is also trying to read experimenterId and sets it to key, and then because your key now also have experimenterId, finding deserializer for this in registry fails. And if you intended to use your code as experimenter deserializer, you should also use .setExperimenterId method on deserializer key to set the id for it when registering deserializer. So, try to change OxmMatchConstants.EXPERIMENTER_CLASS to OxmMatchConstants.NXM_0_CLASS and see if it helps or set that experimenter id if it is experimenter. Regards, Tomas ________________________________ Od: yann bourdeau <[email protected]> Odoslané: utorok, 2. mája 2017 0:48 Komu: [email protected] Kópia: Arun Paneri (NoviFlow) Predmet: [openflowplugin-dev] Problem on experimenters match field. Hi! Now, I’m trying to implement the match field after doing the actions. I have done all the actions and they work greats. However, for the match field I got an issue. The flow got installed on the switch but the deserialization from the stats of the match fields fails. It does not find the key of the deserializer. Does someone have any idea? Here is the REST request: VERB: PUT URL: http://localhost:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/table/2/flow/1234 BODY: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <flow xmlns="urn:opendaylight:flow:inventory"> <barrier>false</barrier> <cookie>10</cookie> <cookie_mask>10</cookie_mask> <flags>SEND_FLOW_REM</flags> <flow-name>FooXf1</flow-name> <hard-timeout>0</hard-timeout> <id>1234</id> <idle-timeout>0</idle-timeout> <installHw>false</installHw> <match> <extension-list xmlns="urn:opendaylight:openflowplugin:extension:general"> <extension-key xmlns:nxNB="urn:opendaylight:openflowplugin:extension:noviflow:match">nxNB:nxm-nfx-match-ip-payload-key </extension-key> <extension> <nxm-nfx-match-ip-payload xmlns="urn:opendaylight:openflowplugin:extension:noviflow:match"> <payload>11</payload> <mask>11</mask> </nxm-nfx-match-ip-payload> </extension> </extension-list> </match> <instructions> <instruction> <apply-actions> <action> <order>0</order> <nfx-action-set-payload-ip xmlns="urn:opendaylight:openflowplugin:extension:noviflow:action"> <payload_size>1</payload_size> <payload_offset>0</payload_offset> <hasmask>0</hasmask> <data>9</data> </nfx-action-set-payload-ip> </action> </apply-actions> <order>0</order> </instruction> </instructions> <priority>2</priority> <strict>false</strict> <table_id>2</table_id> </flow> It fails with the following error: 2017-05-01 18:33:58,205 | WARN | entLoopGroup-9-1 | OFDecoder | 285 - org.opendaylight.openflowjava.openflow-protocol-impl - 0.9.0.SNAPSHOT | Message deserialization failed java.lang.IllegalStateException: Deserializer for key: msgVersion: 4 objectClass: org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry msgType: 65535 oxm_field: 2 experimenterID: 4278190082 was not found - please verify that all needed deserializers ale loaded correctly at org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl.getDeserializer(DeserializerRegistryImpl.java:70)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer.deserializeList(ListDeserializer.java:52)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.deserialize(MatchDeserializer.java:53)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.deserialize(MatchDeserializer.java:30)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.setFlow(MultipartReplyMessageFactory.java:301)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:198)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:148)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory.deserialize(DeserializationFactory.java:55)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:49)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:26)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)[144:io.netty.codec:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[142:io.netty.transport:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[144:io.netty.codec:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[144:io.netty.codec:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[142:io.netty.transport:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[144:io.netty.codec:4.1.8.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[144:io.netty.codec:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[142:io.netty.transport:4.1.8.Final] at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)[146:io.netty.handler:4.1.8.Final] at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[285:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:642)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:565)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:479)[142:io.netty.transport:4.1.8.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:433)[142:io.netty.transport:4.1.8.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[141:io.netty.common:4.1.8.Final] at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[141:io.netty.common:4.1.8.Final] at java.lang.Thread.run(Thread.java:745)[:1.8.0_121] Here is how I define the deserializer key in the codec: private static final int NXM_FIELD_CODE = 0b0000010; public static final MatchEntryDeserializerKey DESERIALIZER_KEY = new MatchEntryDeserializerKey( EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.EXPERIMENTER_CLASS, NXM_FIELD_CODE); I can provide any other part of the code modified to support the match. I have attached the log file with log level set to debug to org.opendaylight.openflowplugin.impl Any help on what I’m doing wrong will be greatly appreciated. Thanks, Yann Bourdeau, M.Ing. Senior Software Developer 438-499-4607 [email protected]<mailto:[email protected]>
_______________________________________________ openflowplugin-dev mailing list [email protected] https://lists.opendaylight.org/mailman/listinfo/openflowplugin-dev
