[OPNFLWJAVA-1] Exception in openflowjava Created: 21/Nov/13  Updated: 03/May/18  Resolved: 22/Nov/13

Status: Resolved
Project: openflowjava
Component/s: General
Affects Version/s: unspecified
Fix Version/s: None

Type: Improvement
Reporter: Ed Warnicke Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: Mac OS
Platform: PC



 Description   

I am seeing the following exception in openflowjava at the OSGI console:

2013-11-21 03:59:46.732 PST [nioEventLoopGroup-5-1] INFO o.o.o.p.i.c.PublishingChannelInitializer - Incoming connection accepted - building pipeline
2013-11-21 03:59:46.761 PST [nioEventLoopGroup-5-1] INFO o.o.o.p.impl.core.OFFrameDecoder - OF Protocol message received, type:0
2013-11-21 03:59:46.762 PST [pool-25-thread-1] INFO o.o.o.o.md.core.HandshakeManagerImpl - handshake STARTED
2013-11-21 03:59:46.776 PST [nioEventLoopGroup-5-1] INFO o.o.o.p.i.c.ConnectionAdapterImpl - Hello received / branch
2013-11-21 03:59:46.792 PST [pool-25-thread-1] INFO o.o.o.o.md.core.HandshakeManagerImpl - handshake STARTED
2013-11-21 03:59:46.796 PST [nioEventLoopGroup-5-1] INFO o.o.o.p.impl.core.OFFrameDecoder - OF Protocol message received, type:6
2013-11-21 03:59:46.799 PST [pool-25-thread-1] INFO o.o.o.o.md.core.HandshakeManagerImpl - handshake SETTLED: version=4, datapathId=1, auxiliaryId=0
2013-11-21 03:59:46.857 PST [pool-25-thread-1] INFO o.o.o.o.m.c.s.SalRegistrationManager - ModelDrivenSwitch for 1 registered to MD-SAL.
2013-11-21 03:59:47.088 PST [nioEventLoopGroup-5-1] INFO o.o.o.p.impl.core.OFFrameDecoder - OF Protocol message received, type:10
2013-11-21 03:59:47.099 PST [nioEventLoopGroup-5-1] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.codec.DecoderException: java.lang.IllegalArgumentException: illegal length
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[na:na]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[na:na]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[na:na]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:253) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[na:na]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[na:na]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[na:na]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) ~[na:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) ~[na:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) ~[na:na]
at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]
Caused by: java.lang.IllegalArgumentException: illegal length
at org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber.<init>(PortNumber.java:21) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.createMatchEntriesInternal(MatchDeserializer.java:216) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.createMatchEntries(MatchDeserializer.java:181) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer.createMatch(MatchDeserializer.java:155) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.PacketInMessageFactory.bufferToMessage(PacketInMessageFactory.java:50) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.PacketInMessageFactory.bufferToMessage(PacketInMessageFactory.java:19) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory.bufferToMessage(DeserializationFactory.java:33) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.core.OF13Decoder.decode(OF13Decoder.java:33) ~[na:na]
at org.opendaylight.openflowjava.protocol.impl.core.OF13Decoder.decode(OF13Decoder.java:18) ~[na:na]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[na:na]
... 18 common frames omitted

Context for reproduction:

I'm running mininet with:

sudo mn --topo single,3 --controller 'remote,ip=192.168.195.157:6653' --switch ovsk,protocols=OpenFlow13

(using the image from here: https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin::End_to_End_Inventory )

git context:

hagbard@ubuntu:~/git/controller$ git log -2
commit 0199f96873b6c42e85d91192e008c587aa4fd71c
Author: Ed Warnicke <eaw@cisco.com>
Date: Thu Nov 21 03:45:27 2013 -0800

Fixed NPE in MD-FRM.

There was an uninitialized ConcurrentMap. Initialized it.

Change-Id: I1bc5c4959806c020b630b4a5da3e3a9c311850f5
Signed-off-by: Ed Warnicke <eaw@cisco.com>

commit 3f34c4cf195d0a9dd18a820624b517fe7cc03bb0
Merge: 6a796ca 6175d57
Author: Ed Warnicke <eaw@cisco.com>
Date: Wed Nov 20 23:54:14 2013 +0000

Merge "Ganymed ChannelManager hack for subsystem command, functionality for subsystem added - tabulators replaced"

hagbard@ubuntu:~/git/openflowplugin$ git log -2
commit 82cd08ffdcef59dd2c6a621bcd02e58bf8414334
Author: Ed Warnicke <eaw@cisco.com>
Date: Tue Nov 19 18:41:38 2013 -0600

This should be working multipartdesc but isn't... debugging

Change-Id: Id28b08cff0bb68a2c8ebcee30af8753a947f8559
Signed-off-by: Ed Warnicke <eaw@cisco.com>

commit 8aa143a24e937d5f73d4bdcd52c01e723693a6c2
Author: Prasanna Huddar <prasanna.huddar@ericsson.com>
Date: Wed Nov 20 20:37:54 2013 +0530

Error/Experimenter converters

Signed-off-by: Prasanna Huddar <prasanna.huddar@ericsson.com>
Change-Id: I47b62f91444842fa896495d880fd442268ecb3a7

hagbard@ubuntu:~/git/openflowjava$ git log -2
commit 8ef500125b8ec9fcaf70ef3cd0c416691d72a722
Author: Michal Polkorab <michal.polkorab@pantheon.sk>
Date: Mon Nov 18 16:48:32 2013 +0100

Fixed onConnectionReady event firing

Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>

commit da52afe56c201601b9dd8d52a537146988be4149
Author: Michal Polkorab <michal.polkorab@pantheon.sk>
Date: Mon Nov 18 15:19:33 2013 +0100

TlsDetector pipeline engaging parameterizable

Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
Change-Id: I4015d4a4b0ad9de50c1f9ba450d56c3b2acaacf4

This is all against the distribution build in openflowplugin/distributions/base



 Comments   
Comment by Ed Warnicke [ 21/Nov/13 ]

Also... note I'm using this:

https://git.opendaylight.org/gerrit/#/c/2853/

Comment by Michal Polkorab [ 22/Nov/13 ]

Hello,

I have fixed the PortNumber issue with this change: https://git.opendaylight.org/gerrit/#/c/2985/

I removed the range check and introduced two enums: PortNumberValues (for OF v1.3) and PortNumberValuesV10 (for OF v1.0)
We (I and Michal Rehak) had a discussion about PortNumber processing and translation. Library could use union in PortNumber, but there would be three values to check for null (possibly more with later versions) creating unnecessarily complex structure, or there would be two PortNumber structures (for OF 1.0 and OF 1.3) each containing number or correct enum.

So we came to conclusion that library will provide plugin with integer and plugin will check for special values and use correct enum.

Regards
Michal

Generated at Wed Feb 07 20:28:42 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.