SVEC object flags 19/77819/10
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Tue, 13 Nov 2018 07:23:45 +0000 (08:23 +0100)
committerRobert Varga <nite@hq.sk>
Sun, 9 Dec 2018 19:00:58 +0000 (19:00 +0000)
https://tools.ietf.org/html/rfc8306#section-3.12

JIRA: BGPCEP-406
Change-Id: I4a37a79c415e845d984c81707a5a5393423080d9
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
pcep/api/src/main/yang/pcep-types.yang
pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/object/PCEPSvecObjectParser.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java

index 51b549c96d8dd8d3efbb446bd151278c388a8a80..c31977d98004cfc530ee237a953328226de813b5 100644 (file)
@@ -717,6 +717,16 @@ module pcep-types {
                 default false;
             }
 
+            leaf partial-path-diverse {
+                type boolean;
+                default false;
+            }
+
+            leaf link-direction-diverse {
+                type boolean;
+                default false;
+            }
+
             leaf-list requests-ids {
                 type request-id;
             }
index ef97f7e67a298615f50882b4b55e579b3c5ce40c..a65e7a5f01d899ad9762f852a81c1077935690fd 100644 (file)
@@ -46,6 +46,8 @@ public final class PCEPSvecObjectParser extends CommonObjectParser implements Ob
     /*
      * flags offsets inside flags field in bits
      */
+    private static final int P_FLAG_OFFSET = 19;
+    private static final int D_FLAG_OFFSET = 20;
     private static final int S_FLAG_OFFSET = 21;
     private static final int N_FLAG_OFFSET = 22;
     private static final int L_FLAG_OFFSET = 23;
@@ -61,10 +63,11 @@ public final class PCEPSvecObjectParser extends CommonObjectParser implements Ob
 
     @Override
     public Svec parseObject(final ObjectHeader header, final ByteBuf bytes) throws PCEPDeserializerException {
-        Preconditions.checkArgument(bytes != null && bytes.isReadable(), "Array of bytes is mandatory. Can't be null or empty.");
+        Preconditions.checkArgument(bytes != null && bytes.isReadable(),
+            "Array of bytes is mandatory. Can't be null or empty.");
         if (bytes.readableBytes() < MIN_SIZE) {
-            throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + bytes.readableBytes() + "; Expected: >="
-                    + MIN_SIZE + ".");
+            throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: "
+                + bytes.readableBytes() + "; Expected: >=" + MIN_SIZE + ".");
         }
         bytes.skipBytes(FLAGS_F_OFFSET);
         final BitArray flags = BitArray.valueOf(bytes, FLAGS_SIZE);
@@ -84,13 +87,16 @@ public final class PCEPSvecObjectParser extends CommonObjectParser implements Ob
         builder.setLinkDiverse(flags.get(L_FLAG_OFFSET));
         builder.setNodeDiverse(flags.get(N_FLAG_OFFSET));
         builder.setSrlgDiverse(flags.get(S_FLAG_OFFSET));
+        builder.setLinkDirectionDiverse(flags.get(D_FLAG_OFFSET));
+        builder.setPartialPathDiverse(flags.get(P_FLAG_OFFSET));
         builder.setRequestsIds(requestIDs);
         return builder.build();
     }
 
     @Override
     public void serializeObject(final Object object, final ByteBuf buffer) {
-        Preconditions.checkArgument(object instanceof Svec, "Wrong instance of PCEPObject. Passed %s. Needed SvecObject.", object.getClass());
+        Preconditions.checkArgument(object instanceof Svec,
+            "Wrong instance of PCEPObject. Passed %s. Needed SvecObject.", object.getClass());
         final Svec svecObj = (Svec) object;
         final ByteBuf body = Unpooled.buffer();
         body.writeZero(FLAGS_F_OFFSET);
@@ -98,11 +104,13 @@ public final class PCEPSvecObjectParser extends CommonObjectParser implements Ob
         flags.set(L_FLAG_OFFSET, svecObj.isLinkDiverse());
         flags.set(N_FLAG_OFFSET, svecObj.isNodeDiverse());
         flags.set(S_FLAG_OFFSET, svecObj.isSrlgDiverse());
+        flags.set(D_FLAG_OFFSET, svecObj.isLinkDirectionDiverse());
+        flags.set(P_FLAG_OFFSET, svecObj.isPartialPathDiverse());
         flags.toByteBuf(body);
 
         final List<RequestId> requestIDs = svecObj.getRequestsIds();
         assert !(requestIDs.isEmpty()) : "Empty Svec Object - no request ids.";
-        for(final RequestId requestId : requestIDs) {
+        for (final RequestId requestId : requestIDs) {
             writeUnsignedInt(requestId.getValue(), body);
         }
         ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
index 2058ab89b2222ad05518c3d6f0e4b2390fbfe8d8..868e13340b1b368a9fc1f606810e2617f9d11db8 100644 (file)
@@ -184,9 +184,11 @@ public class PCEPObjectParserTest {
         builder.setDeadTimer((short) 120);
         builder.setSessionId((short) 1);
 
-        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder().build());
+        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
+            .object.open.TlvsBuilder().build());
 
-        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
         final ByteBuf buf = Unpooled.buffer();
         parser.serializeObject(builder.build(), buf);
         assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
@@ -214,9 +216,11 @@ public class PCEPObjectParserTest {
         builder.setProcessingRule(false);
         builder.setIgnore(false);
         builder.setReason((short) 5);
-        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.c.close.TlvsBuilder().build());
+        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close
+            .object.c.close.TlvsBuilder().build());
 
