import org.opendaylight.protocol.pcep.spi.TlvParser;
import org.opendaylight.protocol.pcep.spi.TlvSerializer;
import org.opendaylight.protocol.pcep.spi.TlvUtil;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.pce.capability.tlv.SrPceCapability;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.pce.capability.tlv.SrPceCapabilityBuilder;
+import org.opendaylight.protocol.util.BitArray;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.sr.pce.capability.tlv.SrPceCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.sr.pce.capability.tlv.SrPceCapabilityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Tlv;
import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
public class SrPceCapabilityTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 26;
- private static final int MSD_LENGTH = 1;
+ private static final int BITSET_LENGTH = 8;
+ private static final int N_FLAG_POSITION = 7;
+ private static final int X_FLAG_POSITION = 6;
private static final int CONTENT_LENGTH = 4;
- private static final int OFFSET = CONTENT_LENGTH - MSD_LENGTH;
+ private static final int OFFSET = 2;
@Override
public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
checkArgument(tlv instanceof SrPceCapability, "SrPceCapability is mandatory.");
final ByteBuf body = Unpooled.buffer(CONTENT_LENGTH);
+
+ /* Reserved 2 bytes */
body.writerIndex(OFFSET);
- ByteBufUtils.writeOrZero(body, ((SrPceCapability) tlv).getMsd());
+
+ /* Flags */
+ final SrPceCapability srPceCapability = (SrPceCapability) tlv;
+ final BitArray bits = new BitArray(BITSET_LENGTH);
+ bits.set(N_FLAG_POSITION, srPceCapability.isNFlag());
+ bits.set(X_FLAG_POSITION, srPceCapability.isXFlag());
+ bits.toByteBuf(body);
+
+ /* MSD */
+ ByteBufUtils.writeOrZero(body, srPceCapability.getMsd());
+
TlvUtil.formatTlv(TYPE, body, buffer);
}
if (buffer == null) {
return null;
}
+ final BitArray bitSet = BitArray.valueOf(buffer.readerIndex(OFFSET).readByte());
+ final boolean n = bitSet.get(N_FLAG_POSITION);
+ final boolean x = bitSet.get(X_FLAG_POSITION);
+
return new SrPceCapabilityBuilder()
- .setMsd(ByteBufUtils.readUint8(buffer.readerIndex(OFFSET)))
+ .setNFlag(n)
+ .setXFlag(x)
+ .setMsd(ByteBufUtils.readUint8(buffer))
.build();
}
}