|
Null Pointer Exception encountered when adding a learn flow to the OVS bridge.
Reproduction Step: issue the following command to the OVS with existing br-int:
sudo ovs-ofctl O OpenFlow13 add-flow br-int 'table=55, icmp6,dl_dst=fa:16:3e:7e:ca:fe,icmpv6_type=8,icmpv6_code=0 actions=learn(table=39,idle_timeout=3600,hard_timeout=3600,priority=61010,eth_type=0x86dd,nw_proto=58,NXM_NX_IPV6_SRC[]=NXM_NX_IPV6_DST[],NXM_NX_IPV6_DST[]=NXM_NX_IPV6_SRC[],icmpv6_code=0,icmpv6_type=0,load:0x1>NXM_NX_REG6[0..7]),resubmit(,100)'
The following exception is observed in karaf.log:
2016-11-17 16:53:15,493 | WARN | entLoopGroup-9-1 | OFDecoder | 303 - org.opendaylight.openflowjava.openflow-protocol-impl - 0.9.0.SNAPSHOT | Message deserialization failed
java.lang.IllegalArgumentException: Invalid range: -31011, expected: [[0‥65535]].
at org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.flow.mod.spec.flow.mod.spec.flow.mod.add.match.from.value._case.FlowModAddMatchFromValueBuilder.checkValueRange(FlowModAddMatchFromValueBuilder.java:127)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.flow.mod.spec.flow.mod.spec.flow.mod.add.match.from.value._case.FlowModAddMatchFromValueBuilder.setValue(FlowModAddMatchFromValueBuilder.java:132)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.LearnCodecUtil.readFlowModAddMatchFromValue(LearnCodecUtil.java:264)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.LearnCodecUtil.readFlowMod(LearnCodecUtil.java:233)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.LearnCodecUtil.buildFlowModSpecs(LearnCodecUtil.java:201)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.LearnCodec.deserialize(LearnCodec.java:69)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.LearnCodec.deserialize(LearnCodec.java:28)[319:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.api.impl.ActionDeserializer.deserialize(ActionDeserializer.java:59)[318:org.opendaylight.openflowplugin.openflowjava-extension-nicira-api:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.api.impl.ActionDeserializer.deserialize(ActionDeserializer.java:22)[318:org.opendaylight.openflowplugin.openflowjava-extension-nicira-api:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer.deserializeList(ListDeserializer.java:53)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.AbstractActionInstructionDeserializer.deserializeActions(AbstractActionInstructionDeserializer.java:38)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ApplyActionsInstructionDeserializer.deserialize(ApplyActionsInstructionDeserializer.java:36)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ApplyActionsInstructionDeserializer.deserialize(ApplyActionsInstructionDeserializer.java:25)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer.deserializeList(ListDeserializer.java:53)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.setFlow(MultipartReplyMessageFactory.java:304)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:198)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:148)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory.deserialize(DeserializationFactory.java:59)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:49)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:26)[303:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)[140:io.netty.codec:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)[139:io.netty.transport:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)[139:io.netty.transport:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)[139:io.netty.transport:4.0.37.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[140:io.netty.codec:4.0.37.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[140:io.netty.codec:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342)[139:io.netty.transport:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328)[139:io.netty.transport:4.0.37.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321)[139:io.netty.transport:4.0.37.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[140:io.netty.codec:4.0.37.Final]
Problem:
At:
openflowplugin/extension/openflowjava-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/LearnCodecUtil.java:264
builder.setValue((int) message.readShort());
The buffer reads a short (max value 0x7FFF) for the ipv6 ether type value 0x86dd and hence the exception.
|