description "NOTIFICATION Object";
reference "https://tools.ietf.org/html/rfc5440#section-7.14";
- // No possibility of TLVs
uses object;
container "tlvs" {
container overload-duration {
description "PCEP-ERROR Object";
reference "https://tools.ietf.org/html/rfc5440#section-7.15";
- // No possibility of TLVs
uses object;
container "tlvs" {
container req-missing {
}
grouping lsp-object {
- description "SRP Object";
+ description "LSP Object";
reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3";
uses object;
final List<IpAddress> addresses = Lists.newArrayList();
while (bytes.length > offset) {
- if (family instanceof Ipv4)
+ if (family instanceof Ipv4) {
addresses.add(new IpAddress(Ipv4Util.addressForBytes(ByteArray.subByte(bytes, offset, addrLen))));
- else
+ } else {
addresses.add(new IpAddress(Ipv6Util.addressForBytes(ByteArray.subByte(bytes, offset, addrLen))));
+ }
offset += addrLen;
}
public static void putAddresses(final byte[] destBytes, int offset, final List<IpAddress> addresses, final int addrLen) {
for (final IpAddress address : addresses) {
- if (address.getIpv4Address() != null)
+ if (address.getIpv4Address() != null) {
System.arraycopy(address.getIpv4Address().getValue().getBytes(), 0, destBytes, offset, addrLen);
- else
+ } else {
System.arraycopy(address.getIpv6Address().getValue().getBytes(), 0, destBytes, offset, addrLen);
+ }
offset += addrLen;
}
}
- public static int getPadding(final int length, final int padding) {
- return (padding - (length % padding)) % padding;
- }
-
public static Message createErrorMessage(final PCEPErrors e, final OpenObject t) {
final PcerrBuilder errMessageBuilder = new PcerrBuilder();
final PCEPErrorMapping mapping = PCEPErrorMapping.getInstance();
final PCEPErrorIdentifier id = mapping.getFromErrorsEnum(e);
final Errors err = new ErrorsBuilder().setType(id.type).setValue(id.value).build();
- if (t == null)
+ if (t == null) {
return errMessageBuilder.setPcerrMessage(new PcerrMessageBuilder().setErrors(Arrays.asList(err)).build()).build();
- else {
+ } else {
final ErrorType type = new SessionBuilder().setOpen((Open) t).build();
return errMessageBuilder.setPcerrMessage(new PcerrMessageBuilder().setErrors(Arrays.asList(err)).setErrorType(type).build()).build();
}
public abstract void addTlv(final BUILDER builder, final Tlv tlv);
- private static int getPadding(final int length, final int padding) {
+ protected static int getPadding(final int length, final int padding) {
return (padding - (length % padding)) % padding;
}
}
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.attributes.ClassTypeBuilder;
+import com.google.common.primitives.UnsignedBytes;
+
/**
- * Parser for {@link org.opendaylight.protocol.pcep.object.PCEPClassTypeObject PCEPClassTypeObject}
+ * Parser for {@link ClasstypeObject}
*/
public class PCEPClassTypeObjectParser extends AbstractObjectWithTlvsParser<ClassTypeBuilder> {
/**
* Length of Class Type field in bits.
*/
- public static final int CT_F_LENGTH = 3;
+ private static final int CT_F_LENGTH = 3;
/**
* Reserved field bit length.
*/
- public static final int RESERVED = 29;
+ private static final int RESERVED = 29;
/**
* Size of the object in bytes.
*/
- public static final int SIZE = (RESERVED + CT_F_LENGTH) / 8;
+ private static final int SIZE = (RESERVED + CT_F_LENGTH) / 8;
public PCEPClassTypeObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
@Override
public ClasstypeObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ PCEPDocumentedException {
if (bytes == null) {
throw new IllegalArgumentException("Byte array is mandatory.");
}
if (!header.isProcessingRule()) {
throw new PCEPDocumentedException("Processed bit not set", PCEPErrors.P_FLAG_NOT_SET);
}
-
final ClassTypeBuilder builder = new ClassTypeBuilder();
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- final short ct = (short) (bytes[SIZE - 1] & 0xFF);
+ final short ct = (short) UnsignedBytes.toInt(bytes[SIZE - 1]);
builder.setClassType(new ClassType(ct));
if (ct < 0 || ct > 8) {
if (!(object instanceof ClasstypeObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed ClasstypeObject.");
}
-
final byte[] retBytes = new byte[SIZE];
- retBytes[SIZE - 1] = ((ClasstypeObject) object).getClassType().getValue().byteValue();
+ retBytes[SIZE - 1] = UnsignedBytes.checkedCast(((ClasstypeObject) object).getClassType().getValue());
return retBytes;
}
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.CloseObject;
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.close.object.Tlvs;
+import com.google.common.primitives.UnsignedBytes;
+
/**
* Parser for {@link org.opendaylight.protocol.pcep.object.PCEPCloseObject PCEPCloseObject}
*/
/*
* lengths of fields in bytes
*/
- public static final int FLAGS_F_LENGTH = 1;
- public static final int REASON_F_LENGTH = 1;
+ private static final int FLAGS_F_LENGTH = 1;
+ private static final int REASON_F_LENGTH = 1;
/*
* offsets of fields in bytes
*/
- public static final int FLAGS_F_OFFSET = 2; // added reserved field of size 2 bytes
- public static final int REASON_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH;
+ private static final int FLAGS_F_OFFSET = 2;
+ private static final int REASON_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH;
/*
* total size of object in bytes
*/
- public static final int TLVS_OFFSET = REASON_F_OFFSET + REASON_F_LENGTH;
+ private static final int TLVS_OFFSET = REASON_F_OFFSET + REASON_F_LENGTH;
public PCEPCloseObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
if (bytes == null) {
throw new IllegalArgumentException("Byte array is mandatory.");
}
-
final CCloseBuilder builder = new CCloseBuilder();
-
parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
-
- builder.setReason((short) (bytes[REASON_F_OFFSET] & 0xFF));
-
+ builder.setReason((short) UnsignedBytes.toInt(bytes[REASON_F_OFFSET]));
return builder.build();
}
if (!(object instanceof CloseObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed CloseObject.");
}
-
final CloseObject obj = (CloseObject) object;
final byte[] tlvs = serializeTlvs(obj.getTlvs());
if (tlvs != null) {
tlvsLength = tlvs.length;
}
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ 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 int reason = ((CClose) obj).getReason().intValue();
-
- retBytes[REASON_F_OFFSET] = (byte) reason;
-
+ retBytes[REASON_F_OFFSET] = UnsignedBytes.checkedCast(((CClose) obj).getReason());
return retBytes;
}
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
@Override
public PcepErrorObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ PCEPDocumentedException {
if (bytes == null) {
throw new IllegalArgumentException("Array of bytes is mandatory.");
}
if (tlvs != null) {
tlvsLength = tlvs.length;
}
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
if (tlvs != null) {
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
-import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.GcObject;
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.Tlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.GcBuilder;
+import com.google.common.primitives.UnsignedBytes;
+
/**
* Parser for {@link GcObject}
*/
public static final int TYPE = 1;
- private final static int MAX_HOP_F_LENGTH = 1;
- private final static int MAX_UTIL_F_LENGTH = 1;
- private final static int MIN_UTIL_F_LENGTH = 1;
- private final static int OVER_BOOKING_FACTOR_F_LENGTH = 1;
+ private static final int MAX_HOP_F_LENGTH = 1;
+ private static final int MAX_UTIL_F_LENGTH = 1;
+ private static final int MIN_UTIL_F_LENGTH = 1;
+ private static final int OVER_BOOKING_FACTOR_F_LENGTH = 1;
- private final static int MAX_HOP_F_OFFSET = 0;
- private final static int MAX_UTIL_F_OFFSET = MAX_HOP_F_OFFSET + MAX_HOP_F_LENGTH;
- private final static int MIN_UTIL_F_OFFSET = MAX_UTIL_F_OFFSET + MAX_UTIL_F_LENGTH;
- private final static int OVER_BOOKING_FACTOR_F_OFFSET = MIN_UTIL_F_OFFSET + MIN_UTIL_F_LENGTH;
+ private static final int MAX_HOP_F_OFFSET = 0;
+ private static final int MAX_UTIL_F_OFFSET = MAX_HOP_F_OFFSET + MAX_HOP_F_LENGTH;
+ private static final int MIN_UTIL_F_OFFSET = MAX_UTIL_F_OFFSET + MAX_UTIL_F_LENGTH;
+ private static final int OVER_BOOKING_FACTOR_F_OFFSET = MIN_UTIL_F_OFFSET + MIN_UTIL_F_LENGTH;
- private final static int TLVS_OFFSET = OVER_BOOKING_FACTOR_F_OFFSET + OVER_BOOKING_FACTOR_F_LENGTH;
+ private static final int TLVS_OFFSET = OVER_BOOKING_FACTOR_F_OFFSET + OVER_BOOKING_FACTOR_F_LENGTH;
public PCEPGlobalConstraintsObjectParser(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 GcBuilder builder = new GcBuilder();
- parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- builder.setMaxHop((short) (bytes[MAX_HOP_F_OFFSET] & 0xFF));
- builder.setMinUtilization((short) (bytes[MIN_UTIL_F_OFFSET] & 0xFF));
- builder.setMaxUtilization((short) (bytes[MAX_UTIL_F_OFFSET] & 0xFF));
- builder.setOverBookingFactor((short) (bytes[OVER_BOOKING_FACTOR_F_OFFSET] & 0xFF));
-
+ builder.setMaxHop((short) UnsignedBytes.toInt(bytes[MAX_HOP_F_OFFSET]));
+ builder.setMinUtilization((short) UnsignedBytes.toInt(bytes[MIN_UTIL_F_OFFSET]));
+ builder.setMaxUtilization((short) UnsignedBytes.toInt(bytes[MAX_UTIL_F_OFFSET]));
+ builder.setOverBookingFactor((short) UnsignedBytes.toInt(bytes[OVER_BOOKING_FACTOR_F_OFFSET]));
return builder.build();
}
if (!(object instanceof GcObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed GcObject.");
}
-
final GcObject specObj = (GcObject) object;
-
- // final byte[] tlvs = PCEPTlvParser.put(specObj.getTlvs());
final byte[] retBytes = new byte[TLVS_OFFSET + 0];
-
- retBytes[MAX_HOP_F_OFFSET] = specObj.getMaxHop().byteValue();
- retBytes[MAX_UTIL_F_OFFSET] = specObj.getMaxUtilization().byteValue();
- retBytes[MIN_UTIL_F_OFFSET] = specObj.getMinUtilization().byteValue();
- retBytes[OVER_BOOKING_FACTOR_F_OFFSET] = specObj.getOverBookingFactor().byteValue();
-
- // ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
-
+ retBytes[MAX_HOP_F_OFFSET] = UnsignedBytes.checkedCast(specObj.getMaxHop());
+ retBytes[MAX_UTIL_F_OFFSET] = UnsignedBytes.checkedCast(specObj.getMaxUtilization());
+ retBytes[MIN_UTIL_F_OFFSET] = UnsignedBytes.checkedCast(specObj.getMinUtilization());
+ retBytes[OVER_BOOKING_FACTOR_F_OFFSET] = UnsignedBytes.checkedCast(specObj.getOverBookingFactor());
return retBytes;
}
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.rsvp.rev130820.AttributeFilter;
+import com.google.common.primitives.UnsignedBytes;
+
/**
* Parser for {@link LspaObject}
*/
/*
* lengths of fields in bytes
*/
- public static final int EXC_ANY_F_LENGTH = 4;
- public static final int INC_ANY_F_LENGTH = 4;
- public static final int INC_ALL_F_LENGTH = 4;
- public static final int SET_PRIO_F_LENGTH = 1;
- public static final int HOLD_PRIO_F_LENGTH = 1;
- public static final int FLAGS_F_LENGTH = 1;
+ private static final int EXC_ANY_F_LENGTH = 4;
+ private static final int INC_ANY_F_LENGTH = 4;
+ private static final int INC_ALL_F_LENGTH = 4;
+ private static final int SET_PRIO_F_LENGTH = 1;
+ private static final int HOLD_PRIO_F_LENGTH = 1;
+ private static final int FLAGS_F_LENGTH = 1;
/*
* offsets of flags inside flags field in bits
*/
- public static final int S_FLAG_OFFSET = 6;
- public static final int L_FLAG_OFFSET = 7;
+ private static final int S_FLAG_OFFSET = 6;
+ private static final int L_FLAG_OFFSET = 7;
/*
* offsets of fields in bytes
*/
- public static final int EXC_ANY_F_OFFSET = 0;
- public static final int INC_ANY_F_OFFSET = EXC_ANY_F_OFFSET + EXC_ANY_F_LENGTH;
- public static final int INC_ALL_F_OFFSET = INC_ANY_F_OFFSET + INC_ANY_F_LENGTH;
- public static final int SET_PRIO_F_OFFSET = INC_ALL_F_OFFSET + INC_ALL_F_LENGTH;
- public static final int HOLD_PRIO_F_OFFSET = SET_PRIO_F_OFFSET + SET_PRIO_F_LENGTH;
- public static final int FLAGS_F_OFFSET = HOLD_PRIO_F_OFFSET + HOLD_PRIO_F_LENGTH;
- public static final int TLVS_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH + 1; // added reserved field of length 1B
+ private static final int EXC_ANY_F_OFFSET = 0;
+ private static final int INC_ANY_F_OFFSET = EXC_ANY_F_OFFSET + EXC_ANY_F_LENGTH;
+ private static final int INC_ALL_F_OFFSET = INC_ANY_F_OFFSET + INC_ANY_F_LENGTH;
+ private static final int SET_PRIO_F_OFFSET = INC_ALL_F_OFFSET + INC_ALL_F_LENGTH;
+ private static final int HOLD_PRIO_F_OFFSET = SET_PRIO_F_OFFSET + SET_PRIO_F_LENGTH;
+ private static final int FLAGS_F_OFFSET = HOLD_PRIO_F_OFFSET + HOLD_PRIO_F_LENGTH;
+ private static final int TLVS_F_OFFSET = FLAGS_F_OFFSET + FLAGS_F_LENGTH + 1; // added reserved field of length 1B
public PCEPLspaObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
if (bytes == null) {
throw new IllegalArgumentException("Bytes array is mandatory.");
}
-
final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(bytes, FLAGS_F_OFFSET, FLAGS_F_LENGTH));
final LspaBuilder builder = new LspaBuilder();
-
parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_F_OFFSET));
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- builder.setHoldPriority((short) (bytes[HOLD_PRIO_F_OFFSET] & 0xFF));
- builder.setSetupPriority((short) (bytes[SET_PRIO_F_OFFSET] & 0xFF));
+ builder.setHoldPriority((short) UnsignedBytes.toInt(bytes[HOLD_PRIO_F_OFFSET]));
+ builder.setSetupPriority((short) UnsignedBytes.toInt(bytes[SET_PRIO_F_OFFSET]));
builder.setLocalProtectionDesired(flags.get(L_FLAG_OFFSET));
builder.setExcludeAny(new AttributeFilter(ByteArray.bytesToLong(ByteArray.subByte(bytes, EXC_ANY_F_OFFSET, EXC_ANY_F_LENGTH))));
builder.setIncludeAll(new AttributeFilter(ByteArray.bytesToLong(ByteArray.subByte(bytes, INC_ALL_F_OFFSET, INC_ALL_F_LENGTH))));
builder.setIncludeAny(new AttributeFilter(ByteArray.bytesToLong(ByteArray.subByte(bytes, INC_ANY_F_OFFSET, INC_ANY_F_LENGTH))));
-
return builder.build();
}
if (!(object instanceof LspaObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed LspaObject.");
}
-
final LspaObject lspaObj = (LspaObject) object;
- // FIXME, but no Tlvs defined
- // final byte[] tlvs = PCEPTlvParser.put(lspaObj.getTlvs());
- // final byte[] retBytes = new byte[TLVS_F_OFFSET + tlvs.length];
- // ByteArray.copyWhole(tlvs, retBytes, TLVS_F_OFFSET);
-
final byte[] retBytes = new byte[TLVS_F_OFFSET];
System.arraycopy(ByteArray.longToBytes(lspaObj.getExcludeAny().getValue()), 4, retBytes, EXC_ANY_F_OFFSET, EXC_ANY_F_LENGTH);
System.arraycopy(ByteArray.longToBytes(lspaObj.getIncludeAny().getValue()), 4, retBytes, INC_ANY_F_OFFSET, INC_ANY_F_LENGTH);
System.arraycopy(ByteArray.longToBytes(lspaObj.getIncludeAll().getValue()), 4, retBytes, INC_ALL_F_OFFSET, INC_ALL_F_LENGTH);
- retBytes[SET_PRIO_F_OFFSET] = ByteArray.shortToBytes(lspaObj.getSetupPriority())[Short.SIZE / Byte.SIZE - 1];
- retBytes[HOLD_PRIO_F_OFFSET] = ByteArray.shortToBytes(lspaObj.getHoldPriority())[Short.SIZE / Byte.SIZE - 1];
+ retBytes[SET_PRIO_F_OFFSET] = UnsignedBytes.checkedCast(lspaObj.getSetupPriority());
+ retBytes[HOLD_PRIO_F_OFFSET] = UnsignedBytes.checkedCast(lspaObj.getHoldPriority());
final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
flags.set(L_FLAG_OFFSET, lspaObj.isLocalProtectionDesired());
ByteArray.copyWhole(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH), retBytes, FLAGS_F_OFFSET);
-
return retBytes;
}
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
-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.no.path.Tlvs;
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.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.Tlv;
+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;
/**
* Parser for {@link NoPathObject}
@Override
public NoPathObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ PCEPDocumentedException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
if (tlvs != null) {
tlvsLength = tlvs.length;
}
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
if (tlvs != null) {
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NotificationObject;
@Override
public NotificationObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ PCEPDocumentedException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
if (tlvs != null) {
tlvsLength = tlvs.length;
}
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
if (tlvs != null) {
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
/*
* lengths of fields
*/
- public static final int OF_CODE_F_LENGTH = 2;
+ private static final int OF_CODE_F_LENGTH = 2;
/*
* offsets of fields
*/
- public static final int OF_CODE_F_OFFSET = 0;
- public static final int TLVS_OFFSET = OF_CODE_F_OFFSET + OF_CODE_F_LENGTH + 2; // added reserved field of size 2
+ private static final int OF_CODE_F_OFFSET = 0;
+ private static final int TLVS_OFFSET = OF_CODE_F_OFFSET + OF_CODE_F_LENGTH + 2;
public PCEPObjectiveFunctionObjectParser(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 OfBuilder builder = new OfBuilder();
-
- parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
- builder.setCode(new OfId(ByteArray.bytesToInt(ByteArray.subByte(bytes, OF_CODE_F_OFFSET, OF_CODE_F_LENGTH)) & 0xFFFF));
-
+ builder.setCode(new OfId(ByteArray.bytesToInt(ByteArray.subByte(bytes, OF_CODE_F_OFFSET, OF_CODE_F_LENGTH))));
return builder.build();
}
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass()
+ ". Needed PCEPObjectiveFunction.");
}
-
final OfObject specObj = (OfObject) object;
- // FIXME
- // final byte[] tlvs = PCEPTlvParser.put(specObj.getTlvs());
final byte[] retBytes = new byte[TLVS_OFFSET + 0];
-
- // ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
-
ByteArray.copyWhole(ByteArray.shortToBytes(specObj.getCode().getValue().shortValue()), retBytes, OF_CODE_F_OFFSET);
-
return retBytes;
}
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.PCEPErrors;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.LspDbVersionTlv;
final byte[] tlvs = serializeTlvs(open.getTlvs());
- final byte[] bytes = new byte[TLVS_OFFSET + tlvs.length + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ final byte[] bytes = new byte[TLVS_OFFSET + tlvs.length + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
bytes[VER_FLAGS_MF_OFFSET] = versionFlagMF;
bytes[KEEPALIVE_F_OFFSET] = ByteArray.shortToBytes(open.getKeepalive())[1];
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.Util;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
if (tlvs != null) {
tlvsLength = tlvs.length;
}
- final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + Util.getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
+ final byte[] retBytes = new byte[TLVS_OFFSET + tlvsLength + getPadding(TLVS_OFFSET + tlvs.length, PADDED_TO)];
if (tlvs != null) {
ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
*/
package org.opendaylight.protocol.pcep.impl.object;
+import java.util.Arrays;
+
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
+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.SrpIdNumber;
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.Tlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.SrpBuilder;
+/**
+ * Parser for {@link SrpObject}
+ */
public final class PCEPSrpObjectParser extends AbstractObjectWithTlvsParser<SrpBuilder> {
public static final int CLASS = 33;
public static final int TYPE = 1;
+ private static final int FLAGS_SIZE = 4;
+
+ private static final int SRP_ID_SIZE = 4;
+
+ private static final int MIN_SIZE = FLAGS_SIZE + SRP_ID_SIZE;
+
public PCEPSrpObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
}
@Override
public SrpObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
-
- // FIXME: finish
-
+ if (bytes == null || bytes.length == 0) {
+ throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
+ }
+ if (bytes.length < MIN_SIZE) {
+ throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + bytes.length + "; Expected: >=" + MIN_SIZE
+ + ".");
+ }
+ if (header.isProcessingRule()) {
+ throw new PCEPDeserializerException("Processed flag is set");
+ }
final SrpBuilder builder = new SrpBuilder();
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
-
+ final byte[] srpId = ByteArray.subByte(bytes, FLAGS_SIZE, SRP_ID_SIZE);
+ if (Arrays.equals(srpId, new byte[] { 0, 0, 0, 0 }) || Arrays.equals(srpId, new byte[] { 0xFFFFFFFF })) {
+ throw new PCEPDeserializerException("Min/Max values for SRP ID are reserved.");
+ }
+ builder.setOperationId(new SrpIdNumber(ByteArray.bytesToLong(srpId)));
return builder.build();
}
if (!(object instanceof SrpObject)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed SrpObject.");
}
-
final SrpObject srp = (SrpObject) object;
- // FIXME: finish
-
- return new byte[0];
+ final Long id = srp.getOperationId().getValue();
+ if (id == 0 || id == 0xFFFFFFFFL) {
+ throw new IllegalArgumentException("Min/Max values for SRP ID are reserved.");
+ }
+ final byte[] retBytes = new byte[MIN_SIZE];
+ System.arraycopy(ByteArray.intToBytes(id.intValue()), 0, retBytes, FLAGS_SIZE, SRP_ID_SIZE);
+ return retBytes;
}
@Override
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.impl.object.PCEPBandwidthObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPClassTypeObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPCloseObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPEndPointsObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPGlobalConstraintsObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPLoadBalancingObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPLspaObjectParser;
import org.opendaylight.protocol.pcep.impl.object.PCEPMetricObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPObjectiveFunctionObjectParser;
+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.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
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.OfId;
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.endpoints.object.address.family.Ipv4Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv6Builder;
+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.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.SrpBuilder;
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.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.rsvp.rev130820.AttributeFilter;
import com.google.common.collect.Lists;
import com.google.common.primitives.UnsignedBytes;
-/*
- * Used resources<br/>
- * <br/>
- * PCEPOpenObject3.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * keepAlive: 30<br/>
- * deadTimer: 120<br/>
- * sessionId: 1<br/>
- * tlvs:NO<br/>
- * <br/>
- * PCEPBandwidthObject1LowerBounds.bin<br/>
- * objClass: 5 <br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Bandwidth: 0<br/>
- * <br/>
- * PCEPBandwidthObject2UpperBounds.bin<br/>
- * objClass: 5 <br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Bandwidth: 0xFFFFFFFF<br/>
- * <br/>
- * PCEPEndPointsObject1IPv4.bin<br/>
- * objClass: 4 <br/>
- * objType: 1<br/>
- * objLength: 12<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * src IP: 0xA2F5110E <br/>
- * dest IP: 0xFFFFFFFF <br/>
- * <br/>
- * PCEPEndPointsObject2IPv6.bin<br/>
- * objClass: 4 <br/>
- * objType: 2<br/>
- * objLength: 36<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * src IP: 0xFFFFFFFFF FFFFFFFFF FFFFFFFFF FFFFFFFFF<br/>
- * dest IP: 0x00025DD2 FFECA1B6 581E9F50 00000000 <br/>
- * <br/>
- * PCEPErrorObject1.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 1<br/>
- * Error-value: 1<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPErrorObject2Invalid.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 3<br/>
- * Error-value: 0<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPErrorObject3.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 2<br/>
- * Error-value: 0<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPLspaObject1LowerBounds.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0x00000000L<br/>
- * Include-any: 0x00000000L<br/>
- * Include-all: 0x00000000L<br/>
- * Setup Prio: 0x00<br/>
- * Holding Prio: 0x00<br/>
- * Flags: - L : false<br/>
- * <br/>
- * PCEPLspaObject2UpperBounds.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0xFFFFFFFFL<br/>
- * Include-any: 0xFFFFFFFFL<br/>
- * Include-all: 0xFFFFFFFFL<br/>
- * Setup Prio: 0xFF<br/>
- * Holding Prio: 0xFF<br/>
- * Flags: - L : true<br/>
- * <br/>
- * PCEPLspaObject3RandVals.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0x20A1FEE3L<br/>
- * Include-any: 0x1A025CC7L<br/>
- * Include-all: 0x2BB66532L<br/>
- * Setup Prio: 0x03<br/>
- * Holding Prio: 0x02<br/>
- * Flags: - L : true<br/>
- * <br/>
- * NoPathObject1WithTLV.bin<br/>
- * objClass: 3 (RP)<br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Nature of Issue: 2<br/>
- * No-Path flags:<br/>
- * - C: true<br/>
- * <br/>
- * tlvs:<br/>
- * -- NO-PATH-VECTOR<br/>
- * - flags (0x4000):<br/>
- * - PCE currently unavailable: false<br/>
- * - unknown destination: true<br/>
- * - unknown source: false<br/>
- *
- * <br/>
- * NoPathObject2WithoutTLV.bin<br/>
- * objClass: 3 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: true<br/>
- * <br/>
- * Nature of Issue: 16<br/>
- * No-Path flags:<br/>
- * - C: false<br/>
- * <br/>
- * tlvs:NO<br/>
- * <br/>
- * PCEPNotificationObject1WithTlv.bin <br/>
- * objClass: 12<br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * NT: 1<br/>
- * NV: 1<br/>
- * Tlvs:<br/>
- * - OverloaderDuration(0xFF0000A2L)<br/>
- * <br/>
- * PCEPNotificationObject2WithoutTlv.bin <br/>
- * objClass: 12<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * NT: 0xFF<br/>
- * NV: 0xFF<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPOpenObject1.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 28<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * keepAlive: 30<br/>
- * deadTimer: 120<br/>
- * sessionId: 1<br/>
- * tlvs:<br/>
- * - PCEPStatefulCapability<br/>
- * - LSPStateDBVersionTlv<br/>
- * - NodeIdentifierTlv<br/>
- * <br/>
- * PCEPOpenObject2UpperBoundsNoTlv.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 34<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * keepAlive: 0xFF<br/>
- * deadTimer: 0xFF<br/>
- * sessionId: 0xFF<br/>
- * tlvs: NO<br/>
- * <br/>
- * PCEPRPObject1.bin<br/>
- * objClass: 2 (RP)<br/>
- * objType: 1<br/>
- * objLength: 12<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * RP flags:<br/>
- * - loose/strict: true<br/>
- * - Bi-directional: false<br/>
- * - Reoptimization: false<br/>
- * - Priority: 5<br/>
- * Request ID: 0xDEADBEEF<br/>
- * tlvs: NO<br/>
- * <br/>
- * PCEPSvecObject1_10ReqIDs.bin <br/>
- * objClass: 11<br/>
- * objType: 1<br/>
- * objLength: 48<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: false<br/>
- * <br/>
- * Flags:<br/>
- * - Link diverse: true<br/>
- * - Node diverse: false<br/>
- * - SRLG diverse: true<br/>
- * Reques-ID-numbers:<br/>
- * #1 - 0xFFFFFFFFL<br/>
- * #2 - 0x00000000L<br/>
- * #3 - 0x01234567L<br/>
- * #4 - 0x89ABCDEFL<br/>
- * #5 - 0xFEDCBA98L<br/>
- * #6 - 0x76543210L<br/>
- * #7 - 0x15825266L<br/>
- * #8 - 0x48120BBEL<br/>
- * #9 - 0x25FB7E52L<br/>
- * #10 - 0xB2F2546BL<br/>
- * <br/>
- * PCEPSvecObject2.bin <br/>
- * objClass: 11<br/>
- * objType: 1<br/>
- * objLength: 08<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Flags:<br/>
- * - Link diverse: false<br/>
- * - Node diverse: false<br/>
- * - SRLG diverse: false<br/>
- * Reques-ID-numbers:<br/>
- * #1 - 0x000000FFL<br/>
- * PCEPExcludeRouteObject.1.bin <br/>
- * objClass: 17 <br/>
- * objType: 1 <br/>
- * objLength: 20 <br/>
- * version: 1 <br/>
- * Flags: <br/>
- * - fail: true <br/>
- * Subobjects: <br/>
- * - XROIPv4PreffixSubobject(192.168.0.0/16, exclude, node) <br/>
- * - XROASnumber(0x1234) <br/>
- */
public class PCEPObjectParserTest {
private TlvHandlerRegistry tlvRegistry;
this.tlvRegistry = PCEPExtensionProviderContextImpl.create().getTlvHandlerRegistry();
}
- // IPv4Address ipv4addr = new IPv4Address(new byte[] { (byte) 192, (byte) 168, 1, 8 });
- //
- // IPv6Address ipv6addr = new IPv6Address(new byte[] { (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1,
- // (byte) 192, (byte) 168,
- // 2, 1, (byte) 192, (byte) 168, 2, 1 });
- //
- //
- // /**
- // * Standard serialization test<br/>
- // * Used resources:<br/>
- // * - PCEPOpenObject1.bin<br/>
- // *
- // * @throws PCEPDeserializerException
- // * @throws IOException
- // * @throws PCEPDocumentedException
- // */
// @Test
// @Ignore
// // FIXME: temporary
// // assertEquals(((UnknownObject) obj).getError(), PCEPErrors.UNRECOGNIZED_OBJ_TYPE);
// // }
// //
- // // @Test
- // // public void testCloseObjSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- // // serDeserTest("src/test/resources/PCEPCloseObject1.bin", new PCEPCloseObject(Reason.TOO_MANY_UNKNOWN_MSG));
- // // }
- //
+
+ @Test
+ public void testCloseObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPCloseObjectParser parser = new PCEPCloseObjectParser(this.tlvRegistry);
+ final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseObject1.bin");
+
+ final CCloseBuilder builder = new CCloseBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ builder.setReason((short) 5);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
@Test
public void testLoadBalancingObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
final PCEPLoadBalancingObjectParser parser = new PCEPLoadBalancingObjectParser(this.tlvRegistry);
}
@Test
- public void testEndPointsObjectSerDeserIPv6() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ public void testEndPointsObjectIPv6() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
final byte[] destIPBytes = { (byte) 0x00, (byte) 0x02, (byte) 0x5D, (byte) 0xD2, (byte) 0xFF, (byte) 0xEC, (byte) 0xA1,
(byte) 0xB6, (byte) 0x58, (byte) 0x1E, (byte) 0x9F, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, };
final byte[] srcIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
// PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPErrorObject2Invalid.bin")).get(0);
// }
//
- // /**
- // * Test for upper/lower bounds of PCEPLspaObject (Serialization/Deserialization)<br/>
- // * Used resources:<br/>
- // * - PCEPLspaObject1LowerBounds.bin<br/>
- // * - PCEPLspaObject2UpperBounds.bin<br/>
- // * - PCEPLspaObject3RandVals.bin<br/>
- // *
- // * @throws IOException
- // * @throws PCEPDeserializerException
- // * @throws PCEPDocumentedException
- // */
- // @Test
- // public void testLspaObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTest("src/test/resources/PCEPLspaObject2UpperBounds.bin",
- // new PCEPLspaObject(0xFFFFFFFFL, 0xFFFFFFFFL, 0xFFFFFFFFL, (short) 0xFF, (short) 0xFF, false, true, true, true));
- // serDeserTest("src/test/resources/PCEPLspaObject1LowerBounds.bin",
- // new PCEPLspaObject(0x00000000L, 0x00000000L, 0x00000000L, (short) 0x00, (short) 0x00, false, false, true, true));
- // serDeserTest("src/test/resources/PCEPLspaObject3RandVals.bin",
- // new PCEPLspaObject(0x20A1FEE3L, 0x1A025CC7L, 0x2BB66532L, (short) 0x03, (short) 0x02, false, true, true, true));
- // }
- //
+
+ @Test
+ public void testLspaObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPLspaObjectParser parser = new PCEPLspaObjectParser(this.tlvRegistry);
+ byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject1LowerBounds.bin");
+
+ final LspaBuilder builder = new LspaBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(true);
+ builder.setExcludeAny(new AttributeFilter(0L));
+ builder.setIncludeAny(new AttributeFilter(0L));
+ builder.setIncludeAll(new AttributeFilter(0L));
+ builder.setHoldPriority((short) 0);
+ builder.setSetupPriority((short) 0);
+ builder.setLocalProtectionDesired(false);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+ result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject2UpperBounds.bin");
+
+ builder.setExcludeAny(new AttributeFilter(0xFFFFFFFFL));
+ builder.setIncludeAny(new AttributeFilter(0xFFFFFFFFL));
+ builder.setIncludeAll(new AttributeFilter(0xFFFFFFFFL));
+ builder.setHoldPriority((short) 0xFF);
+ builder.setSetupPriority((short) 0xFF);
+ builder.setLocalProtectionDesired(true);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+ result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin");
+
+ builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
+ builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
+ builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
+ builder.setHoldPriority((short) 0x02);
+ builder.setSetupPriority((short) 0x03);
+ builder.setLocalProtectionDesired(true);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
@Test
public void testMetricObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
assertArrayEquals(result, parser.serializeObject(builder.build()));
}
- //
- // /**
- // * Standard deserialization test + specific test without tlv<br/>
- // * Used resources:<br/>
- // * - NoPathObject1WithTLV.bin<br/>
- // * - NoPathObject2WithoutTLV.bin<br/>
- // *
- // * @throws PCEPDeserializerException
- // * @throws IOException
- // * @throws PCEPDocumentedException
- // */
// @Test
- // public void testNoPathObjectDeserialization() 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));
+ // 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));
//
- // }
- //
- // /**
- // * Standard serialization test + without tlv<br/>
- // * Used resources:<br/>
- // * - NoPathObject1WithTLV.bin<br/>
- // * - NoPathObject2WithoutTLV.bin<br/>
- // *
- // * @throws PCEPDeserializerException
- // * @throws IOException
- // * @throws PCEPDocumentedException
- // */
- // @Test
- // public void testNoPathObjectSerialization() throws IOException, PCEPDeserializerException,
- // PCEPDocumentedException {
// 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));
// bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) noPathObject));
// assertArrayEquals(bytesFromFile, bytesActual);
// }
+
//
// /**
// * Specific test with/without tlvs (Ser/Deser)<br/>
assertArrayEquals(result, parser.serializeObject(builder.build()));
}
- //
- // @Test
- // public void testClassTypeObject() throws PCEPDeserializerException, PCEPDocumentedException {
- // final PCEPClassTypeObject ct = new PCEPClassTypeObject((short) 4);
- // // final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser();
- // // final byte[] bytes = parser.put(ct);
- // // assertEquals(ct, parser.parse(bytes, true, false));
- // }
+ @Test
+ public void testClassTypeObject() throws PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser(this.tlvRegistry);
+ final byte[] result = new byte[] { 0, 0, 0, (byte) 0x04 };
+
+ final ClassTypeBuilder builder = new ClassTypeBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(false);
+ builder.setClassType(new ClassType((short) 4));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
//
// /**
// * Test PCEPExcludeRouteObjectObject (Serialization/Deserialization)<br/>
//
// }
//
- // @Test
- // public void tesObjectiveFunctionObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTest("src/test/resources/PCEPObjectiveFunctionObject.1.bin", new
- // PCEPObjectiveFunctionObject(PCEPOFCodes.MBC, true, false));
- // }
- //
- // @Test
- // public void tesGlobalConstraintsObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- // serDeserTest("src/test/resources/PCEPGlobalConstraintsObject.1.bin",
- // new PCEPGlobalConstraintsObject((short) 1, (short) 0, (short) 100, (short) 0xFF, true, false));
- // }
- //
+
+ @Test
+ public void testSrpObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
+ final byte[] result = new byte[] { 0, 0, 0, 0, 0, 0, 0, (byte) 0x01 };
+
+ final SrpBuilder builder = new SrpBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ builder.setOperationId(new SrpIdNumber(1L));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
+ @Test
+ public void testObjectiveFunctionObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPObjectiveFunctionObjectParser parser = new PCEPObjectiveFunctionObjectParser(this.tlvRegistry);
+ final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPObjectiveFunctionObject.1.bin");
+
+ final OfBuilder builder = new OfBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(false);
+ builder.setCode(new OfId(4));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
+ @Test
+ public void testGlobalConstraintsObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+ final PCEPGlobalConstraintsObjectParser parser = new PCEPGlobalConstraintsObjectParser(this.tlvRegistry);
+ final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPGlobalConstraintsObject.1.bin");
+
+ final GcBuilder builder = new GcBuilder();
+ builder.setProcessingRule(true);
+ builder.setIgnore(false);
+ builder.setMaxHop((short) 1);
+ builder.setMaxUtilization((short) 0);
+ builder.setMinUtilization((short) 100);
+ builder.setOverBookingFactor((short) 0xFF);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
+ }
+
// // FIXME: add at least one test with true value
// @Test
// public void openObjectWithTlv() throws PCEPDeserializerException, PCEPDocumentedException {