import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.lsp.cleanup.tlv.LspCleanupBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-public class LSPCleanupTlvParser implements TlvParser, TlvSerializer {
+public final class LSPCleanupTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 26;
*/
package org.opendaylight.protocol.pcep.crabbe.initiated00;
-import org.opendaylight.protocol.pcep.spi.AbstractObjectWithTlvsParser;
-import org.opendaylight.protocol.pcep.spi.ObjectUtil;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.spi.PCEPErrors;
+import org.opendaylight.protocol.pcep.ietf.stateful02.Stateful02OpenObjectParser;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
-import org.opendaylight.protocol.pcep.spi.UnknownObject;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.Tlvs1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.lsp.cleanup.tlv.LspCleanup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Tlvs2;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Tlvs2Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.node.identifier.tlv.NodeIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.stateful.capability.tlv.Stateful;
-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.ProtocolVersion;
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.of.list.tlv.OfList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.Tlvs;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.primitives.UnsignedBytes;
/**
* Parser for {@link Open}
*/
-public class PCEPOpenObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilder> {
- private static final Logger LOG = LoggerFactory.getLogger(PCEPOpenObjectParser.class);
-
- public static final int CLASS = 1;
-
- public static final int TYPE = 1;
-
- /*
- * lengths of fields in bytes
- */
- private static final int VER_FLAGS_MF_LENGTH = 1;
- private static final int KEEPALIVE_F_LENGTH = 1;
- private static final int DEAD_TIMER_LENGTH = 1;
- private static final int SID_F_LENGTH = 1;
-
- /*
- * lengths of subfields inside multi-field in bits
- */
- private static final int VERSION_SF_LENGTH = 3;
-
- /*
- * offsets of field in bytes
- */
- private static final int VER_FLAGS_MF_OFFSET = 0;
- private static final int KEEPALIVE_F_OFFSET = VER_FLAGS_MF_OFFSET + VER_FLAGS_MF_LENGTH;
- private static final int DEAD_TIMER_OFFSET = KEEPALIVE_F_OFFSET + KEEPALIVE_F_LENGTH;
- private static final int SID_F_OFFSET = DEAD_TIMER_OFFSET + DEAD_TIMER_LENGTH;
- private static final int TLVS_OFFSET = SID_F_OFFSET + SID_F_LENGTH;
-
- /*
- * offsets of subfields inside multi-field in bits
- */
- private static final int VERSION_SF_OFFSET = 0;
-
- private static final int PCEP_VERSION = 1;
+public final class PCEPOpenObjectParser extends Stateful02OpenObjectParser {
public PCEPOpenObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
}
- @Override
- public Object parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
- if (bytes == null || bytes.length == 0) {
- throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- }
- final int versionValue = ByteArray.copyBitsRange(bytes[VER_FLAGS_MF_OFFSET], VERSION_SF_OFFSET, VERSION_SF_LENGTH);
-
- final OpenBuilder builder = new OpenBuilder();
- builder.setVersion(new ProtocolVersion((short) versionValue));
- builder.setProcessingRule(header.isProcessingRule());
- builder.setIgnore(header.isIgnore());
- builder.setDeadTimer((short) UnsignedBytes.toInt(bytes[DEAD_TIMER_OFFSET]));
- builder.setKeepalive((short) UnsignedBytes.toInt(bytes[KEEPALIVE_F_OFFSET]));
- builder.setSessionId((short) UnsignedBytes.toInt(bytes[SID_F_OFFSET]));
-
- final TlvsBuilder tbuilder = new TlvsBuilder();
- parseTlvs(tbuilder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
- builder.setTlvs(tbuilder.build());
-
- final Open obj = builder.build();
- if (versionValue != PCEP_VERSION) {
- // TODO: Should we move this check into the negotiator
- LOG.debug("Unsupported PCEP version {}", versionValue);
- return new UnknownObject(PCEPErrors.PCEP_VERSION_NOT_SUPPORTED, obj);
- }
-
- return obj;
- }
-
@Override
public void addTlv(final TlvsBuilder tbuilder, final Tlv tlv) {
+ super.addTlv(tbuilder, tlv);
final Tlvs2Builder statefulBuilder = new Tlvs2Builder();
if (tbuilder.getAugmentation(Tlvs2.class) != null) {
final Tlvs2 t = tbuilder.getAugmentation(Tlvs2.class);
if (t.getStateful() != null) {
statefulBuilder.setStateful(t.getStateful());
}
- if (t.getNodeIdentifier() != null) {
- statefulBuilder.setNodeIdentifier(t.getNodeIdentifier());
- }
}
final Tlvs1Builder cleanupBuilder = new Tlvs1Builder();
if (tbuilder.getAugmentation(Tlvs1.class) != null) {
cleanupBuilder.setLspCleanup(t.getLspCleanup());
}
}
- if (tlv instanceof OfList) {
- tbuilder.setOfList((OfList) tlv);
- } else if (tlv instanceof Stateful) {
+ if (tlv instanceof Stateful) {
statefulBuilder.setStateful((Stateful) tlv);
- } else if (tlv instanceof NodeIdentifier) {
- statefulBuilder.setNodeIdentifier((NodeIdentifier) tlv);
} else if (tlv instanceof LspCleanup) {
cleanupBuilder.setLspCleanup((LspCleanup) tlv);
}
}
@Override
- public byte[] serializeObject(final Object object) {
- if (!(object instanceof Open)) {
- throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed OpenObject.");
- }
- final Open open = (Open) object;
-
- final byte versionFlagMF = (byte) (PCEP_VERSION << (Byte.SIZE - VERSION_SF_LENGTH));
-
- final byte[] tlvs = serializeTlvs(open.getTlvs());
-
- 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] = UnsignedBytes.checkedCast(open.getKeepalive());
- bytes[DEAD_TIMER_OFFSET] = UnsignedBytes.checkedCast(open.getDeadTimer());
- bytes[SID_F_OFFSET] = UnsignedBytes.checkedCast(open.getSessionId());
- if (tlvs.length != 0) {
- ByteArray.copyWhole(tlvs, bytes, TLVS_OFFSET);
- }
- return ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), bytes);
- }
-
public byte[] serializeTlvs(final Tlvs tlvs) {
if (tlvs == null) {
return new byte[0];
}
+ super.serializeTlvs(tlvs);
int finalLength = 0;
- byte[] ofListBytes = null;
byte[] statefulBytes = null;
- byte[] nodeIdBytes = null;
byte[] cleanupBytes = null;
- if (tlvs.getOfList() != null) {
- ofListBytes = serializeTlv(tlvs.getOfList());
- finalLength += ofListBytes.length;
- }
if (tlvs.getAugmentation(Tlvs2.class) != null) {
final Tlvs2 statefulTlvs = tlvs.getAugmentation(Tlvs2.class);
if (statefulTlvs.getStateful() != null) {
statefulBytes = serializeTlv(statefulTlvs.getStateful());
finalLength += statefulBytes.length;
}
- if (statefulTlvs.getNodeIdentifier() != null) {
- nodeIdBytes = serializeTlv(statefulTlvs.getNodeIdentifier());
- finalLength += nodeIdBytes.length;
- }
}
if (tlvs.getAugmentation(Tlvs1.class) != null) {
final Tlvs1 cleanupTlv = tlvs.getAugmentation(Tlvs1.class);
int offset = 0;
final byte[] result = new byte[finalLength];
- if (ofListBytes != null) {
- ByteArray.copyWhole(ofListBytes, result, offset);
- offset += ofListBytes.length;
- }
if (statefulBytes != null) {
ByteArray.copyWhole(statefulBytes, result, offset);
offset += statefulBytes.length;
}
- if (nodeIdBytes != null) {
- ByteArray.copyWhole(nodeIdBytes, result, offset);
- offset += nodeIdBytes.length;
- }
if (cleanupBytes != null) {
ByteArray.copyWhole(cleanupBytes, result, offset);
offset += cleanupBytes.length;
}
return result;
}
-
- @Override
- public int getObjectType() {
- return TYPE;
- }
-
- @Override
- public int getObjectClass() {
- return CLASS;
- }
}
import java.util.BitSet;
+import org.opendaylight.protocol.pcep.ietf.stateful02.Stateful02StatefulCapabilityTlvParser;
import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
-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.crabbe.initiated._00.rev140113.Stateful1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.Stateful1Builder;
/**
* Parser for {@link Stateful}
*/
-public final class PCEStatefulCapabilityTlvParser implements TlvParser, TlvSerializer {
-
- public static final int TYPE = 16;
-
- private static final int FLAGS_F_LENGTH = 4;
+public final class PCEStatefulCapabilityTlvParser extends Stateful02StatefulCapabilityTlvParser {
private static final int I_FLAG_OFFSET = 29;
- private static final int S_FLAG_OFFSET = 30;
- private static final int U_FLAG_OFFSET = 31;
@Override
public Stateful parseTlv(final byte[] buffer) throws PCEPDeserializerException {
}
return ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH);
}
-
- @Override
- public int getType() {
- return TYPE;
- }
}
\ No newline at end of file
/**
* Parser for {@link LspDbVersion}
*/
-public class Stateful02LspDbVersionTlvParser implements TlvParser, TlvSerializer {
+public final class Stateful02LspDbVersionTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 23;
/**
* Parser for {@link Lsp}
*/
-public class Stateful02LspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilder> {
+public final class Stateful02LspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilder> {
public static final int CLASS = 32;
/**
* Parser for {@link SymbolicPathName}
*/
-public class Stateful02LspSymbolicNameTlvParser implements TlvParser, TlvSerializer {
+public final class Stateful02LspSymbolicNameTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 17;
/**
* Parser for {@link Lspa}
*/
-public class Stateful02LspaObjectParser extends PCEPLspaObjectParser {
+public final class Stateful02LspaObjectParser extends PCEPLspaObjectParser {
public Stateful02LspaObjectParser(final TlvHandlerRegistry tlvReg) {
super(tlvReg);
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.node.identifier.tlv.NodeIdentifierBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-public class Stateful02NodeIdentifierTlvParser implements TlvParser, TlvSerializer {
+public final class Stateful02NodeIdentifierTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 24;
import java.util.List;
-import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
+import org.opendaylight.protocol.pcep.impl.message.PCEPReplyMessageParser;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.PCEPErrors;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Replies1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Replies1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.lsp.object.Lsp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcrep;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrepBuilder;
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.Object;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.object.Of;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.PcrepMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.Replies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.RepliesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.Result;
/**
* Parser for {@link Pcrep}
*/
-public class Stateful02PCReplyMessageParser extends AbstractMessageParser {
-
- public static final int TYPE = 4;
+public final class Stateful02PCReplyMessageParser extends PCEPReplyMessageParser {
public Stateful02PCReplyMessageParser(final ObjectHandlerRegistry registry) {
super(registry);
}
@Override
- protected Pcrep validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
- if (objects == null) {
- throw new IllegalArgumentException("Passed list can't be null.");
- }
- if (objects.isEmpty()) {
- throw new PCEPDeserializerException("Pcrep message cannot be empty.");
- }
- final List<Replies> replies = Lists.newArrayList();
- while (!objects.isEmpty()) {
- final Replies r = this.getValidReply(objects, errors);
- if (r != null) {
- replies.add(r);
- }
- }
- if (!objects.isEmpty()) {
- throw new PCEPDeserializerException("Unprocessed Objects: " + objects);
- }
- return new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().setReplies(replies).build()).build();
- }
-
- private Replies getValidReply(final List<Object> objects, final List<Message> errors) {
+ protected Replies getValidReply(final List<Object> objects, final List<Message> errors) {
if (!(objects.get(0) instanceof Rp)) {
errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
return null;
final FailureCaseBuilder builder = new FailureCaseBuilder();
builder.setNoPath(noPath);
while (!objects.isEmpty()) {
- this.parseAttributes(builder, objects);
+ parseAttributes(builder, objects);
}
res = builder.build();
} else if (objects.get(0) instanceof Ero) {
final PathsBuilder pBuilder = new PathsBuilder();
pBuilder.setEro(ero);
while (!objects.isEmpty()) {
- this.parsePath(pBuilder, objects);
+ parsePath(pBuilder, objects);
paths.add(pBuilder.build());
}
builder.setPaths(paths);
}
return new RepliesBuilder().setRp(rp).addAugmentation(Replies1.class, new Replies1Builder().setLsp(lsp).build()).setResult(res).build();
}
-
- private void parseAttributes(final FailureCaseBuilder builder, final List<Object> objects) {
- final List<Metrics> pathMetrics = Lists.newArrayList();
-
- Object obj;
- State state = State.Init;
- while (!objects.isEmpty() && !state.equals(State.End)) {
- obj = objects.get(0);
-
- switch (state) {
- case Init:
- state = State.LspaIn;
- if (obj instanceof Lspa) {
- builder.setLspa((Lspa) obj);
- break;
- }
- case LspaIn:
- state = State.BandwidthIn;
- if (obj instanceof Bandwidth) {
- builder.setBandwidth((Bandwidth) obj);
- break;
- }
- case BandwidthIn:
- state = State.MetricIn;
- if (obj instanceof Metric) {
- pathMetrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
- state = State.MetricIn;
- break;
- }
- case MetricIn:
- state = State.IroIn;
- if (obj instanceof Iro) {
- builder.setIro((Iro) obj);
- break;
- }
- case IroIn:
- state = State.End;
- break;
- case End:
- break;
- }
- if (!state.equals(State.End)) {
- objects.remove(0);
- }
- }
- builder.setMetrics(pathMetrics);
- }
-
- private void parsePath(final PathsBuilder builder, final List<Object> objects) {
- final List<Metrics> pathMetrics = Lists.newArrayList();
-
- Object obj;
- State state = State.Init;
- while (!objects.isEmpty() && !state.equals(State.End)) {
- obj = objects.get(0);
-
- switch (state) {
- case Init:
- state = State.LspaIn;
- if (obj instanceof Lspa) {
- builder.setLspa((Lspa) obj);
- break;
- }
- case LspaIn:
- state = State.OfIn;
- if (obj instanceof Of) {
- builder.setOf((Of) obj);
- break;
- }
- case OfIn:
- state = State.BandwidthIn;
- if (obj instanceof Bandwidth) {
- builder.setBandwidth((Bandwidth) obj);
- break;
- }
- case BandwidthIn:
- state = State.MetricIn;
- if (obj instanceof Metric) {
- pathMetrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
- state = State.BandwidthIn;
- break;
- }
- case MetricIn:
- state = State.IroIn;
- if (obj instanceof Iro) {
- builder.setIro((Iro) obj);
- break;
- }
- case IroIn:
- state = State.End;
- break;
- case End:
- break;
- }
- if (!state.equals(State.End)) {
- objects.remove(0);
- }
- }
- builder.setMetrics(pathMetrics);
- }
-
- private enum State {
- Init, LspaIn, OfIn, BandwidthIn, MetricIn, IroIn, End
- }
-
- @Override
- public int getMessageType() {
- return TYPE;
- }
}
/**
* Parser for {@link Pcrpt}
*/
-public class Stateful02PCReportMessageParser extends AbstractMessageParser {
+public final class Stateful02PCReportMessageParser extends AbstractMessageParser {
public static final int TYPE = 10;
import java.util.List;
-import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
+import org.opendaylight.protocol.pcep.impl.message.PCEPRequestMessageParser;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.PCEPErrors;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.P2p1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.P2p1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.lsp.object.Lsp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcreq;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcreqBuilder;
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.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.classtype.object.ClassType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObj;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.Xro;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.gc.object.Gc;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.load.balancing.object.LoadBalancing;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.object.Of;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.PathKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.PcreqMessage;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.PcreqMessageBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Requests;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Svec;
-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.PathKeyExpansionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.SegmentComputation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.SegmentComputationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.P2p;
/**
* Parser for {@link Pcreq}
*/
-public class Stateful02PCRequestMessageParser extends AbstractMessageParser {
-
- public static final int TYPE = 3;
+public final class Stateful02PCRequestMessageParser extends PCEPRequestMessageParser {
public Stateful02PCRequestMessageParser(final ObjectHandlerRegistry registry) {
super(registry);
}
@Override
- public void serializeMessage(final Message message, final ByteBuf buffer) {
- if (!(message instanceof Pcreq)) {
- throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass()
- + ". Needed PcrepMessage.");
- }
- final PcreqMessage msg = ((Pcreq) message).getPcreqMessage();
- if (msg.getRequests() == null || msg.getRequests().isEmpty()) {
- throw new IllegalArgumentException("Requests cannot be null or empty.");
- }
- for (final Requests req : msg.getRequests()) {
- buffer.writeBytes(serializeObject(req.getRp()));
- if (req.getPathKeyExpansion() != null) {
- buffer.writeBytes(serializeObject(req.getPathKeyExpansion().getPathKey()));
- }
- if (req.getSegmentComputation() != null) {
- final SegmentComputation sc = req.getSegmentComputation();
- if (sc.getP2p() != null) {
- serializeP2P(buffer, sc.getP2p());
- }
- }
- }
- if (msg.getSvec() != null) {
- for (final Svec s : msg.getSvec()) {
- buffer.writeBytes(serializeObject(s.getSvec()));
- if (s.getOf() != null) {
- buffer.writeBytes(serializeObject(s.getOf()));
- }
- if (s.getGc() != null) {
- buffer.writeBytes(serializeObject(s.getGc()));
- }
- if (s.getXro() != null) {
- buffer.writeBytes(serializeObject(s.getXro()));
- }
- if (s.getMetric() != null) {
- for (final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.Metric m : s.getMetric()) {
- buffer.writeBytes(serializeObject(m.getMetric()));
- }
- }
- }
- }
- }
-
- private void serializeP2P(final ByteBuf buffer, final P2p p2p) {
+ protected void serializeP2P(final ByteBuf buffer, final P2p p2p) {
if (p2p.getEndpointsObj() != null) {
buffer.writeBytes(serializeObject(p2p.getEndpointsObj()));
}
}
@Override
- protected Message validate(
- final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object> objects,
- final List<Message> errors) throws PCEPDeserializerException {
- if (objects == null) {
- throw new IllegalArgumentException("Passed list can't be null.");
- }
-
- final List<Requests> requests = Lists.newArrayList();
- final List<Svec> svecList = Lists.newArrayList();
- while (!objects.isEmpty()) {
- final RequestsBuilder rBuilder = new RequestsBuilder();
- Rp rpObj = null;
- if (objects.get(0) instanceof Rp) {
- rpObj = (Rp) objects.get(0);
- objects.remove(0);
- if (!rpObj.isProcessingRule()) {
- errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
- } else {
- rBuilder.setRp(rpObj);
- }
- } else {
- // if RP obj is missing return error only
- errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
- return null;
- }
-
- // expansion
- if (rpObj.isPathKey()) {
- if (objects.get(0) instanceof PathKey) {
- rBuilder.setPathKeyExpansion(new PathKeyExpansionBuilder().setPathKey((PathKey) objects.get(0)).build());
- }
- continue;
- }
-
- final P2pBuilder p2pBuilder = new P2pBuilder();
-
- if (objects.get(0) instanceof EndpointsObj) {
- final EndpointsObj ep = (EndpointsObj) objects.get(0);
- objects.remove(0);
- if (!ep.isProcessingRule()) {
- errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rpObj));
- } else {
- p2pBuilder.setEndpointsObj(ep);
- }
- } else {
- errors.add(createErrorMsg(PCEPErrors.END_POINTS_MISSING, rpObj));
- return null;
- }
- // p2p
- if (!rpObj.isP2mp()) {
- final SegmentComputation segm = getSegmentComputation(p2pBuilder, objects, errors, rpObj);
- if (segm != null) {
- rBuilder.setSegmentComputation(segm);
- }
- }
- while (!objects.isEmpty()) {
- final SvecBuilder sBuilder = new SvecBuilder();
- final Svec svecComp = getValidSvec(sBuilder, objects);
- if (svecComp == null) {
- break;
- }
- svecList.add(svecComp);
- }
- requests.add(rBuilder.build());
- }
-
- final PcreqMessageBuilder mBuilder = new PcreqMessageBuilder();
- mBuilder.setRequests(requests);
- if (!svecList.isEmpty()) {
- mBuilder.setSvec(svecList);
- }
- return new PcreqBuilder().setPcreqMessage(mBuilder.build()).build();
- }
-
- private SegmentComputation getSegmentComputation(final P2pBuilder builder, final List<Object> objects, final List<Message> errors,
+ protected SegmentComputation getSegmentComputation(final P2pBuilder builder, final List<Object> objects, final List<Message> errors,
final Rp rp) {
final List<Metrics> metrics = Lists.newArrayList();
private enum State {
Init, LspIn, ReportedIn, LoadBIn, LspaIn, BandwidthIn, MetricIn, IroIn, RroIn, XroIn, OfIn, CtIn, End
}
-
- private Svec getValidSvec(final SvecBuilder builder, final List<Object> objects) {
- if (objects == null || objects.isEmpty()) {
- throw new IllegalArgumentException("List cannot be null or empty.");
- }
-
- if (objects.get(0) instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.svec.object.Svec) {
- builder.setSvec((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.svec.object.Svec) objects.get(0));
- objects.remove(0);
- } else {
- return null;
- }
-
- final List<Metrics> metrics = Lists.newArrayList();
-
- Object obj = null;
- SvecState state = SvecState.Init;
- while (!objects.isEmpty() && !state.equals(SvecState.End)) {
- obj = objects.get(0);
-
- switch (state) {
- case Init:
- state = SvecState.OfIn;
- if (obj instanceof Of) {
- builder.setOf((Of) obj);
- break;
- }
- case OfIn:
- state = SvecState.GcIn;
- if (obj instanceof Gc) {
- builder.setGc((Gc) obj);
- break;
- }
- case GcIn:
- state = SvecState.XroIn;
- if (obj instanceof Xro) {
- builder.setXro((Xro) obj);
- break;
- }
- case XroIn:
- state = SvecState.MetricIn;
- if (obj instanceof Metric) {
- metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
- state = SvecState.XroIn;
- break;
- }
- case MetricIn:
- state = SvecState.End;
- break;
- case End:
- break;
- }
- if (!state.equals(SvecState.End)) {
- objects.remove(0);
- }
- }
- return builder.build();
- }
-
- private enum SvecState {
- Init, OfIn, GcIn, XroIn, MetricIn, End
- }
-
- @Override
- public int getMessageType() {
- return TYPE;
- }
}
/**
* Parser for {@link Pcupd}
*/
-public class Stateful02PCUpdateRequestMessageParser extends AbstractMessageParser {
+public final class Stateful02PCUpdateRequestMessageParser extends AbstractMessageParser {
public static final int TYPE = 11;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.stateful.capability.tlv.StatefulBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
-public final class Stateful02StatefulCapabilityTlvParser implements TlvParser, TlvSerializer {
+public class Stateful02StatefulCapabilityTlvParser implements TlvParser, TlvSerializer {
public static final int TYPE = 16;
- private static final int FLAGS_F_LENGTH = 4;
+ protected static final int FLAGS_F_LENGTH = 4;
- private static final int S_FLAG_OFFSET = 30;
- private static final int U_FLAG_OFFSET = 31;
+ protected static final int S_FLAG_OFFSET = 30;
+ protected static final int U_FLAG_OFFSET = 31;
@Override
public Stateful parseTlv(final byte[] buffer) throws PCEPDeserializerException {
builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
Tlvs2.class, statBuilder.build()).addAugmentation(Tlvs1.class, cleanupBuilder.build()).build());
- // FIXME: fix inititated stateful
- // assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
- // ByteArray.cutBytes(result, 4)));
- // assertArrayEquals(result, parser.serializeObject(builder.build()));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
+ assertArrayEquals(result, parser.serializeObject(builder.build()));
}
@Test
return new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().setReplies(replies).build()).build();
}
- private Replies getValidReply(final List<Object> objects, final List<Message> errors) {
+ protected Replies getValidReply(final List<Object> objects, final List<Message> errors) {
if (!(objects.get(0) instanceof Rp)) {
errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
return null;
return new RepliesBuilder().setRp(rp).setResult(res).build();
}
- private void parseAttributes(final FailureCaseBuilder builder, final List<Object> objects) {
+ protected void parseAttributes(final FailureCaseBuilder builder, final List<Object> objects) {
final List<Metrics> pathMetrics = Lists.newArrayList();
Object obj;
builder.setMetrics(pathMetrics);
}
- private void parsePath(final PathsBuilder builder, final List<Object> objects) {
+ protected void parsePath(final PathsBuilder builder, final List<Object> objects) {
final List<Metrics> pathMetrics = Lists.newArrayList();
Object obj;
}
}
- private void serializeP2P(final ByteBuf buffer, final P2p p2p) {
+ protected void serializeP2P(final ByteBuf buffer, final P2p p2p) {
if (p2p.getEndpointsObj() != null) {
buffer.writeBytes(serializeObject(p2p.getEndpointsObj()));
}
return new PcreqBuilder().setPcreqMessage(mBuilder.build()).build();
}
- private SegmentComputation getSegmentComputation(final P2pBuilder builder, final List<Object> objects, final List<Message> errors,
+ protected SegmentComputation getSegmentComputation(final P2pBuilder builder, final List<Object> objects, final List<Message> errors,
final Rp rp) {
final List<Metrics> metrics = Lists.newArrayList();