-        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
         final ByteBuf buf = Unpooled.buffer();
         parser.serializeObject(builder.build(), buf);
         assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
@@ -915,9 +919,12 @@ public class PCEPObjectParserTest {
         builder.setLinkDiverse(false);
         builder.setNodeDiverse(false);
         builder.setSrlgDiverse(false);
+        builder.setPartialPathDiverse(false);
+        builder.setLinkDirectionDiverse(false);
         builder.setRequestsIds(Lists.newArrayList(new RequestId(0xFFL)));
 
-        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
         ByteBuf buf = Unpooled.buffer();
         parser.serializeObject(builder.build(), buf);
         assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
@@ -942,7 +949,8 @@ public class PCEPObjectParserTest {
 
         builder.setRequestsIds(requestIDs);
 
-        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false),
+            result.slice(4, result.readableBytes() - 4)));
         buf = Unpooled.buffer();
         parser.serializeObject(builder.build(), buf);
         assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
@@ -1299,10 +1307,12 @@ public class PCEPObjectParserTest {
             0x7f, 0x00, 0x00, 0x01
         };
         final PCEPPceIdIPv4ObjectParser parser = new PCEPPceIdIPv4ObjectParser();
-        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId pceId = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object
+            .PceId pceId = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
                 new Ipv4AddressNoZone("127.0.0.1"))).build();
         final ByteBuf result = Unpooled.wrappedBuffer(pccIdReqBytes);
-        assertEquals(pceId, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(pceId, parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
 
         final ByteBuf buf = Unpooled.buffer(pccIdReqBytes.length);
         parser.serializeObject(pceId, buf);
@@ -1321,10 +1331,12 @@ public class PCEPObjectParserTest {
             0x00, 0x00, 0x00, 0x01
         };
         final PCEPPceIdIPv6ObjectParser parser = new PCEPPceIdIPv6ObjectParser();
-        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId pccIdReq = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object
+            .PceId pccIdReq = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
                 new Ipv6AddressNoZone("::1"))).build();
         final ByteBuf result = Unpooled.wrappedBuffer(pccIdReqBytes);
-        assertEquals(pccIdReq, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(pccIdReq, parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
 
         final ByteBuf buf = Unpooled.buffer(pccIdReqBytes.length);
         parser.serializeObject(pccIdReq, buf);
@@ -1376,7 +1388,8 @@ public class PCEPObjectParserTest {
         final PCEPOverloadObjectParser parser = new PCEPOverloadObjectParser();
         final Overload overload = new OverloadBuilder().setDuration(120).build();
         final ByteBuf result = Unpooled.wrappedBuffer(overloadBytes);
-        assertEquals(overload, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(overload, parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
 
         final ByteBuf buf = Unpooled.buffer(overloadBytes.length);
         parser.serializeObject(overload, buf);
@@ -1391,7 +1404,8 @@ public class PCEPObjectParserTest {
             /* pst-tlv */
             0x0, 0x1C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0 };
 
-        final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry, this.viTlvRegistry);
+        final PCEPRequestParameterObjectParser parser
+            = new PCEPRequestParameterObjectParser(this.tlvRegistry, this.viTlvRegistry);
         final RpBuilder builder = new RpBuilder();
         builder.setProcessingRule(false);
         builder.setIgnore(false);
@@ -1407,12 +1421,12 @@ public class PCEPObjectParserTest {
         builder.setEroCompression(false);
         builder.setPriority((short) 5);
         builder.setRequestId(new RequestId(0xdeadbeefL));
-        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.rp.TlvsBuilder().setPathSetupType(
-                new PathSetupTypeBuilder().setPst((short) 0).build()).build());
+        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp
+            .object.rp.TlvsBuilder().setPathSetupType(new PathSetupTypeBuilder().setPst((short) 0).build()).build());
 
         final ByteBuf result = Unpooled.wrappedBuffer(rpObjectWithPstTlvBytes);
-        assertEquals(builder.build(),
-                parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+        assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+            result.slice(4, result.readableBytes() - 4)));
         final ByteBuf buf = Unpooled.buffer();
         parser.serializeObject(builder.build(), buf);
         assertArrayEquals(rpObjectWithPstTlvBytes, ByteArray.getAllBytes(buf));
index aab1e3f2ca504f147908edc282ab8523dea020b3..bedc683f71e05524c71df839656773c6302065b8 100644 (file)
@@ -278,6 +278,8 @@ public class PCEPValidatorTest {
         sBuilder.setLinkDiverse(false);
         sBuilder.setNodeDiverse(false);
         sBuilder.setSrlgDiverse(false);
+        sBuilder.setLinkDirectionDiverse(false);
+        sBuilder.setPartialPathDiverse(false);
         sBuilder.setRequestsIds(Lists.newArrayList(new RequestId(1L)));
         this.svec = sBuilder.build();