From cf50e7d1be03f1ab87881bd90f1ec6fb356e508f Mon Sep 17 00:00:00 2001 From: Ajay Lele Date: Fri, 17 Jan 2020 10:18:40 -0800 Subject: [PATCH] Ignore unknown subobjects while parsing RRO/ERO objects in PCEP messages Make handling of unknown subobjects more liberal. Log message parsing exceptions at error level instead of debug to make it easier to detect. JIRA: BGPCEP-892 Change-Id: I3d142e3d857b1ee154aaedf3d28a09d870932915 Signed-off-by: Ajay Lele --- .../pcep/parser/object/AbstractEROWithSubobjectsParser.java | 2 +- .../pcep/parser/object/AbstractRROWithSubobjectsParser.java | 2 +- .../pcep/parser/object/AbstractXROWithSubobjectsParser.java | 2 +- .../pcep/parser/subobject/EROLabelSubobjectParser.java | 6 +++++- .../pcep/parser/subobject/RROLabelSubobjectParser.java | 6 +++++- .../protocol/pcep/impl/PCEPByteToMessageDecoder.java | 2 +- .../parser/impl/subobject/ero/EROLabelSubobjectParser.java | 6 +++++- .../parser/impl/subobject/rro/RROLabelSubobjectParser.java | 6 +++++- .../rsvp/parser/spi/subobjects/EROSubobjectListParser.java | 2 +- .../rsvp/parser/spi/subobjects/RROSubobjectListParser.java | 2 +- .../rsvp/parser/spi/subobjects/XROSubobjectListParser.java | 2 +- 11 files changed, 27 insertions(+), 11 deletions(-) diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractEROWithSubobjectsParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractEROWithSubobjectsParser.java index fda09f91d1..e3fdcdae8c 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractEROWithSubobjectsParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractEROWithSubobjectsParser.java @@ -55,7 +55,7 @@ public abstract class AbstractEROWithSubobjectsParser extends CommonObjectParser LOG.debug("Attempt to parse subobject from bytes: {}", ByteBufUtil.hexDump(buffer)); final Subobject sub = this.subobjReg.parseSubobject(type, buffer.readSlice(length), loose); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractRROWithSubobjectsParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractRROWithSubobjectsParser.java index ff783fa388..e3ea391477 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractRROWithSubobjectsParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractRROWithSubobjectsParser.java @@ -50,7 +50,7 @@ public abstract class AbstractRROWithSubobjectsParser extends CommonObjectParser LOG.debug("Attempt to parse subobject from bytes: {}", ByteBufUtil.hexDump(buffer)); final Subobject sub = this.subobjReg.parseSubobject(type, buffer.readSlice(length)); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractXROWithSubobjectsParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractXROWithSubobjectsParser.java index 0f7ca2a239..bd23431dde 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractXROWithSubobjectsParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/AbstractXROWithSubobjectsParser.java @@ -55,7 +55,7 @@ public abstract class AbstractXROWithSubobjectsParser extends CommonObjectParser LOG.debug("Attempt to parse subobject from bytes: {}", ByteBufUtil.hexDump(buffer)); final Subobject sub = this.subobjReg.parseSubobject(type, buffer.readSlice(length), mandatory); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/EROLabelSubobjectParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/EROLabelSubobjectParser.java index 8b8a4896c1..3a0f1a20a6 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/EROLabelSubobjectParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/EROLabelSubobjectParser.java @@ -25,8 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.label._case.Label; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.label._case.LabelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.LabelType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class EROLabelSubobjectParser implements EROSubobjectParser, EROSubobjectSerializer { + private static final Logger LOG = LoggerFactory.getLogger(EROLabelSubobjectParser.class); public static final int TYPE = 3; @@ -59,7 +62,8 @@ public class EROLabelSubobjectParser implements EROSubobjectParser, EROSubobject final LabelType labelType = this.registry.parseLabel(cType, buffer.slice()); if (labelType == null) { - throw new PCEPDeserializerException("Unknown C-TYPE for ero label subobject. Passed: " + cType); + LOG.warn("Ignoring ERO label subobject with unknown C-TYPE: {}", cType); + return null; } final LabelBuilder lbuilder = new LabelBuilder() .setUniDirectional(reserved.get(U_FLAG_OFFSET)) diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/RROLabelSubobjectParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/RROLabelSubobjectParser.java index bac5ee2a2e..09523ccbe6 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/RROLabelSubobjectParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/subobject/RROLabelSubobjectParser.java @@ -25,8 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.LabelCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.label._case.Label; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.label._case.LabelBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class RROLabelSubobjectParser implements RROSubobjectParser, RROSubobjectSerializer { + private static final Logger LOG = LoggerFactory.getLogger(RROLabelSubobjectParser.class); public static final int TYPE = 3; @@ -61,7 +64,8 @@ public class RROLabelSubobjectParser implements RROSubobjectParser, RROSubobject final LabelType labelType = this.registry.parseLabel(cType, buffer.slice()); if (labelType == null) { - throw new PCEPDeserializerException("Unknown C-TYPE for ero label subobject. Passed: " + cType); + LOG.warn("Ignoring RRO label subobject with unknown C-TYPE: {}", cType); + return null; } final LabelBuilder builder = new LabelBuilder() .setUniDirectional(reserved.get(U_FLAG_OFFSET)) diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java index d92d4adfb1..1077dee337 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java @@ -50,7 +50,7 @@ public final class PCEPByteToMessageDecoder extends ByteToMessageDecoder { try { out.add(parse(in, errors)); } catch (final PCEPDeserializerException e) { - LOG.debug("Failed to decode protocol message", e); + LOG.warn("Failed to decode protocol message", e); } in.discardReadBytes(); diff --git a/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/ero/EROLabelSubobjectParser.java b/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/ero/EROLabelSubobjectParser.java index dea75ea25b..58286303d8 100644 --- a/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/ero/EROLabelSubobjectParser.java +++ b/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/ero/EROLabelSubobjectParser.java @@ -25,8 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.explicit.route.subobjects.list.SubobjectContainer; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.explicit.route.subobjects.list.SubobjectContainerBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.LabelType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class EROLabelSubobjectParser implements EROSubobjectParser, EROSubobjectSerializer { + private static final Logger LOG = LoggerFactory.getLogger(EROLabelSubobjectParser.class); public static final int TYPE = 3; @@ -59,7 +62,8 @@ public class EROLabelSubobjectParser implements EROSubobjectParser, EROSubobject final LabelType labelType = this.registry.parseLabel(cType, buffer.slice()); if (labelType == null) { - throw new RSVPParsingException("Unknown C-TYPE for ero label subobject. Passed: " + cType); + LOG.warn("Ignoring ERO label subobject with unknown C-TYPE: {}", cType); + return null; } final LabelBuilder builder = new LabelBuilder(); builder.setUniDirectional(reserved.get(U_FLAG_OFFSET)); diff --git a/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/rro/RROLabelSubobjectParser.java b/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/rro/RROLabelSubobjectParser.java index 8d0130d756..2d026330f3 100644 --- a/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/rro/RROLabelSubobjectParser.java +++ b/rsvp/impl/src/main/java/org/opendaylight/protocol/rsvp/parser/impl/subobject/rro/RROLabelSubobjectParser.java @@ -25,8 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.LabelCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.label._case.Label; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.label._case.LabelBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class RROLabelSubobjectParser implements RROSubobjectParser, RROSubobjectSerializer { + private static final Logger LOG = LoggerFactory.getLogger(RROLabelSubobjectParser.class); public static final int TYPE = 3; @@ -61,7 +64,8 @@ public class RROLabelSubobjectParser implements RROSubobjectParser, RROSubobject final LabelType labelType = this.registry.parseLabel(cType, buffer.slice()); if (labelType == null) { - throw new RSVPParsingException("Unknown C-TYPE for ero label subobject. Passed: " + cType); + LOG.warn("Ignoring RRO label subobject with unknown C-TYPE: {}", cType); + return null; } final LabelBuilder builder = new LabelBuilder(); builder.setUniDirectional(reserved.get(U_FLAG_OFFSET)); diff --git a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java index 9440e3e3b3..6385bdcf7b 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java +++ b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java @@ -49,7 +49,7 @@ public abstract class EROSubobjectListParser extends AbstractRSVPObjectParser { LOG.debug("Attempt to parse subobject from bytes: {}", ByteBufUtil.hexDump(buffer)); final SubobjectContainer sub = this.subobjReg.parseSubobject(type, buffer.readSlice(length), loose); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); diff --git a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/RROSubobjectListParser.java b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/RROSubobjectListParser.java index 17d2519826..60d4783980 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/RROSubobjectListParser.java +++ b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/RROSubobjectListParser.java @@ -44,7 +44,7 @@ public abstract class RROSubobjectListParser extends AbstractRSVPObjectParser { LOG.debug("Attempt to parse subobject from bytes: {}", ByteBufUtil.hexDump(buffer)); final SubobjectContainer sub = this.subobjReg.parseSubobject(type, buffer.readSlice(length)); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); diff --git a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/XROSubobjectListParser.java b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/XROSubobjectListParser.java index 6fbf469063..aaddb11a95 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/XROSubobjectListParser.java +++ b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/XROSubobjectListParser.java @@ -48,7 +48,7 @@ public abstract class XROSubobjectListParser extends AbstractRSVPObjectParser { final SubobjectContainer sub = this.subobjReg.parseSubobject(type, byteBuf.readSlice(length), mandatory); if (sub == null) { - LOG.warn("Unknown subobject type: {}. Ignoring subobject.", type); + LOG.warn("Parsing failed for subobject type: {}. Ignoring subobject.", type); } else { LOG.debug("Subobject was parsed. {}", sub); subs.add(sub); -- 2.36.6