2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.rsvp.parser.impl.te;
10 import static com.google.common.base.Preconditions.checkArgument;
12 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
14 import java.nio.charset.StandardCharsets;
15 import org.opendaylight.protocol.rsvp.parser.spi.RSVPParsingException;
16 import org.opendaylight.protocol.rsvp.parser.spi.subobjects.AbstractRSVPObjectParser;
17 import org.opendaylight.protocol.util.BitArray;
18 import org.opendaylight.protocol.util.ByteArray;
19 import org.opendaylight.protocol.util.ByteBufUtils;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.RsvpTeObject;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.basic.session.attribute.object._case.BasicSessionAttributeObject;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.basic.session.attribute.object._case.BasicSessionAttributeObjectBuilder;
24 public final class SessionAttributeLspObjectParser extends AbstractRSVPObjectParser {
25 public static final short CLASS_NUM = 207;
26 public static final short CTYPE = 7;
27 static final int LOCAL_PROTECTION = 7;
28 static final int LABEL_RECORDING = 6;
29 static final int SE_STYLE = 5;
30 private static final int BODY_SIZE_C7 = 4;
31 private static final int PADDING = 4;
33 static int getPadding(final int length) {
34 return (PADDING - length % PADDING) % PADDING;
38 protected RsvpTeObject localParseObject(final ByteBuf byteBuf) throws RSVPParsingException {
39 final BasicSessionAttributeObjectBuilder builder = new BasicSessionAttributeObjectBuilder()
40 .setSetupPriority(ByteBufUtils.readUint8(byteBuf))
41 .setHoldPriority(ByteBufUtils.readUint8(byteBuf));
42 final BitArray bs = BitArray.valueOf(byteBuf.readByte());
43 builder.setLocalProtectionDesired(bs.get(LOCAL_PROTECTION));
44 builder.setLabelRecordingDesired(bs.get(LABEL_RECORDING));
45 builder.setSeStyleDesired(bs.get(SE_STYLE));
46 final short nameLength = byteBuf.readUnsignedByte();
47 final ByteBuf auxBuf = byteBuf.readSlice(nameLength);
48 final String name = new String(ByteArray.readAllBytes(auxBuf), StandardCharsets.US_ASCII);
49 builder.setSessionName(name);
50 return builder.build();
54 public void localSerializeObject(final RsvpTeObject teLspObject, final ByteBuf output) {
55 checkArgument(teLspObject instanceof BasicSessionAttributeObject, "SessionAttributeObject is mandatory.");
57 final BasicSessionAttributeObject sessionObject = (BasicSessionAttributeObject) teLspObject;
58 final ByteBuf sessionName = Unpooled.wrappedBuffer(StandardCharsets.US_ASCII.encode(sessionObject
60 final int pad = getPadding(sessionName.readableBytes());
61 serializeAttributeHeader(BODY_SIZE_C7 + pad + sessionName.readableBytes(), CLASS_NUM, CTYPE, output);
62 output.writeByte(sessionObject.getSetupPriority().toJava());
63 output.writeByte(sessionObject.getHoldPriority().toJava());
64 final BitArray bs = new BitArray(FLAGS_SIZE);
65 bs.set(LOCAL_PROTECTION, sessionObject.isLocalProtectionDesired());
66 bs.set(LABEL_RECORDING, sessionObject.isLabelRecordingDesired());
67 bs.set(SE_STYLE, sessionObject.isSeStyleDesired());
69 output.writeByte(sessionName.readableBytes());
70 output.writeBytes(sessionName);
71 output.writeZero(pad);