BMP parser is to strict for unknown elements / types

Description

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.

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

fooker April 14, 2020 at 11:27 AM

Fixed

Details

Assignee

Reporter

Sprint

Fix versions

Priority

PagerDuty

Created February 24, 2020 at 9:08 PM
Updated April 17, 2020 at 11:01 AM
Resolved April 17, 2020 at 11:01 AM

Flag notifications