<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:sr:cfg">prefix:pcep-parser-segment-routing</type>
<name>pcep-parser-segment-routing</name>
+ <!-- Proposed code point for SR-ERO/RRO subobject by draft (=36) https://tools.ietf.org/html/draft-ietf-pce-segment-routing-06.
+ to preserve (TYPE = 5/6) assigned type set the value to false or remove (false by default) or set true to use proposed ones
+ <iana-sr-subobjects-type>true</iana-sr-subobjects-type>-->
</module>
<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:sr:cfg">prefix:pcep-segment-routing-capability</type>
@Override
public java.lang.AutoCloseable createInstance() {
- return new SegmentRoutingActivator();
+ return new SegmentRoutingActivator(getIanaSrSubobjectsType());
}
}
public class SegmentRoutingActivator extends AbstractPCEPExtensionProviderActivator {
+ private final boolean ianaSrSubobjectsType;
+
+ public SegmentRoutingActivator() {
+ this.ianaSrSubobjectsType = false;
+ }
+
+ public SegmentRoutingActivator(final boolean ianaSrSubobjectsType) {
+ this.ianaSrSubobjectsType = ianaSrSubobjectsType;
+ }
+
@Override
protected List<AutoCloseable> startImpl(final PCEPExtensionProviderContext context) {
final List<AutoCloseable> regs = Lists.newArrayList();
regs.add(context.registerTlvSerializer(SrPceCapability.class, new SrPceCapabilityTlvParser()));
/* Subobjects */
- final SrEroSubobjectParser srEroSubobjectParser = new SrEroSubobjectParser();
- regs.add(context.registerEROSubobjectParser(SrEroSubobjectParser.TYPE, srEroSubobjectParser));
+ final SrEroSubobjectParser srEroSubobjectParser = new SrEroSubobjectParser(this.ianaSrSubobjectsType);
+ regs.add(context.registerEROSubobjectParser(srEroSubobjectParser.getCodePoint(), srEroSubobjectParser));
regs.add(context.registerEROSubobjectSerializer(
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.network.topology.topology.node.path.computation.client.reported.lsp.path.ero.subobject.subobject.type.SrEroType.class,
srEroSubobjectParser));
srEroSubobjectParser));
regs.add(context.registerEROSubobjectSerializer(SrEroType.class, srEroSubobjectParser));
- final SrRroSubobjectParser srRroSubobjectParser = new SrRroSubobjectParser();
- regs.add(context.registerRROSubobjectParser(SrRroSubobjectParser.TYPE, srRroSubobjectParser));
+ final SrRroSubobjectParser srRroSubobjectParser = new SrRroSubobjectParser(this.ianaSrSubobjectsType);
+ regs.add(context.registerRROSubobjectParser(srRroSubobjectParser.getCodePoint(), srRroSubobjectParser));
regs.add(context.registerRROSubobjectSerializer(
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.network.topology.topology.node.path.computation.client.reported.lsp.path.rro.subobject.subobject.type.SrRroType.class,
srRroSubobjectParser));
package org.opendaylight.protocol.pcep.segment.routing;
import com.google.common.base.Preconditions;
-
import io.netty.buffer.ByteBuf;
-
import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
import org.opendaylight.protocol.pcep.spi.EROSubobjectUtil;
public class SrEroSubobjectParser extends AbstractSrSubobjectParser implements EROSubobjectParser, EROSubobjectSerializer {
- public static final int TYPE = 5;
+ private static final int LEGACY_TYPE = 5;
+ private static final int PROPOSED_TYPE = 36;
+
+ private final int type;
+
+ SrEroSubobjectParser(final boolean isIanaAssignedType) {
+ this.type = (isIanaAssignedType) ? PROPOSED_TYPE : LEGACY_TYPE;
+ }
@Override
public void serializeSubobject(final Subobject subobject, final ByteBuf buffer) {
final SrSubobject srSubobject = (SrSubobject) subobject.getSubobjectType();
final ByteBuf body = serializeSubobject(srSubobject);
- EROSubobjectUtil.formatSubobject(TYPE, subobject.isLoose(), body, buffer);
+ EROSubobjectUtil.formatSubobject(type, subobject.isLoose(), body, buffer);
}
@Override
subobjectBuilder.setSubobjectType(srEroSubobjectBuilder.build());
return subobjectBuilder.build();
}
+
+ public int getCodePoint() {
+ return this.type;
+ }
}
\ No newline at end of file
public class SrRroSubobjectParser extends AbstractSrSubobjectParser implements RROSubobjectParser, RROSubobjectSerializer {
- public static final int TYPE = 6;
+ private static final int LEGACY_TYPE = 6;
+ private static final int PROPOSED_TYPE = 36;
+ private final int type;
+
+ SrRroSubobjectParser(final boolean isIanaAssignedType) {
+ this.type = (isIanaAssignedType) ? PROPOSED_TYPE : LEGACY_TYPE;
+ }
@Override
public void serializeSubobject(Subobject subobject, ByteBuf buffer) {
Preconditions.checkArgument(subobject.getSubobjectType() instanceof SrSubobject,
.getClass());
final SrSubobject srSubobject = (SrSubobject) subobject.getSubobjectType();
final ByteBuf body = serializeSubobject(srSubobject);
- RROSubobjectUtil.formatSubobject(TYPE, body, buffer);
+ RROSubobjectUtil.formatSubobject(type, body, buffer);
}
@Override
subobjectBuilder.setSubobjectType(srRroSubobjectBuilder.build());
return subobjectBuilder.build();
}
+
+ public int getCodePoint() {
+ return this.type;
+ }
}
augment "/config:modules/config:module/config:configuration" {
case pcep-parser-segment-routing {
when "/config:modules/config:module/config:type = 'pcep-parser-segment-routing'";
+ leaf iana-sr-subobjects-type {
+ description "If false (default) SR-ERO type (=5) and SR-RRO type (=6) is used,
+ else proposed type (36) is used for parsing/serialization";
+ type boolean;
+ default false;
+ }
}
}
private SimplePCEPExtensionProviderContext ctx;
private SegmentRoutingActivator act;
+ private SrEroSubobjectParser parser;
@Before
public void setUp() {
this.ctx = new SimplePCEPExtensionProviderContext();
this.act = new SegmentRoutingActivator();
this.act.start(this.ctx);
+ final boolean isIanaAssignedType = false;
+ parser = new SrEroSubobjectParser(isIanaAssignedType);
}
@Test
public void testSrEroSubobjectIpv4NodeIdNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectIpv6NodeIdNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv6NodeId);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectIpv4AdjacencyNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv4Adjacency);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectIpv6AdjacencyNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv6Adjacency);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectUnnumberedNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Unnumbered);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectWithoutNAI() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setSid(123456L);
@Test
public void testSrEroSubobjectWithoutBody() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setCFlag(false);
@Test
public void testSrEroSubobjectIpv4NodeIdNAIMFlag() throws PCEPDeserializerException {
- final SrEroSubobjectParser parser = new SrEroSubobjectParser();
final SrEroTypeBuilder builder = new SrEroTypeBuilder();
builder.setCFlag(false);
builder.setMFlag(true);
private SimplePCEPExtensionProviderContext ctx;
private SegmentRoutingActivator act;
+ private boolean isIanaAssignedType;
+ private SrRroSubobjectParser parser;
@Before
public void setUp() {
this.ctx = new SimplePCEPExtensionProviderContext();
this.act = new SegmentRoutingActivator();
this.act.start(this.ctx);
+ isIanaAssignedType = false;
+ parser = new SrRroSubobjectParser(isIanaAssignedType);
}
@Test
public void testSrRroSubobjectIpv4NodeIdNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setSid(123456L);
@Test
public void testSrRroSubobjectIpv6NodeIdNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv6NodeId);
builder.setCFlag(false);
@Test
public void testSrRroSubobjectIpv4AdjacencyNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv4Adjacency);
builder.setSid(123456L);
@Test
public void testSrRroSubobjectIpv6AdjacencyNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv6Adjacency);
builder.setSid(123456L);
@Test
public void testSrRroSubobjectUnnumberedNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Unnumbered);
builder.setSid(123456L);
@Test
public void testSrRroSubobjectWithoutNAI() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setSid(123470L);
@Test
public void testSrRroSubobjectWithoutBody() throws PCEPDeserializerException {
- final SrRroSubobjectParser parser = new SrRroSubobjectParser();
final SrRroTypeBuilder builder = new SrRroTypeBuilder();
builder.setSidType(SidType.Ipv4NodeId);
builder.setCFlag(false);