<version>${osgi.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
</dependencies>
<build>
}
}
}
-
- grouping p2mp-capable-tlv {
- description "P2MP CAPABLE TLV";
- reference "https://tools.ietf.org/html/rfc6006#section-3.1.2";
-
- leaf value {
- type uint16;
- mandatory true;
- }
- }
-
grouping stateful-capability-tlv {
description "Stateful PCE Capability TLV";
grouping lsp-identifiers-tlv {
description "LSP Identifiers TLV";
reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3.1";
-
- uses tlv;
- leaf lsp-id {
- type rsvp:lsp-id;
- mandatory true;
- }
-
- leaf tunnel-id {
- type rsvp:tunnel-id;
- mandatory true;
- }
-
- choice address-family {
- case ipv4 {
- leaf ipv4-tunnel-sender-address {
- type inet:ipv4-address;
- mandatory true;
- }
- leaf ipv4-extended-tunnel-id {
- type rsvp:ipv4-extended-tunnel-id;
- mandatory true;
- }
+ container lsp-identifiers {
+ uses tlv;
+ leaf lsp-id {
+ type rsvp:lsp-id;
+ mandatory true;
}
- case ipv6 {
- leaf ipv6-tunnel-sender-address {
- type inet:ipv6-address;
- mandatory true;
+
+ leaf tunnel-id {
+ type rsvp:tunnel-id;
+ mandatory true;
+ }
+
+ choice address-family {
+ case ipv4 {
+ leaf ipv4-tunnel-sender-address {
+ type inet:ipv4-address;
+ mandatory true;
+ }
+ leaf ipv4-extended-tunnel-id {
+ type rsvp:ipv4-extended-tunnel-id;
+ mandatory true;
+ }
}
- leaf ipv6-extended-tunnel-id {
- type rsvp:ipv6-extended-tunnel-id;
- mandatory true;
+ case ipv6 {
+ leaf ipv6-tunnel-sender-address {
+ type inet:ipv6-address;
+ mandatory true;
+ }
+ leaf ipv6-extended-tunnel-id {
+ type rsvp:ipv6-extended-tunnel-id;
+ mandatory true;
+ }
}
}
+ // FIXME: add tunnel endpoint (from stateful-07)
}
- // FIXME: add tunnel endpoint (from stateful-07)
}
grouping symbolic-path-name-tlv {
description "Symbolic Path Name TLV";
reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3.2";
-
- uses tlv;
- leaf path-name {
- type symbolic-path-name;
- mandatory true;
+ container symbolic-path-name {
+ uses tlv;
+ leaf path-name {
+ type symbolic-path-name;
+ mandatory true;
+ }
}
}
grouping lsp-error-code-tlv {
description "LSP Error Code TLV";
reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3.3";
-
- uses tlv;
- leaf error-code {
- type uint32;
- mandatory true;
+ container lsp-error-code {
+ uses tlv;
+ leaf error-code {
+ type uint32;
+ mandatory true;
+ }
}
}
grouping rsvp-error-spec-tlv {
description "RSVP Error Spec TLV";
reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3.4";
-
- uses tlv;
- choice error-type {
- case rsvp {
- container rsvp-error {
- uses rsvp:error-spec;
+ container rsvp-error-spec {
+ uses tlv;
+ choice error-type {
+ case rsvp {
+ container rsvp-error {
+ uses rsvp:error-spec;
+ }
}
- }
- case user {
- container user-error {
- uses rsvp:user-error-spec;
+ case user {
+ container user-error {
+ uses rsvp:user-error-spec;
+ }
}
}
}
grouping order-tlv {
description "Order TLV";
reference "https://tools.ietf.org/html/rfc5557#section-5.4";
-
- uses tlv;
- leaf delete {
- type uint32;
- mandatory true;
- }
-
- leaf setup {
- type uint32;
- mandatory true;
+ container order {
+ uses tlv;
+ leaf delete {
+ type uint32;
+ mandatory true;
+ }
+
+ leaf setup {
+ type uint32;
+ mandatory true;
+ }
}
}
container of-list {
uses of-list-tlv;
}
-
- container p2mp {
- uses p2mp-capable-tlv;
- }
-
container stateful {
uses stateful-capability-tlv;
}
uses object;
container "tlvs" {
- container order {
- uses order-tlv;
- }
+ uses order-tlv;
}
leaf priority {
uses object;
container "tlvs" {
- container lsp-error-code {
- uses lsp-error-code-tlv;
- }
+ uses lsp-error-code-tlv;
- container lsp-identifiers {
- uses lsp-identifiers-tlv;
- }
+ uses lsp-identifiers-tlv;
- container rsvp-error-spec {
- uses rsvp-error-spec-tlv;
- }
+ uses rsvp-error-spec-tlv;
- container symbolic-path-name {
- uses symbolic-path-name-tlv;
- }
+ uses symbolic-path-name-tlv;
}
leaf plsp-id {
type operational-status;
mandatory true;
}
-
- leaf signaling-type {
- type uint8;
- mandatory true;
- }
}
grouping of-object {
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.KeepaliveMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LoadBalancingObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspDbVersionTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspErrorCodeTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspIdentifiersTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspaObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.MetricObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NotificationObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfListTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OpenMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OpenObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OrderTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PathKeyObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PathKeySubobject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PcepErrorObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PredundancyGroupIdTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ReportedRouteObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RpObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RsvpErrorSpecTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SrpObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.StatefulCapabilityTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SvecObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathNameTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.Order;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDuration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissing;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AsNumberSubobject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.IpPrefixSubobject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LabelSubobject;
context.registerTlvParser(LspDbVersionTlvParser.TYPE, new LspDbVersionTlvParser());
context.registerTlvParser(PredundancyGroupTlvParser.TYPE, new PredundancyGroupTlvParser());
- context.registerTlvSerializer(NoPathVectorTlv.class, new NoPathVectorTlvParser());
+ context.registerTlvSerializer(NoPathVector.class, new NoPathVectorTlvParser());
context.registerTlvSerializer(OverloadDuration.class, new OverloadedDurationTlvParser());
context.registerTlvSerializer(ReqMissing.class, new ReqMissingTlvParser());
context.registerTlvSerializer(OfListTlv.class, new OFListTlvParser());
- context.registerTlvSerializer(OrderTlv.class, new OrderTlvParser());
+ context.registerTlvSerializer(Order.class, new OrderTlvParser());
context.registerTlvSerializer(StatefulCapabilityTlv.class, new PCEStatefulCapabilityTlvParser());
- context.registerTlvSerializer(SymbolicPathNameTlv.class, new LspSymbolicNameTlvParser());
- context.registerTlvSerializer(LspIdentifiersTlv.class, new LSPIdentifierTlvParser());
- context.registerTlvSerializer(LspErrorCodeTlv.class, new LspUpdateErrorTlvParser());
- context.registerTlvSerializer(RsvpErrorSpecTlv.class, new RSVPErrorSpecTlvParser());
+ context.registerTlvSerializer(SymbolicPathName.class, new LspSymbolicNameTlvParser());
+ context.registerTlvSerializer(LspIdentifiers.class, new LSPIdentifierTlvParser());
+ context.registerTlvSerializer(LspErrorCode.class, new LspUpdateErrorTlvParser());
+ context.registerTlvSerializer(RsvpErrorSpec.class, new RSVPErrorSpecTlvParser());
context.registerTlvSerializer(LspDbVersionTlv.class, new LspDbVersionTlvParser());
context.registerTlvSerializer(PredundancyGroupIdTlv.class, new PredundancyGroupTlvParser());
if (bytes == null) {
throw new IllegalArgumentException("Byte array is mandatory.");
}
+ if (bytes.length == 0) {
+ return;
+ }
int length;
int byteOffset = 0;
logger.trace("Attempt to parse tlv from bytes: {}", ByteArray.bytesToHexString(tlvBytes));
final Tlv tlv = this.tlvReg.getTlvParser(type).parseTlv(tlvBytes);
- logger.debug("Tlv was parsed. {}", tlv);
+ logger.trace("Tlv was parsed. {}", tlv);
addTlv(builder, tlv);
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.Tlvs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.TlvsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.LspBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
/**
- * Parser for {@link org.opendaylight.protocol.pcep.object.PCEPLspObject PCEPLspObject}
+ * Parser for {@link LspObject}
*/
-public class PCEPLspObjectParser extends AbstractObjectWithTlvsParser<LspBuilder> {
+public class PCEPLspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilder> {
public static final int CLASS = 32;
* offset of TLVs offset of other fields are not defined as constants
* because of non-standard mapping of bits
*/
- public static final int TLVS_OFFSET = 4;
+ private static final int TLVS_OFFSET = 4;
/*
* 12b extended to 16b so first 4b are restricted (belongs to LSP ID)
*/
private static final int DELEGATE_FLAG_OFFSET = 15;
- private static final int OPERATIONAL_FLAG_OFFSET = 13;
private static final int SYNC_FLAG_OFFSET = 14;
- private static final int REMOVE_FLAG_OFFSET = 12;
+ private static final int REMOVE_FLAG_OFFSET = 13;
+ private static final int ADMINISTRATIVE_FLAG_OFFSET = 12;
+ private static final int OPERATIONAL_OFFSET = 9;
public PCEPLspObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
-
final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(bytes, 2, 2));
final LspBuilder builder = new LspBuilder();
-
- parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- // builder.setPlspId(new PlspId(ByteArray.bytesToLong(ByteArray.subByte(bytes, 0, 2)) & 0xFFFF) << 4 | (bytes[2]
- // & 0xFF) >> 4));
+ builder.setPlspId(new PlspId((ByteArray.bytesToLong(ByteArray.subByte(bytes, 0, 2)) & 0xFFFF) << 4 | (bytes[2] & 0xFF) >> 4));
builder.setDelegate(flags.get(DELEGATE_FLAG_OFFSET));
builder.setSync(flags.get(SYNC_FLAG_OFFSET));
- // builder.setOperational(Operational.flags.get(OPERATIONAL_FLAG_OFFSET));
builder.setRemove(flags.get(REMOVE_FLAG_OFFSET));
-
+ builder.setAdministrative(flags.get(ADMINISTRATIVE_FLAG_OFFSET));
+ short s = 0;
+ s |= flags.get(OPERATIONAL_OFFSET + 2) ? 1 : 0;
+ s |= (flags.get(OPERATIONAL_OFFSET + 1) ? 1 : 0) << 1;
+ s |= (flags.get(OPERATIONAL_OFFSET) ? 1 : 0) << 2;
+ builder.setOperational(OperationalStatus.forValue(s));
+ final TlvsBuilder b = new TlvsBuilder();
+ parseTlvs(b, ByteArray.cutBytes(bytes, TLVS_OFFSET));
+ builder.setTlvs(b.build());
return builder.build();
}
@Override
- public void addTlv(final LspBuilder builder, final Tlv tlv) {
- // FIXME : finish
+ public void addTlv(final TlvsBuilder builder, final Tlv tlv) {
+ if (tlv instanceof LspErrorCode) {
+ builder.setLspErrorCode((LspErrorCode) tlv);
+ } else if (tlv instanceof LspIdentifiers) {
+ builder.setLspIdentifiers((LspIdentifiers) tlv);
+ } else if (tlv instanceof RsvpErrorSpec) {
+ builder.setRsvpErrorSpec((RsvpErrorSpec) tlv);
+ } else if (tlv instanceof SymbolicPathName) {
+ builder.setSymbolicPathName((SymbolicPathName) tlv);
+ }
}
@Override
if (!(object instanceof LspObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed LspObject.");
}
-
final LspObject specObj = (LspObject) object;
- // final byte[] tlvs = PCEPTlvParser.put(specObj.getTlvs());
-
- final byte[] retBytes = new byte[0 + TLVS_OFFSET];
+ final byte[] tlvs = serializeTlvs(specObj.getTlvs());
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvs.length + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
final int lspID = specObj.getPlspId().getValue().intValue();
retBytes[0] = (byte) (lspID >> 12);
if (specObj.isDelegate()) {
retBytes[3] |= 1 << (Byte.SIZE - (DELEGATE_FLAG_OFFSET - Byte.SIZE) - 1);
}
- // FIXME: !!
- // if (specObj.isOperational())
- // retBytes[3] |= 1 << (Byte.SIZE - (OPERATIONAL_FLAG_OFFSET - Byte.SIZE) - 1);
if (specObj.isRemove()) {
retBytes[3] |= 1 << (Byte.SIZE - (REMOVE_FLAG_OFFSET - Byte.SIZE) - 1);
}
if (specObj.isSync()) {
retBytes[3] |= 1 << (Byte.SIZE - (SYNC_FLAG_OFFSET - Byte.SIZE) - 1);
}
-
- // ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
-
+ if (specObj.isAdministrative()) {
+ retBytes[3] |= 1 << (Byte.SIZE - (ADMINISTRATIVE_FLAG_OFFSET - Byte.SIZE) - 1);
+ }
+ final int op = specObj.getOperational().getIntValue();
+ retBytes[3] |= (op & 7) << 4;
+ ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
return retBytes;
}
+ public byte[] serializeTlvs(final Tlvs tlvs) {
+ if (tlvs == null) {
+ return new byte[0];
+ }
+ int finalLength = 0;
+ byte[] lspErrBytes = null;
+ byte[] lspIdBytes = null;
+ byte[] rsvpErrBytes = null;
+ byte[] symbBytes = null;
+ if (tlvs.getLspErrorCode() != null) {
+ lspErrBytes = serializeTlv(tlvs.getLspErrorCode());
+ finalLength += lspErrBytes.length;
+ }
+ if (tlvs.getLspIdentifiers() != null) {
+ lspIdBytes = serializeTlv(tlvs.getLspIdentifiers());
+ finalLength += lspIdBytes.length;
+ }
+ if (tlvs.getRsvpErrorSpec() != null) {
+ rsvpErrBytes = serializeTlv(tlvs.getRsvpErrorSpec());
+ finalLength += rsvpErrBytes.length;
+ }
+ if (tlvs.getSymbolicPathName() != null) {
+ symbBytes = serializeTlv(tlvs.getSymbolicPathName());
+ finalLength += symbBytes.length;
+ }
+ int offset = 0;
+ final byte[] result = new byte[finalLength];
+ if (lspErrBytes != null) {
+ ByteArray.copyWhole(lspErrBytes, result, offset);
+ offset += lspErrBytes.length;
+ }
+ if (lspIdBytes != null) {
+ ByteArray.copyWhole(lspIdBytes, result, offset);
+ offset += lspIdBytes.length;
+ }
+ if (rsvpErrBytes != null) {
+ ByteArray.copyWhole(rsvpErrBytes, result, offset);
+ offset += rsvpErrBytes.length;
+ }
+ if (symbBytes != null) {
+ ByteArray.copyWhole(symbBytes, result, offset);
+ offset += symbBytes.length;
+ }
+ return result;
+ }
+
@Override
public int getObjectType() {
return TYPE;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPath;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPathBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.Tlvs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.TlvsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVector;
+
+import com.google.common.primitives.UnsignedBytes;
/**
* Parser for {@link NoPathObject}
/*
* lengths of fields in bytes
*/
- public static final int NI_F_LENGTH = 1; // multi-field
- public static final int FLAGS_F_LENGTH = 2;
- public static final int RESERVED_F_LENGTH = 1;
+ private static final int NI_F_LENGTH = 1;
+ private static final int FLAGS_F_LENGTH = 2;
+ private static final int RESERVED_F_LENGTH = 1;
/*
* offsets of field in bytes
*/
-
- public static final int NI_F_OFFSET = 0;
- public static final int FLAGS_F_OFFSET = NI_F_OFFSET + NI_F_LENGTH;
- public static final int RESERVED_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH;
- public static final int TLVS_OFFSET = RESERVED_F_OFFSET + RESERVED_F_LENGTH;
+ private static final int NI_F_OFFSET = 0;
+ private static final int FLAGS_F_OFFSET = NI_F_OFFSET + NI_F_LENGTH;
+ private static final int RESERVED_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH;
+ private static final int TLVS_OFFSET = RESERVED_F_OFFSET + RESERVED_F_LENGTH;
/*
* defined flags
*/
-
- public static final int C_FLAG_OFFSET = 0;
+ private static final int C_FLAG_OFFSET = 0;
public PCEPNoPathObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
-
final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(bytes, FLAGS_F_OFFSET, FLAGS_F_LENGTH));
final NoPathBuilder builder = new NoPathBuilder();
-
- parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- builder.setNatureOfIssue((short) (bytes[NI_F_OFFSET] & 0xFF));
+ builder.setNatureOfIssue((short) UnsignedBytes.toInt(bytes[NI_F_OFFSET]));
builder.setUnsatisfiedConstraints(flags.get(C_FLAG_OFFSET));
-
+ parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
return builder.build();
}
@Override
public void addTlv(final NoPathBuilder builder, final Tlv tlv) {
- // FIXME : add no-path-vector-tlv
+ if (tlv instanceof NoPathVector) {
+ builder.setTlvs(new TlvsBuilder().setNoPathVector((NoPathVector) tlv).build());
+ }
}
@Override
if (!(object instanceof NoPathObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed NoPathObject.");
}
-
final NoPathObject nPObj = (NoPathObject) object;
final byte[] tlvs = serializeTlvs(((NoPath) nPObj).getTlvs());
- int tlvsLength = 0;
- if (tlvs != null) {
- tlvsLength = tlvs.length;
- }
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
-
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvs.length + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
if (tlvs != null) {
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
}
final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
flags.set(C_FLAG_OFFSET, nPObj.isUnsatisfiedConstraints());
- retBytes[NI_F_OFFSET] = ByteArray.shortToBytes(nPObj.getNatureOfIssue())[1];
+ retBytes[NI_F_OFFSET] = UnsignedBytes.checkedCast(nPObj.getNatureOfIssue());
ByteArray.copyWhole(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH), retBytes, FLAGS_F_OFFSET);
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
-
return retBytes;
}
public byte[] serializeTlvs(final Tlvs tlvs) {
- if (tlvs.getNoPathVector() != null) {
- // FIXME : add NoPath
- // return serializeTlv(new NoPathVectorBuilder().setFlags(tlvs.getNoPathVector()).build());
+ if (tlvs == null) {
+ return new byte[0];
+ } else if (tlvs.getNoPathVector() != null) {
+ return serializeTlv(tlvs.getNoPathVector());
}
- return null;
+ return new byte[0];
}
@Override
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OrderTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RpObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.Order;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.RpBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Tlvs;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.TlvsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.tlvs.OrderBuilder;
/**
* Parser for {@link RpObject}
*/
-
public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsParser<RpBuilder> {
public static final int CLASS = 2;
/*
* lengths of fields in bytes
*/
- public static final int FLAGS_PRI_MF_LENGTH = 4; // multi-field
- public static final int RID_F_LENGTH = 4;
+ private static final int FLAGS_PRI_MF_LENGTH = 4;
+ private static final int RID_F_LENGTH = 4;
/*
* lengths of subfields inside multi-field in bits
*/
- public static final int FLAGS_SF_LENGTH = 29;
- public static final int PRI_SF_LENGTH = 3;
+ private static final int FLAGS_SF_LENGTH = 29;
/*
* offsets of field in bytes
*/
- public static final int FLAGS_PRI_MF_OFFSET = 0;
- public static final int RID_F_OFFSET = FLAGS_PRI_MF_OFFSET + FLAGS_PRI_MF_LENGTH;
- public static final int TLVS_OFFSET = RID_F_OFFSET + RID_F_LENGTH;
+ private static final int FLAGS_PRI_MF_OFFSET = 0;
+ private static final int RID_F_OFFSET = FLAGS_PRI_MF_OFFSET + FLAGS_PRI_MF_LENGTH;
+ private static final int TLVS_OFFSET = RID_F_OFFSET + RID_F_LENGTH;
/*
* offsets of subfields inside multi-field in bits
*/
- public static final int FLAGS_SF_OFFSET = 0;
- public static final int PRI_SF_OFFSET = FLAGS_SF_OFFSET + FLAGS_SF_LENGTH;
+ private static final int FLAGS_SF_OFFSET = 0;
+ private static final int PRI_SF_OFFSET = FLAGS_SF_OFFSET + FLAGS_SF_LENGTH;
/*
* flags offsets inside flags sub-field in bits
* OF extension flags offsets inside flags sub.field in bits
*/
- private static int S_FLAG_OFFSET = 24; // Supply OF on response
-
+ private static final int S_FLAG_OFFSET = 24;
/*
* RFC6006 flags
*/
- private static int F_FLAG_OFFSET = 18;
+ private static final int F_FLAG_OFFSET = 18;
- private static int N_FLAG_OFFSET = 19;
+ private static final int N_FLAG_OFFSET = 19;
- private static int E_FLAG_OFFSET = 20;
+ private static final int E_FLAG_OFFSET = 20;
public PCEPRequestParameterObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
priority |= (flags.get(PRI_SF_OFFSET) ? 1 : 0) << 2;
final RpBuilder builder = new RpBuilder();
-
- parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- builder.setBiDirectional(flags.get(B_FLAG_OFFSET));
- builder.setEroCompression(flags.get(E_FLAG_OFFSET));
+ builder.setPriority(priority);
builder.setFragmentation(flags.get(F_FLAG_OFFSET));
- builder.setLoose(flags.get(O_FLAG_OFFSET));
+ builder.setP2mp(flags.get(N_FLAG_OFFSET));
+ builder.setEroCompression(flags.get(E_FLAG_OFFSET));
builder.setMakeBeforeBreak(flags.get(M_FLAG_OFFSET));
builder.setOrder(flags.get(D_FLAG_OFFSET));
- builder.setP2mp(flags.get(N_FLAG_OFFSET));
- builder.setReoptimization(flags.get(R_FLAG_OFFSET));
builder.setSupplyOf(flags.get(S_FLAG_OFFSET));
- builder.setPriority(priority);
- builder.setRequestId(new RequestId(ByteArray.bytesToLong(Arrays.copyOfRange(bytes, RID_F_OFFSET, RID_F_OFFSET + RID_F_LENGTH))));
+ builder.setLoose(flags.get(O_FLAG_OFFSET));
+ builder.setBiDirectional(flags.get(B_FLAG_OFFSET));
+ builder.setReoptimization(flags.get(R_FLAG_OFFSET));
+ builder.setRequestId(new RequestId(ByteArray.bytesToLong(Arrays.copyOfRange(bytes, RID_F_OFFSET, RID_F_OFFSET + RID_F_LENGTH))));
+ parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
return builder.build();
}
@Override
public void addTlv(final RpBuilder builder, final Tlv tlv) {
- final TlvsBuilder tbuilder = new TlvsBuilder();
- if (tlv instanceof OrderTlv) {
- final OrderBuilder b = new OrderBuilder();
- b.setDelete(((OrderTlv) tlv).getDelete());
- b.setSetup(((OrderTlv) tlv).getSetup());
- tbuilder.setOrder(b.build());
+ if (tlv instanceof Order) {
+ builder.setTlvs(new TlvsBuilder().setOrder((Order) tlv).build());
}
- builder.setTlvs(tbuilder.build());
}
@Override
if (!(object instanceof RpObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed RpObject.");
}
-
final RpObject rPObj = (RpObject) object;
-
- final BitSet flags_priority = new BitSet(FLAGS_PRI_MF_LENGTH * Byte.SIZE);
-
- flags_priority.set(R_FLAG_OFFSET, rPObj.isReoptimization());
- flags_priority.set(B_FLAG_OFFSET, rPObj.isBiDirectional());
- flags_priority.set(O_FLAG_OFFSET, rPObj.isLoose());
- flags_priority.set(M_FLAG_OFFSET, rPObj.isMakeBeforeBreak());
- flags_priority.set(D_FLAG_OFFSET, rPObj.isOrder());
- flags_priority.set(S_FLAG_OFFSET, rPObj.isSupplyOf());
- flags_priority.set(F_FLAG_OFFSET, rPObj.isFragmentation());
- flags_priority.set(N_FLAG_OFFSET, rPObj.isP2mp());
- flags_priority.set(E_FLAG_OFFSET, rPObj.isEroCompression());
-
- flags_priority.set(PRI_SF_OFFSET, (rPObj.getPriority() & 1 << 2) != 0);
- flags_priority.set(PRI_SF_OFFSET + 1, (rPObj.getPriority() & 1 << 1) != 0);
- flags_priority.set(PRI_SF_OFFSET + 2, (rPObj.getPriority() & 1) != 0);
+ final BitSet flags = new BitSet(FLAGS_PRI_MF_LENGTH * Byte.SIZE);
+
+ flags.set(R_FLAG_OFFSET, rPObj.isReoptimization());
+ flags.set(B_FLAG_OFFSET, rPObj.isBiDirectional());
+ flags.set(O_FLAG_OFFSET, rPObj.isLoose());
+ flags.set(M_FLAG_OFFSET, rPObj.isMakeBeforeBreak());
+ flags.set(D_FLAG_OFFSET, rPObj.isOrder());
+ flags.set(S_FLAG_OFFSET, rPObj.isSupplyOf());
+ flags.set(F_FLAG_OFFSET, rPObj.isFragmentation());
+ flags.set(N_FLAG_OFFSET, rPObj.isP2mp());
+ flags.set(E_FLAG_OFFSET, rPObj.isEroCompression());
+
+ flags.set(PRI_SF_OFFSET, (rPObj.getPriority() & 1 << 2) != 0);
+ flags.set(PRI_SF_OFFSET + 1, (rPObj.getPriority() & 1 << 1) != 0);
+ flags.set(PRI_SF_OFFSET + 2, (rPObj.getPriority() & 1) != 0);
final byte[] tlvs = serializeTlvs(rPObj.getTlvs());
- int tlvsLength = 0;
- if (tlvs != null) {
- tlvsLength = tlvs.length;
- }
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
-
- if (tlvs != null) {
- ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
- }
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvs.length + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
- ByteArray.copyWhole(ByteArray.bitSetToBytes(flags_priority, FLAGS_PRI_MF_LENGTH), retBytes, FLAGS_PRI_MF_OFFSET);
+ ByteArray.copyWhole(ByteArray.bitSetToBytes(flags, FLAGS_PRI_MF_LENGTH), retBytes, FLAGS_PRI_MF_OFFSET);
ByteArray.copyWhole(ByteArray.subByte(ByteArray.longToBytes(rPObj.getRequestId().getValue()), (Long.SIZE / Byte.SIZE)
- RID_F_LENGTH, RID_F_LENGTH), retBytes, RID_F_OFFSET);
-
+ if (tlvs.length != 0) {
+ ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
+ }
return retBytes;
}
public byte[] serializeTlvs(final Tlvs tlvs) {
- if (tlvs.getOrder() != null) {
- return serializeTlv(new OrderBuilder().setDelete(tlvs.getOrder().getDelete()).setSetup(tlvs.getOrder().getSetup()).build());
+ if (tlvs == null) {
+ return new byte[0];
+ } else if (tlvs.getOrder() != null) {
+ return serializeTlv(tlvs.getOrder());
}
- return null;
+ return new byte[0];
}
@Override
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspIdentifiersTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv4;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv6;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.LspIdentifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv6Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Ipv4ExtendedTunnelId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Ipv6ExtendedTunnelId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LspId;
private static final int V6_LENGTH = 36;
@Override
- public LspIdentifiersTlv parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
+ public LspIdentifiers parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
int position = 0;
if (valueBytes == null || valueBytes.length == 0) {
throw new IllegalArgumentException("Value bytes array is mandatory. Can't be null or empty.");
if (tlv == null) {
throw new IllegalArgumentException("LspIdentifiersTlv is mandatory.");
}
- final LspIdentifiersTlv lsp = (LspIdentifiersTlv) tlv;
+ final LspIdentifiers lsp = (LspIdentifiers) tlv;
final AddressFamily afi = lsp.getAddressFamily();
int offset = 0;
if (afi.getImplementedInterface().equals(Ipv4.class)) {
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.TlvParser;
import org.opendaylight.protocol.pcep.spi.TlvSerializer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathNameTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.SymbolicPathNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
/**
- * Parser for {@link SymbolicPathNameTlv}
+ * Parser for {@link SymbolicPathName}
*/
public class LspSymbolicNameTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 17;
@Override
- public SymbolicPathNameTlv parseTlv(final byte[] buffer) throws PCEPDeserializerException {
- return new SymbolicPathNameBuilder().setPathName(new SymbolicPathName(buffer)).build();
+ public SymbolicPathName parseTlv(final byte[] buffer) throws PCEPDeserializerException {
+ return new SymbolicPathNameBuilder().setPathName(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName(buffer)).build();
}
@Override
if (tlv == null) {
throw new IllegalArgumentException("SymbolicPathNameTlv is mandatory.");
}
- final SymbolicPathNameTlv spn = (SymbolicPathNameTlv) tlv;
+ final SymbolicPathName spn = (SymbolicPathName) tlv;
return spn.getPathName().getValue();
}
import org.opendaylight.protocol.pcep.spi.TlvParser;
import org.opendaylight.protocol.pcep.spi.TlvSerializer;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspErrorCodeTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.LspErrorCodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
/**
- * Parser for {@link LspErrorCodeTlv}
+ * Parser for {@link LspErrorCode}
*/
public class LspUpdateErrorTlvParser implements TlvParser, TlvSerializer {
private static final int UPDATE_ERR_CODE_LENGTH = 4;
@Override
- public LspErrorCodeTlv parseTlv(final byte[] buffer) throws PCEPDeserializerException {
+ public LspErrorCode parseTlv(final byte[] buffer) throws PCEPDeserializerException {
return new LspErrorCodeBuilder().setErrorCode(ByteArray.bytesToLong(buffer)).build();
}
if (tlv == null) {
throw new IllegalArgumentException("LspErrorCodeTlv is mandatory.");
}
- final LspErrorCodeTlv lsp = (LspErrorCodeTlv) tlv;
+ final LspErrorCode lsp = (LspErrorCode) tlv;
return ByteArray.subByte(ByteArray.longToBytes(lsp.getErrorCode()), UPDATE_ERR_CODE_LENGTH, UPDATE_ERR_CODE_LENGTH);
}
import org.opendaylight.protocol.pcep.spi.TlvParser;
import org.opendaylight.protocol.pcep.spi.TlvSerializer;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVectorBuilder;
/**
- * Parser for {@link NoPathVectorTlv}
+ * Parser for {@link NoPathVector}
*/
public class NoPathVectorTlvParser implements TlvParser, TlvSerializer {
private static final int PCE_UNAVAILABLE = 31;
@Override
- public NoPathVectorTlv parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
+ public NoPathVector parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
if (valueBytes == null || valueBytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
if (tlvs == null) {
throw new IllegalArgumentException("NoPathVectorTlv is mandatory.");
}
- final NoPathVectorTlv tlv = (NoPathVectorTlv) tlvs;
+ final NoPathVector tlv = (NoPathVector) tlvs;
final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
flags.set(REACHABLITY_PROBLEM, tlv.getFlags().isP2mpUnreachable());
import org.opendaylight.protocol.pcep.spi.TlvParser;
import org.opendaylight.protocol.pcep.spi.TlvSerializer;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OrderTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.tlvs.OrderBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.Order;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
/**
- * Parser for {@link OrderTlv}
+ * Parser for {@link Order}
*/
public class OrderTlvParser implements TlvParser, TlvSerializer {
private static final int ORDR_SETUP_LENGTH = 4;
@Override
- public OrderTlv parseTlv(final byte[] buffer) throws PCEPDeserializerException {
+ public Order parseTlv(final byte[] buffer) throws PCEPDeserializerException {
return new OrderBuilder().setDelete(Long.valueOf(ByteArray.bytesToLong(ByteArray.subByte(buffer, 0, ORDR_DEL_LENGTH)))).setSetup(
ByteArray.bytesToLong(ByteArray.subByte(buffer, ORDR_DEL_LENGTH, ORDR_SETUP_LENGTH))).build();
}
if (tlv == null) {
throw new IllegalArgumentException("OrderTlv is mandatory.");
}
- final OrderTlv otlv = (OrderTlv) tlv;
+ final Order otlv = (Order) tlv;
final byte[] bytes = new byte[ORDR_DEL_LENGTH + ORDR_SETUP_LENGTH];
int offset = 0;
ByteArray.copyWhole(ByteArray.subByte(ByteArray.longToBytes(otlv.getDelete()), 4, ORDR_DEL_LENGTH), bytes, offset);
import org.opendaylight.protocol.util.Util;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RsvpErrorSpecTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.RsvpErrorSpecBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.ErrorType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.Rsvp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.RsvpBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.User;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.UserBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.rsvp.RsvpError;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.rsvp.RsvpErrorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.user.UserError;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.user.UserErrorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.ErrorType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.Rsvp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.RsvpBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.User;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.UserBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.rsvp.RsvpError;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.rsvp.RsvpErrorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.user.UserError;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.user.UserErrorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.ErrorSpec.Flags;
import com.google.common.primitives.UnsignedBytes;
/**
- * Parser for {@link RsvpErrorSpecTlv}
+ * Parser for {@link RsvpErrorSpec}
*/
public final class RSVPErrorSpecTlvParser implements TlvParser, TlvSerializer {
private static final int V6_RSVP_LENGTH = 22;
@Override
- public RsvpErrorSpecTlv parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
+ public RsvpErrorSpec parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
if (valueBytes == null || valueBytes.length == 0) {
throw new IllegalArgumentException("Value bytes array is mandatory. Can't be null or empty.");
}
if (tlv == null) {
throw new IllegalArgumentException("RSVPErrorSpecTlv is mandatory.");
}
- final RsvpErrorSpecTlv rsvp = (RsvpErrorSpecTlv) tlv;
+ final RsvpErrorSpec rsvp = (RsvpErrorSpec) tlv;
if (rsvp.getErrorType().getImplementedInterface().equals(Rsvp.class)) {
final Rsvp r = (Rsvp) rsvp.getErrorType();
import org.opendaylight.protocol.pcep.impl.object.PCEPErrorObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPGlobalConstraintsObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPLoadBalancingObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPLspObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPLspaObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPMetricObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPNoPathObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPNotificationObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPObjectiveFunctionObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPRequestParameterObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPSrpObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPSvecObjectParser;
import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NotificationObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SrpIdNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.message.c.close.message.CCloseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.ClassTypeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.LspaBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.OfBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.TlvsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.EndpointsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.LspBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.SrpBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.RpBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.LoadBalancingBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.reported.route.BandwidthBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.GcBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.MetricBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
import com.google.common.collect.Lists;
// public void testObjectDeserialization() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
// PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
// }
- //
- // @Test
- // public void testUnknownClass() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
- //
- // final PCEPObject obj =
- // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPObject1UnknownClass.bin")).get(
- // 0);
- //
- // // assertTrue(obj instanceof UnknownObject);
- // // assertEquals(((UnknownObject) obj).getError(), PCEPErrors.UNRECOGNIZED_OBJ_CLASS);
- // }
- //
- // // @Test
- // // public void testUnknownType() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
- // // final PCEPObject obj =
- // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPObject2UnknownType.bin")).get(0);
- // //
- // // assertTrue(obj instanceof UnknownObject);
- // // assertEquals(((UnknownObject) obj).getError(), PCEPErrors.UNRECOGNIZED_OBJ_TYPE);
- // // }
- // //
@Test
public void testCloseObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
assertArrayEquals(result, parser.serializeObject(builder.build()));
}
- //
- // @Test
- // public void testLspObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTest("src/test/resources/PCEPLspObject1NoTlvsUpperBounds.bin", new PCEPLspObject(0xFFFFF, true, false,
- // true, false, null));
- // }
+ @Test
+ public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPLspObjectParser parser = new PCEPLspObjectParser(this.tlvRegistry);
+ final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin");
+
+ final LspBuilder builder = new LspBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(true);
+ builder.setAdministrative(true);
+ builder.setDelegate(false);
+ builder.setRemove(true);
+ builder.setSync(false);
+ builder.setOperational(OperationalStatus.GoingDown);
+ builder.setPlspId(new PlspId(0x12345L));
+
+ final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
+ final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName("Med".getBytes())).build();
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.TlvsBuilder().setLspErrorCode(
+ tlv1).setSymbolicPathName(tlv2).build());
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
//
// @Test
// public void testERObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
assertArrayEquals(result, parser.serializeObject(builder.build()));
}
- // @Test
- // public void testNoPathObject() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
- // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>(1);
- // tlvs.add(new NoPathVectorTlv(false, false, true, false, false, false));
- // serDeserTest("src/test/resources/NoPathObject1WithTLV.bin", new PCEPNoPathObject((short) 2, true, tlvs, false));
- // serDeserTest("src/test/resources/NoPathObject2WithoutTLV.bin", new PCEPNoPathObject((short) 0x10, false, true));
- //
- // byte[] bytesFromFile = ByteArray.fileToBytes("src/test/resources/NoPathObject2WithoutTLV.bin");
- // PCEPNoPathObject noPathObject = (PCEPNoPathObject) PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
- // byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) noPathObject));
- // assertArrayEquals(bytesFromFile, bytesActual);
- //
- // bytesFromFile = ByteArray.fileToBytes("src/test/resources/NoPathObject1WithTLV.bin");
- // noPathObject = (PCEPNoPathObject) PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
- // bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) noPathObject));
- // assertArrayEquals(bytesFromFile, bytesActual);
- // }
+ @Test
+ public void testNoPathObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
+ final PCEPNoPathObjectParser parser = new PCEPNoPathObjectParser(this.tlvRegistry);
+ byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject1WithoutTLV.bin");
+
+ final NoPathBuilder builder = new NoPathBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(true);
+ builder.setNatureOfIssue((short) 1);
+ builder.setUnsatisfiedConstraints(true);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+ result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject2WithTLV.bin");
+
+ builder.setNatureOfIssue((short) 0);
+ builder.setUnsatisfiedConstraints(false);
+
+ final NoPathVectorBuilder b = new NoPathVectorBuilder();
+ b.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags(false, true, false, true, false, true, true, true));
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.TlvsBuilder().setNoPathVector(
+ b.build()).build());
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
@Test
public void testNotifyObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.notification.object.TlvsBuilder().setOverloadDuration(
new OverloadDurationBuilder().setDuration(0xff0000a2L).build()).build());
- final NotificationObject t = parser.parseObject(new ObjectHeaderImpl(true, true), result);
assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
assertArrayEquals(result, parser.serializeObject(builder.build()));
}
// null));
// }
//
- // /**
- // * Standard deserialization test<br/>
- // * Used resources:<br/>
- // * - PCEPRPObject1.bin
- // *
- // * @throws PCEPDeserializerException
- // * @throws IOException
- // * @throws PCEPDocumentedException
- // */
- // @Test
- // public void testRPObjectSerDeser() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
- // serDeserTest("src/test/resources/PCEPRPObject1.bin",
- // new PCEPRequestParameterObject(true, false, true, true, false, false, false, false, (short) 5, 0xdeadbeefL,
- // false, false));
- // // serDeserTest(
- // // "src/test/resources/PCEPRPObject2.bin",
- // // new PCEPRequestParameterObject(true, false, false, false, true, false, true, false, true, (short) 5,
- // 0xdeadbeefL, new ArrayList<PCEPTlv>() {
- // // private static final long serialVersionUID = 1L;
- // //
- // // {
- // // this.add(new OrderTlv(0xFFFFFFFFL, 0x00000001L));
- // // }
- // // }, false, false));
- // }
- //
+
+ @Test
+ public void testRPObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
+ final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry);
+ byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject1.bin");
+
+ final RpBuilder builder = new RpBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(true);
+ builder.setReoptimization(true);
+ builder.setBiDirectional(false);
+ builder.setLoose(true);
+ builder.setMakeBeforeBreak(true);
+ builder.setOrder(false);
+ builder.setSupplyOf(false);
+ builder.setFragmentation(false);
+ builder.setP2mp(false);
+ builder.setEroCompression(false);
+ builder.setPriority((short) 5);
+ builder.setRequestId(new RequestId(0xdeadbeefL));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+ result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject2.bin");
+
+ builder.setReoptimization(false);
+ builder.setFragmentation(true);
+ builder.setEroCompression(true);
+
+ final OrderBuilder b = new OrderBuilder();
+ b.setDelete(0xffffffffL);
+ b.setSetup(1L);
+
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.TlvsBuilder().setOrder(
+ b.build()).build());
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
@Test
public void testSvecObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
// }
//
// @Test
- // public void testOFCodesMapping() {
- // final PCEPOFCodesMapping mapper = PCEPOFCodesMapping.getInstance();
- //
- // for (final PCEPOFCodes ofCode : PCEPOFCodes.values()) {
- // final int ofCodeId = mapper.getFromOFCodesEnum(ofCode);
- // assertEquals(ofCode, mapper.getFromCodeIdentifier(ofCodeId));
- // }
- // }
- //
- // @SuppressWarnings("unchecked")
- // private static <T extends PCEPObject> void serDeserTestWithoutBin(final T object) throws
- // PCEPDeserializerException,
- // PCEPDocumentedException {
- // final byte[] serBytes = PCEPObjectFactory.put(Arrays.asList((PCEPObject) object));
- // final T deserObj = (T) PCEPObjectFactory.parseObjects(serBytes).get(0);
- //
- // assertEquals(object, deserObj);
- // }
- //
- // @Test
// public void testSERObjects() throws PCEPDocumentedException, PCEPDeserializerException {
// final List<ExplicitRouteSubobject> eroSubobjects = new ArrayList<ExplicitRouteSubobject>();
// eroSubobjects.add(new EROIPPrefixSubobject<IPv4Prefix>(new IPv4Prefix(new IPv4Address(new byte[] { (byte) 192,
//
// serDeserTestWithoutBin(new PCEPSecondaryRecordRouteObject(rroSubobjects, true, false));
// }
- //
- // @Test
- // public void testP2MPEndpointsObjects() throws PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv4Address>(2, this.ipv4addr, Arrays.asList(this.ipv4addr,
- // this.ipv4addr,
- // this.ipv4addr), true, false));
- // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv4Address>(1, this.ipv4addr, Arrays.asList(this.ipv4addr),
- // true, false));
- // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv6Address>(2, this.ipv6addr, Arrays.asList(this.ipv6addr,
- // this.ipv6addr,
- // this.ipv6addr), true, false));
- // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv6Address>(1, this.ipv6addr, Arrays.asList(this.ipv6addr),
- // true, false));
- // }
- //
- // @Test
- // public void testUnreachedDestinationObjects() throws PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv4Address>(Arrays.asList(this.ipv4addr,
- // this.ipv4addr, this.ipv4addr), true, false));
- // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv4Address>(Arrays.asList(this.ipv4addr), true,
- // false));
- // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv6Address>(Arrays.asList(this.ipv6addr,
- // this.ipv6addr, this.ipv6addr), true, false));
- // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv6Address>(Arrays.asList(this.ipv6addr), true,
- // false));
- // }
}
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspDbVersionTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspErrorCodeTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspIdentifiersTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfListTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OrderTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PredundancyGroupIdTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RsvpErrorSpecTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.StatefulCapabilityTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.StatefulCapabilityTlv.Flags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathNameTlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.address.family.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.LspErrorCodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.LspIdentifiersBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.RsvpErrorSpecBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.SymbolicPathNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.LspIdentifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv6Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.tlvs.LspDbVersionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.tlvs.OfListBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.tlvs.PredundancyGroupIdBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.tlvs.StatefulBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.Order;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDuration;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissing;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissingBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.tlvs.OrderBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.RsvpBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.UserBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.rsvp.RsvpErrorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.error.type.user.UserErrorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.RsvpErrorSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.RsvpBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.UserBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.rsvp.RsvpErrorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rsvp.error.spec.tlv.rsvp.error.spec.error.type.user.UserErrorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Ipv4ExtendedTunnelId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Ipv6ExtendedTunnelId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LspId;
@Test
public void testSymbolicNameTlv() throws PCEPDeserializerException {
final LspSymbolicNameTlvParser parser = new LspSymbolicNameTlvParser();
- final SymbolicPathNameTlv tlv = new SymbolicPathNameBuilder().setPathName(
- new SymbolicPathName("Med test of symbolic name".getBytes())).build();
+ final SymbolicPathName tlv = new SymbolicPathNameBuilder().setPathName(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName("Med test of symbolic name".getBytes())).build();
assertEquals(tlv, parser.parseTlv(symbolicNameBytes));
assertArrayEquals(symbolicNameBytes, parser.serializeTlv(tlv));
}
@Test
public void testLspErrorCodeTlv() throws PCEPDeserializerException {
final LspUpdateErrorTlvParser parser = new LspUpdateErrorTlvParser();
- final LspErrorCodeTlv tlv = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
+ final LspErrorCode tlv = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
assertEquals(tlv, parser.parseTlv(lspUpdateErrorBytes));
assertArrayEquals(lspUpdateErrorBytes, parser.serializeTlv(tlv));
}
afi.setIpv4TunnelSenderAddress(Ipv4Util.addressForBytes(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 }));
afi.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(Ipv4Util.addressForBytes(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56,
(byte) 0x78 })));
- final LspIdentifiersTlv tlv = new LspIdentifiersBuilder().setAddressFamily(afi.build()).setLspId(new LspId(65535L)).setTunnelId(
+ final LspIdentifiers tlv = new LspIdentifiersBuilder().setAddressFamily(afi.build()).setLspId(new LspId(65535L)).setTunnelId(
new TunnelId(4660)).build();
assertEquals(tlv, parser.parseTlv(lspIdentifiers4Bytes));
assertArrayEquals(lspIdentifiers4Bytes, parser.serializeTlv(tlv));
afi.setIpv6ExtendedTunnelId(new Ipv6ExtendedTunnelId(Ipv6Util.addressForBytes(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56,
(byte) 0x78, (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78, (byte) 0x01, (byte) 0x23, (byte) 0x45, (byte) 0x67,
(byte) 0x01, (byte) 0x23, (byte) 0x45, (byte) 0x67 })));
- final LspIdentifiersTlv tlv = new LspIdentifiersBuilder().setAddressFamily(afi.build()).setLspId(new LspId(4660L)).setTunnelId(
+ final LspIdentifiers tlv = new LspIdentifiersBuilder().setAddressFamily(afi.build()).setLspId(new LspId(4660L)).setTunnelId(
new TunnelId(65535)).build();
assertEquals(tlv, parser.parseTlv(lspIdentifiers6Bytes));
assertArrayEquals(lspIdentifiers6Bytes, parser.serializeTlv(tlv));
builder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.ErrorSpec.Flags(false, true));
builder.setCode((short) 146);
builder.setValue(5634);
- final RsvpErrorSpecTlv tlv = new RsvpErrorSpecBuilder().setErrorType(new RsvpBuilder().setRsvpError(builder.build()).build()).build();
+ final RsvpErrorSpec tlv = new RsvpErrorSpecBuilder().setErrorType(new RsvpBuilder().setRsvpError(builder.build()).build()).build();
assertEquals(tlv, parser.parseTlv(rsvpErrorBytes));
assertArrayEquals(rsvpErrorBytes, parser.serializeTlv(tlv));
}
builder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.ErrorSpec.Flags(false, true));
builder.setCode((short) 213);
builder.setValue(50649);
- final RsvpErrorSpecTlv tlv = new RsvpErrorSpecBuilder().setErrorType(new RsvpBuilder().setRsvpError(builder.build()).build()).build();
+ final RsvpErrorSpec tlv = new RsvpErrorSpecBuilder().setErrorType(new RsvpBuilder().setRsvpError(builder.build()).build()).build();
assertEquals(tlv, parser.parseTlv(rsvpError6Bytes));
assertArrayEquals(rsvpError6Bytes, parser.serializeTlv(tlv));
}
builder.setSubOrg((short) 5);
builder.setValue(38);
builder.setDescription("user desc");
- final RsvpErrorSpecTlv tlv = new RsvpErrorSpecBuilder().setErrorType(new UserBuilder().setUserError(builder.build()).build()).build();
+ final RsvpErrorSpec tlv = new RsvpErrorSpecBuilder().setErrorType(new UserBuilder().setUserError(builder.build()).build()).build();
assertEquals(tlv, parser.parseTlv(userErrorBytes));
assertArrayEquals(userErrorBytes, parser.serializeTlv(tlv));
}
@Test
public void testOrderTlv() throws PCEPDeserializerException {
final OrderTlvParser parser = new OrderTlvParser();
- final OrderTlv tlv = new OrderBuilder().setDelete(0xFFFFFFFFL).setSetup(0x00000001L).build();
+ final Order tlv = new OrderBuilder().setDelete(0xFFFFFFFFL).setSetup(0x00000001L).build();
assertEquals(tlv, parser.parseTlv(orderBytes));
assertArrayEquals(orderBytes, parser.serializeTlv(tlv));
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PcrptMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.tlvs.SymbolicPathName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Tlvs;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.tlvs.Stateful;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.pcrpt.message.Reports;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.pcrpt.message.reports.Lsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.PccBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.pcc.Lsps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.pcc.LspsKey;
}
private final class SessionListener implements PCEPSessionListener {
- private org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node inventoryNode(final DataModificationTransaction trans, final InetAddress address) {
+ private org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node inventoryNode(
+ final DataModificationTransaction trans, final InetAddress address) {
final String pccId = createNodeId(address);
// FIXME: after 0.6 yangtools, this cast should not be needed
- final Nodes nodes = (Nodes)trans.readOperationalData(inventory);
+ final Nodes nodes = (Nodes) trans.readOperationalData(ServerSessionManager.this.inventory);
for (final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node n : nodes.getNode()) {
LOG.debug("Matching inventory node {} to peer {}", n, address);
*/
LOG.debug("Failed to find inventory node for peer {}, creating a new one at {}", address, pccId);
- final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId id =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId(pccId);
- final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey nk =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey(id);
- final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nii =
- InstanceIdentifier.builder(inventory).node(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class, nk).toInstance();
- final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node ret =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder().setId(id).setKey(nk).build();
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId id = new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId(pccId);
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey nk = new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey(id);
+ final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nii = InstanceIdentifier.builder(
+ ServerSessionManager.this.inventory).node(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class, nk).toInstance();
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node ret = new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder().setId(
+ id).setKey(nk).build();
trans.putRuntimeData(nii, ret);
- ownsInventory = true;
- inventoryNodeId = nii;
+ ServerSessionManager.this.ownsInventory = true;
+ ServerSessionManager.this.inventoryNodeId = nii;
return ret;
}
final DataModificationTransaction trans,
final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node invNode) {
// FIXME: after 0.6 yangtools, this cast should not be needed
- final Topology topo = (Topology)trans.readOperationalData(topology);
+ final Topology topo = (Topology) trans.readOperationalData(ServerSessionManager.this.topology);
for (final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node n : topo.getNode()) {
LOG.debug("Matching topology node {} to inventory node {}", n, invNode);
* We failed to find a matching node. Let's create a dynamic one
* and note that we are the owner (so we clean it up afterwards).
*/
- final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId id =
- new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId(invNode.getId().getValue());
- final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey nk =
- new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey(id);
- final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nti =
- InstanceIdentifier.builder(topology).node(
- org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class, nk).toInstance();
-
- final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node ret =
- new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder().
- setKey(nk).setNodeId(id).build();
+ final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId id = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId(invNode.getId().getValue());
+ final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey nk = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey(id);
+ final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> nti = InstanceIdentifier.builder(
+ ServerSessionManager.this.topology).node(
+ org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class,
+ nk).toInstance();
+
+ final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node ret = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder().setKey(
+ nk).setNodeId(id).build();
trans.putRuntimeData(nti, ret);
- ownsTopology = true;
- topologyNodeId = nti;
+ ServerSessionManager.this.ownsTopology = true;
+ ServerSessionManager.this.topologyNodeId = nti;
return ret;
}
* the topology model, with empty LSP list.
*/
final InetAddress peerAddress = session.getRemoteAddress();
- final DataModificationTransaction trans = dataProvider.beginTransaction();
+ final DataModificationTransaction trans = ServerSessionManager.this.dataProvider.beginTransaction();
final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node invNode = inventoryNode(trans, peerAddress);
LOG.debug("Peer {} resolved to inventory node {}", peerAddress, invNode);
- final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node topoNode = topologyNode(trans, invNode);
+ final org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node topoNode = topologyNode(
+ trans, invNode);
LOG.debug("Peer {} resolved to topology node {}", peerAddress, topoNode);
// Our augmentation in the topology node
final PccBuilder pb = new PccBuilder();
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1 topoAugment =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1Builder().setPcc(pb.build()).build();
- topologyAugmentId = InstanceIdentifier.builder(topologyNodeId).node(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1.class).toInstance();
- trans.putRuntimeData(topologyAugmentId, topoAugment);
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1 topoAugment = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1Builder().setPcc(
+ pb.build()).build();
+ ServerSessionManager.this.topologyAugmentId = InstanceIdentifier.builder(ServerSessionManager.this.topologyNodeId).node(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1.class).toInstance();
+ trans.putRuntimeData(ServerSessionManager.this.topologyAugmentId, topoAugment);
// Our augmentation in the inventory node
- pccBuilder = new PathComputationClientBuilder();
+ ServerSessionManager.this.pccBuilder = new PathComputationClientBuilder();
final Tlvs tlvs = session.getRemoteTlvs();
final Stateful stateful = tlvs.getStateful();
if (stateful != null) {
// FIXME: rework once groupings can be used in builders
- pccBuilder.setStatefulTlv(new StatefulTlvBuilder().setFlags(tlvs.getStateful().getFlags()).build());
- pccBuilder.setStateSync(PccSyncState.InitialResync);
+ ServerSessionManager.this.pccBuilder.setStatefulTlv(new StatefulTlvBuilder().setFlags(tlvs.getStateful().getFlags()).build());
+ ServerSessionManager.this.pccBuilder.setStateSync(PccSyncState.InitialResync);
}
- pccBuilder.setTopologyNode(topoNode.getNodeId());
+ ServerSessionManager.this.pccBuilder.setTopologyNode(topoNode.getNodeId());
- inventoryAugmentBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.pcep.rev131024.Node1Builder()
- .setPathComputationClient(pccBuilder.build());
- inventoryAugmentId = InstanceIdentifier.builder(inventoryNodeId).node(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.pcep.rev131024.Node1.class).toInstance();
- trans.putRuntimeData(inventoryAugmentId, inventoryAugmentBuilder.build());
+ ServerSessionManager.this.inventoryAugmentBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.pcep.rev131024.Node1Builder().setPathComputationClient(ServerSessionManager.this.pccBuilder.build());
+ ServerSessionManager.this.inventoryAugmentId = InstanceIdentifier.builder(ServerSessionManager.this.inventoryNodeId).node(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.pcep.rev131024.Node1.class).toInstance();
+ trans.putRuntimeData(ServerSessionManager.this.inventoryAugmentId, ServerSessionManager.this.inventoryAugmentBuilder.build());
// All set, commit the modifications
final Future<RpcResult<TransactionStatus>> s = trans.commit();
session.close(TerminationReason.Unknown);
}
- LOG.info("Session with {} attached to inventory node {} and topology node {}", session.getRemoteAddress(), invNode.getId(), topoNode.getNodeId());
+ LOG.info("Session with {} attached to inventory node {} and topology node {}", session.getRemoteAddress(), invNode.getId(),
+ topoNode.getNodeId());
}
private void tearDown(final PCEPSession session) {
- final DataModificationTransaction trans = dataProvider.beginTransaction();
+ final DataModificationTransaction trans = ServerSessionManager.this.dataProvider.beginTransaction();
/*
* The session went down. Undo all the Inventory and Topology
* changes we have done.
*/
- trans.removeRuntimeData(inventoryAugmentId);
- if (ownsInventory) {
- trans.removeRuntimeData(inventoryNodeId);
+ trans.removeRuntimeData(ServerSessionManager.this.inventoryAugmentId);
+ if (ServerSessionManager.this.ownsInventory) {
+ trans.removeRuntimeData(ServerSessionManager.this.inventoryNodeId);
}
- trans.removeRuntimeData(topologyAugmentId);
- if (ownsTopology) {
- trans.removeRuntimeData(topologyNodeId);
+ trans.removeRuntimeData(ServerSessionManager.this.topologyAugmentId);
+ if (ServerSessionManager.this.ownsTopology) {
+ trans.removeRuntimeData(ServerSessionManager.this.topologyNodeId);
}
/*
}
private InstanceIdentifier<Lsps> lspIdentifier(final SymbolicPathName name) {
- return InstanceIdentifier.builder(topologyAugmentId).
- node(Lsps.class, new LspsKey(name.getPathName())).toInstance();
+ return InstanceIdentifier.builder(ServerSessionManager.this.topologyAugmentId).node(Lsps.class, new LspsKey(name.getPathName())).toInstance();
}
@Override
session.sendMessage(unhandledMessageError);
}
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.PcrptMessage rpt =
- ((PcrptMessage)message).getPcrptMessage();
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.PcrptMessage rpt = ((PcrptMessage) message).getPcrptMessage();
- final DataModificationTransaction trans = dataProvider.beginTransaction();
+ final DataModificationTransaction trans = ServerSessionManager.this.dataProvider.beginTransaction();
for (final Reports r : rpt.getReports()) {
final Lsp lsp = r.getLsp();
- if (lsp.isSync() && !synced) {
+ if (lsp.isSync() && !ServerSessionManager.this.synced) {
// Update synchronization flag
- synced = true;
- inventoryAugmentBuilder.setPathComputationClient(pccBuilder.setStateSync(PccSyncState.Synchronized).build());
- trans.putRuntimeData(inventoryAugmentId, inventoryAugmentBuilder.build());
+ ServerSessionManager.this.synced = true;
+ ServerSessionManager.this.inventoryAugmentBuilder.setPathComputationClient(ServerSessionManager.this.pccBuilder.setStateSync(
+ PccSyncState.Synchronized).build());
+ trans.putRuntimeData(ServerSessionManager.this.inventoryAugmentId,
+ ServerSessionManager.this.inventoryAugmentBuilder.build());
LOG.debug("Session {} achieved synchronized state", session);
}
final PlspId id = lsp.getPlspId();
if (lsp.isRemove()) {
- final SymbolicPathName name = lsps.remove(id);
+ final SymbolicPathName name = ServerSessionManager.this.lsps.remove(id);
if (name != null) {
trans.removeRuntimeData(lspIdentifier(name));
}
LOG.debug("LSP {} removed", lsp);
} else {
- if (!lsps.containsKey(id)) {
+ if (!ServerSessionManager.this.lsps.containsKey(id)) {
LOG.debug("PLSPID {} not known yet, looking for a symbolic name", id);
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.Tlvs tlvs =
- r.getLsp().getTlvs();
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.Tlvs tlvs = r.getLsp().getTlvs();
final SymbolicPathName name = tlvs.getSymbolicPathName();
if (name == null) {
LOG.error("PLSPID {} seen for the first time, not reporting the LSP");
}
}
- final SymbolicPathName name = lsps.get(id);
+ final SymbolicPathName name = ServerSessionManager.this.lsps.get(id);
trans.putRuntimeData(lspIdentifier(name), lsp);
LOG.debug("LSP {} updated");
private InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node> topologyNodeId;
private InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1> topologyAugmentId;
- public ServerSessionManager(final DataProviderService dataProvider,
- final InstanceIdentifier<Nodes> inventory, final InstanceIdentifier<Topology> topology) {
+ public ServerSessionManager(final DataProviderService dataProvider, final InstanceIdentifier<Nodes> inventory,
+ final InstanceIdentifier<Topology> topology) {
this.dataProvider = Preconditions.checkNotNull(dataProvider);
this.inventory = Preconditions.checkNotNull(inventory);
this.topology = Preconditions.checkNotNull(topology);