package org.opendaylight.protocol.pcep.segment.routing02;
import org.opendaylight.protocol.pcep.spi.PCEPErrors;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp.setup.type._01.rev140507.PathSetupTypeTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp.setup.type._01.rev140507.Tlvs5;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp.setup.type._01.rev140507.Tlvs5Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp.setup.type._01.rev140507.path.setup.type.tlv.PathSetupTypeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing._02.rev140506.SrEroSubobject;
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.explicit.route.object.ero.Subobject;
}
protected static PCEPErrors validateSrEroSubobjects(final Ero ero) {
- if (ero.getSubobject() == null || ero.getSubobject().isEmpty()) {
- return null;
- }
- for (final Subobject subobject : ero.getSubobject()) {
- if (!(subobject.getSubobjectType() instanceof SrEroSubobject)) {
- return PCEPErrors.NON_IDENTICAL_ERO_SUBOBJECTS;
- }
- final SrEroSubobject srEroSubobject = (SrEroSubobject) subobject.getSubobjectType();
- if (srEroSubobject.getFlags().isM() && srEroSubobject.getSid() < MPLS_LABEL_MIN_VALUE) {
- return PCEPErrors.BAD_LABEL_VALUE;
+ if (ero.getSubobject() != null && !ero.getSubobject().isEmpty()) {
+ for (final Subobject subobject : ero.getSubobject()) {
+ if (!(subobject.getSubobjectType() instanceof SrEroSubobject)) {
+ return PCEPErrors.NON_IDENTICAL_ERO_SUBOBJECTS;
+ }
+ final SrEroSubobject srEroSubobject = (SrEroSubobject) subobject.getSubobjectType();
+ if (srEroSubobject.getFlags().isM() && srEroSubobject.getSid() < MPLS_LABEL_MIN_VALUE) {
+ return PCEPErrors.BAD_LABEL_VALUE;
+ }
}
}
return null;
return false;
}
+ protected static boolean isSegmentRoutingPath(final Ero ero) {
+ if (ero != null && ero.getSubobject() != null && !ero.getSubobject().isEmpty()) {
+ for (final Subobject subobject : ero.getSubobject()) {
+ if (!(subobject.getSubobjectType() instanceof SrEroSubobject)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ protected static Srp addSRPathSetupTypeTlv(final Srp srp) {
+ return new SrpBuilder(srp).setTlvs(new TlvsBuilder(srp.getTlvs()).addAugmentation(Tlvs5.class,
+ new Tlvs5Builder().setPathSetupType(new PathSetupTypeBuilder().setPst(true).build()).build()).build()).build();
+ }
+
}
@Override
protected void serializeRequest(Requests req, ByteBuf buffer) {
- if (isSegmentRoutingPath(req.getSrp())) {
- serializeObject(req.getSrp(), buffer);
+ if (SrEroUtil.isSegmentRoutingPath(req.getEro())) {
+ serializeObject(SrEroUtil.addSRPathSetupTypeTlv(req.getSrp()), buffer);
if (req.getLsp() != null) {
serializeObject(req.getLsp(), buffer);
}
- final Ero srEro = req.getEro();
- if (srEro != null) {
- serializeObject(srEro, buffer);
- }
+ serializeObject(req.getEro(), buffer);
} else {
super.serializeRequest(req, buffer);
}
@Override
protected void serializeReport(Reports report, ByteBuf buffer) {
- if (isSegmentRoutingPath(report.getSrp())) {
- serializeObject(report.getSrp(), buffer);
+ if (report.getPath() != null && SrEroUtil.isSegmentRoutingPath(report.getPath().getEro())) {
+ serializeObject(SrEroUtil.addSRPathSetupTypeTlv(report.getSrp()), buffer);
serializeObject(report.getLsp(), buffer);
- final Ero srEro = report.getPath().getEro();
- if (srEro != null) {
- serializeObject(srEro, buffer);
- }
+ serializeObject(report.getPath().getEro(), buffer);
} else {
super.serializeReport(report, buffer);
}
@Override
protected void serializeUpdate(Updates update, ByteBuf buffer) {
- if (isSegmentRoutingPath(update.getSrp())) {
- serializeObject(update.getSrp(), buffer);
+ if (update.getPath() != null && SrEroUtil.isSegmentRoutingPath(update.getPath().getEro())) {
+ serializeObject(SrEroUtil.addSRPathSetupTypeTlv(update.getSrp()), buffer);
if (update.getLsp() != null) {
serializeObject(update.getLsp(), buffer);
}
- final Ero srEro = update.getPath().getEro();
- if (srEro != null) {
- serializeObject(srEro, buffer);
- }
+ serializeObject(update.getPath().getEro(), buffer);
} else {
super.serializeUpdate(update, buffer);
}