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;
@Override
public SubobjectContainer parseSubobject(final ByteBuf buffer, final boolean loose) throws RSVPParsingException {
- Preconditions.checkArgument(buffer != null && buffer.isReadable(), "Array of bytes is mandatory. Can't be null or empty.");
+ Preconditions.checkArgument(buffer != null && buffer.isReadable(),
+ "Array of bytes is mandatory. Can't be null or empty.");
if (buffer.readableBytes() < HEADER_LENGTH) {
- throw new RSVPParsingException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >"
- + HEADER_LENGTH + ".");
+ throw new RSVPParsingException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; "
+ + "Expected: >" + HEADER_LENGTH + ".");
}
final BitArray reserved = BitArray.valueOf(buffer, FLAGS_SIZE);
final short cType = buffer.readUnsignedByte();
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));
builder.setLabelType(labelType);
- return new SubobjectContainerBuilder().setLoose(loose).setSubobjectType(new LabelCaseBuilder().setLabel(builder.build()).build()).build();
+ return new SubobjectContainerBuilder().setLoose(loose).setSubobjectType(
+ new LabelCaseBuilder().setLabel(builder.build()).build()).build();
}
@Override
public void serializeSubobject(final SubobjectContainer subobject, final ByteBuf buffer) {
- Preconditions.checkArgument(subobject.getSubobjectType() instanceof LabelCase, "Unknown subobject instance. Passed %s. Needed LabelCase.", subobject.getSubobjectType().getClass());
+ Preconditions.checkArgument(subobject.getSubobjectType() instanceof LabelCase,
+ "Unknown subobject instance. Passed %s. Needed LabelCase.",
+ subobject.getSubobjectType().getClass());
final Label label = ((LabelCase) subobject.getSubobjectType()).getLabel();
final ByteBuf body = Unpooled.buffer();
- this.registry.serializeLabel(label.isUniDirectional(), false, label.getLabelType(), body);
- EROSubobjectUtil.formatSubobject(TYPE, subobject.isLoose(), body, buffer);
+ this.registry.serializeLabel(label.getUniDirectional(), false, label.getLabelType(), body);
+ EROSubobjectUtil.formatSubobject(TYPE, subobject.getLoose(), body, buffer);
}
}