BMP parser is to strict for unknown elements / types
Description
Acceptance / Success Criteria
None
Lucidchart Diagrams
Activity
Show:
Sean Torres April 15, 2020 at 4:55 AM
Received the following while testing this PR
2020-04-14T23:49:43,347 | DEBUG | nioEventLoopGroup-3-3 | BmpParser | 314 - org.opennms.features.telemetry.protocols.bmp.parser - 26.1.0.SNAPSHOT | Unknown BGP Packet Type: 5
2020-04-14T23:49:43,348 | WARN | nioEventLoopGroup-3-3 | TcpListener | 311 - org.opennms.features.telemetry.listeners - 26.1.0.SNAPSHOT | Invalid packet: org.opennms.netmgt.telemetry.protocols.bmp.parser.InvalidPacketException: Expected Update Message, got: {}
2020-04-14T23:49:43,348 | DEBUG | nioEventLoopGroup-3-3 | TcpListener | 311 - org.opennms.features.telemetry.listeners - 26.1.0.SNAPSHOT |
io.netty.handler.codec.DecoderException: org.opennms.netmgt.telemetry.protocols.bmp.parser.InvalidPacketException: Expected Update Message, got: {} at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[?:?]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[?:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93) [116:io.netty.transport:4.1.48.Final]
at org.opennms.netmgt.telemetry.listeners.TcpListener$1$4.channelRead(TcpListener.java:108) [311:org.opennms.features.telemetry.listeners:26.1.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) [116:io.netty.transport:4.1.48.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [116:io.netty.transport:4.1.48.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [112:io.netty.common:4.1.48.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [112:io.netty.common:4.1.48.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [112:io.netty.common:4.1.48.Final]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: org.opennms.netmgt.telemetry.protocols.bmp.parser.InvalidPacketException: Expected Update Message, got: {}
at org.opennms.netmgt.telemetry.protocols.bmp.parser.proto.bgp.packets.UpdatePacket.parse(UpdatePacket.java:329) ~[?:?]
at org.opennms.netmgt.telemetry.protocols.bmp.parser.proto.bmp.packets.RouteMonitoringPacket.<init>(RouteMonitoringPacket.java:54) ~[?:?]
at org.opennms.netmgt.telemetry.protocols.bmp.parser.proto.bmp.Header$Type.parse(Header.java:101) ~[?:?]
at org.opennms.netmgt.telemetry.protocols.bmp.parser.proto.bmp.Header$Type.access$100(Header.java:83) ~[?:?]
at org.opennms.netmgt.telemetry.protocols.bmp.parser.proto.bmp.Header.parsePayload(Header.java:80) ~[?:?]
at org.opennms.netmgt.telemetry.protocols.bmp.parser.BmpParser$1.parse(BmpParser.java:222) ~[?:?]
at org.opennms.netmgt.telemetry.listeners.TcpListener$1$3.decode(TcpListener.java:116) ~[?:?]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:498) ~[?:?]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:437) ~[?:?]
... 22 more
Fixed
Details
Assignee
fookerfookerReporter
fookerfookerSprint
NoneFix versions
Priority
MajorParent
Details
Details
Assignee
fooker
fookerReporter
fooker
fookerSprint
None
Fix versions
Priority
Parent
PagerDuty
PagerDuty Incident
PagerDuty
PagerDuty Incident
PagerDuty

PagerDuty Incident
Created February 24, 2020 at 9:08 PM
Updated April 17, 2020 at 11:01 AM
Resolved April 17, 2020 at 11:01 AM
The BMP parser should add UNKNOWN variants for all elements and types and use this instead of throwing an
IllegalArgumentException
.If a packet can not be parsed anyways, it should not close the connection but print a warning and dump instead.