Bumped initiated draft to draft-ietf-pce-pce-initiated-lsp-00. 00/4400/1
authorDana Kutenicsova <dkutenic@cisco.com>
Sun, 19 Jan 2014 14:12:38 +0000 (15:12 +0100)
committerDana Kutenicsova <dkutenic@cisco.com>
Sun, 19 Jan 2014 14:13:20 +0000 (15:13 +0100)
Change-Id: I0882741b7e8b5a95479aa687d203409cf8562109
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
pcep/api/src/main/yang/pcep-crabbe-initiated.yang
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPLspObjectParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPSrpObjectParser.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
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrorMapping.java
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrors.java

index 539dbe187c99400eb57f92749a9cdaec7f41d1ff..4f691f7a0bf9386b2ce23f0f4a89c9db4d21cd70 100644 (file)
@@ -12,7 +12,7 @@ module pcep-crabbe-initiated {
 
        description
                "This module contains the data model of PCEP extensions defined
-               in draft-crabbe-pce-initiated-pce.
+               in draft-ietf-pce-pce-initiated-lsp.
 
                Copyright (c)2013 Cisco Systems, Inc. All rights reserved.
 
@@ -24,7 +24,7 @@ module pcep-crabbe-initiated {
        revision "2013-11-26" {
                description
                        "Initial revision.";
-               reference "https://tools.ietf.org/html/draft-crabbe-pce-pce-initiated-lsp-02";
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00";
        }
 
        grouping pcinitiate-message {
@@ -32,7 +32,7 @@ module pcep-crabbe-initiated {
 
                container pcinitiate-message {
                        description "LSP Initiate Message";
-                       reference "https://tools.ietf.org/html/draft-crabbe-pce-pce-initiated-lsp-02#section-5.1";
+                       reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-5.1";
 
                        uses pcep:message-header;
 
@@ -50,7 +50,40 @@ module pcep-crabbe-initiated {
                }
        }
 
+       augment "/stateful:pcupd/stateful:pcupd-message/stateful:updates/stateful:srp" {
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-5.2";
+               leaf remove {
+                       type boolean;
+                       default false;
+               }
+       }
+
+       augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:srp" {
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-5.2";
+               leaf remove {
+                       type boolean;
+                       default false;
+               }
+       }
+
+       augment "/stateful:pcupd/stateful:pcupd-message/stateful:updates/stateful:lsp" {
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-5.3.1";
+               leaf create {
+                       type boolean;
+                       default false;
+               }
+       }
+
+       augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:lsp" {
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-5.3.1";
+               leaf create {
+                       type boolean;
+                       default false;
+               }
+       }
+
        augment "/msg:open/msg:open-message/msg:open/msg:tlvs/msg:stateful" {
+               reference "http://tools.ietf.org/html/draft-ietf-pce-pce-initiated-lsp-00#section-4.1";
                leaf initiation {
                        type boolean;
                        default false;
@@ -61,4 +94,3 @@ module pcep-crabbe-initiated {
                uses pcinitiate-message;
        }
 }
-
index 89b6ad76f7f5a76369dcdabdb5abf7b3ae81e370..e735bd3d59597747bb6d7bc464e2a9e4ac6a62d8 100644 (file)
@@ -12,6 +12,8 @@ import java.util.BitSet;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 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.crabbe.initiated.rev131126.Lsp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCode;
@@ -49,6 +51,7 @@ public class PCEPLspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilde
        private static final int REMOVE_FLAG_OFFSET = 13;
        private static final int ADMINISTRATIVE_FLAG_OFFSET = 12;
        private static final int OPERATIONAL_OFFSET = 9;
+       private static final int CREATE_FLAG_OFFSET = 8;
 
        public PCEPLspObjectParser(final TlvHandlerRegistry tlvReg) {
                super(tlvReg);
@@ -70,6 +73,7 @@ public class PCEPLspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilde
                builder.setSync(flags.get(SYNC_FLAG_OFFSET));
                builder.setRemove(flags.get(REMOVE_FLAG_OFFSET));
                builder.setAdministrative(flags.get(ADMINISTRATIVE_FLAG_OFFSET));
+               builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(flags.get(CREATE_FLAG_OFFSET)).build());
                short s = 0;
                s |= flags.get(OPERATIONAL_OFFSET + 2) ? 1 : 0;
                s |= (flags.get(OPERATIONAL_OFFSET + 1) ? 1 : 0) << 1;
@@ -120,6 +124,9 @@ public class PCEPLspObjectParser extends AbstractObjectWithTlvsParser<TlvsBuilde
                if (specObj.isAdministrative()) {
                        retBytes[3] |= 1 << (Byte.SIZE - (ADMINISTRATIVE_FLAG_OFFSET - Byte.SIZE) - 1);
                }
+               if (specObj.getAugmentation(Lsp1.class).isCreate()) {
+                       retBytes[3] |= 1 << (Byte.SIZE - (CREATE_FLAG_OFFSET - Byte.SIZE) - 1);
+               }
                final int op = specObj.getOperational().getIntValue();
                retBytes[3] |= (op & 7) << 4;
                ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
index 3b50bb74424a400197d49be3c1491314e71534ed..abefb1fdd124e200027ec2887bfff3a30bcede2b 100644 (file)
@@ -8,10 +8,13 @@
 package org.opendaylight.protocol.pcep.impl.object;
 
 import java.util.Arrays;
+import java.util.BitSet;
 
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 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.crabbe.initiated.rev131126.Srp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
 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;
@@ -39,6 +42,8 @@ public final class PCEPSrpObjectParser extends AbstractObjectWithTlvsParser<SrpB
 
        private static final int MIN_SIZE = FLAGS_SIZE + SRP_ID_SIZE;
 
+       private static final int REMOVE_FLAG = 31;
+
        public PCEPSrpObjectParser(final TlvHandlerRegistry tlvReg) {
                super(tlvReg);
        }
@@ -58,6 +63,8 @@ public final class PCEPSrpObjectParser extends AbstractObjectWithTlvsParser<SrpB
                final SrpBuilder builder = new SrpBuilder();
                builder.setIgnore(header.isIgnore());
                builder.setProcessingRule(header.isProcessingRule());
+               final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(bytes, 0, FLAGS_SIZE));
+               builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(flags.get(REMOVE_FLAG)).build());
                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.");
@@ -88,6 +95,10 @@ public final class PCEPSrpObjectParser extends AbstractObjectWithTlvsParser<SrpB
                if (tlvs != null) {
                        ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
                }
+               final BitSet flags = new BitSet(FLAGS_SIZE * Byte.SIZE);
+               flags.set(REMOVE_FLAG, srp.getAugmentation(Srp1.class).isRemove());
+               ByteArray.copyWhole(ByteArray.bitSetToBytes(flags, FLAGS_SIZE), retBytes, 0);
+
                System.arraycopy(ByteArray.intToBytes(id.intValue(), SRP_ID_SIZE), 0, retBytes, FLAGS_SIZE, SRP_ID_SIZE);
                ByteArray.copyWhole(tlvs, retBytes, TLVS_OFFSET);
                return ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), retBytes);
index 11f776b67cdfe23b4dd94d25837cd9ac11991e44..255864efd92cde69e971206fff36a1b01ee1294c 100644 (file)
@@ -51,6 +51,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 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.network.concepts.rev131125.Bandwidth;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
@@ -190,6 +194,7 @@ public class PCEPObjectParserTest {
                builder.setDelegate(false);
                builder.setRemove(true);
                builder.setSync(false);
+               builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
                builder.setOperational(OperationalStatus.GoingDown);
                builder.setPlspId(new PlspId(0x12345L));
 
@@ -640,12 +645,13 @@ public class PCEPObjectParserTest {
        @Test
        public void testSrpObject() throws IOException, PCEPDeserializerException {
                final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
-               final byte[] result = new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0, 0, 0, 0, 0, (byte) 0x01 };
+               final byte[] result = new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0, (byte) 0x01, 0, 0, 0, (byte) 0x01 };
 
                final SrpBuilder builder = new SrpBuilder();
                builder.setProcessingRule(false);
                builder.setIgnore(false);
                builder.setOperationId(new SrpIdNumber(1L));
+               builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
 
                assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
                assertArrayEquals(result, parser.serializeObject(builder.build()));
index db210d46d8df26641f108bc8fbb6381e2a575974..fbc1043d5323747ed1cb119617c60b465e719339 100644 (file)
@@ -34,7 +34,11 @@ import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProvide
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 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.crabbe.initiated.rev131126.Lsp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
@@ -270,6 +274,7 @@ public class PCEPValidatorTest {
                srpBuilder.setIgnore(false);
                srpBuilder.setProcessingRule(false);
                srpBuilder.setOperationId(new SrpIdNumber(1L));
+               srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
                this.srp = srpBuilder.build();
 
                final LspBuilder lspBuilder = new LspBuilder();
@@ -282,6 +287,7 @@ public class PCEPValidatorTest {
                lspBuilder.setSync(false);
                lspBuilder.setRemove(false);
                lspBuilder.setTlvs(new TlvsBuilder().build());
+               lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
                this.lsp = lspBuilder.build();
 
                final Ipv4Builder afi = new Ipv4Builder();
index 0ec53674616e83986ceebd1adfa65873fb00e472..19d4d28ff17fef045eaa6eabed265a39c610afb9 100644 (file)
@@ -111,7 +111,6 @@ public final class PCEPErrorMapping {
                this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 9), PCEPErrors.ERO_MISSING);
                this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 10), PCEPErrors.SRP_MISSING);
                this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 11), PCEPErrors.LSP_IDENTIFIERS_TLV_MISSING);
-               this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 12), PCEPErrors.DB_VERSION_TLV_MISSING);
 
                this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 13), PCEPErrors.LSP_CLEANUP_TLV_MISSING);
                this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 14), PCEPErrors.SYMBOLIC_PATH_NAME_MISSING);
@@ -143,9 +142,11 @@ public final class PCEPErrorMapping {
 
                this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 1), PCEPErrors.UPDATE_REQ_FOR_NON_LSP);
                this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 2), PCEPErrors.UPDATE_REQ_FOR_NO_STATEFUL);
-               // TODO: replace with actual values by IANA
                this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 3), PCEPErrors.UNKNOWN_PLSP_ID);
-               this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 4), PCEPErrors.LSP_LIMIT_EXCEEDED);
+               this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 4), PCEPErrors.RESOURCE_LIMIT_EXCEEDED);
+               this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 6), PCEPErrors.LSP_LIMIT_EXCEEDED);
+               this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 7), PCEPErrors.DELEGATION_NON_REVOKABLE);
+               this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 8), PCEPErrors.NON_ZERO_PLSPID);
 
                this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 1), PCEPErrors.CANNOT_PROCESS_STATE_REPORT);
                this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 2), PCEPErrors.LSP_DB_VERSION_MISMATCH);
@@ -153,6 +154,10 @@ public final class PCEPErrorMapping {
                this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 5), PCEPErrors.CANNOT_COMPLETE_STATE_SYNC);
 
                this.fillIn(new PCEPErrorIdentifier((short) 23, (short) 1), PCEPErrors.USED_SYMBOLIC_PATH_NAME);
+
+               this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 1), PCEPErrors.LSP_UNACC_INST_PARAMS);
+               this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 2), PCEPErrors.LSP_INTERNAL_ERROR);
+               this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 3), PCEPErrors.LSP_RSVP_ERROR);
        }
 
        private void fillIn(final PCEPErrorIdentifier identifier, final PCEPErrors error) {
index 58bd2f2b8404cbfe35cbd6087b1b17a2010d5a14..d7131a1365c86e7f35d287648ac2266e88ae40e5 100644 (file)
@@ -140,10 +140,6 @@ public enum PCEPErrors {
         * LSP-IDENTIFIERS TLV missing for a path in an LSP Update Request where TE-LSP setup is requested.
         */
        LSP_IDENTIFIERS_TLV_MISSING,
-       /**
-        * LSP-DB-VERSION TLV missing.
-        */
-       DB_VERSION_TLV_MISSING,
        /**
         * Reception of an object with P flag not set although the P flag must be set according to this specification.
         */
@@ -214,7 +210,19 @@ public enum PCEPErrors {
         * A PCE indicates to a PCC that it has exceeded the resource limit allocated for its state, and thus it cannot
         * accept and process its LSP State Report message.
         */
+       RESOURCE_LIMIT_EXCEEDED,
+       /**
+        * PCE-initiated LSP limit reached
+        */
        LSP_LIMIT_EXCEEDED,
+       /**
+        * Delegation for PCE-initiated LSP cannot be revoked
+        */
+       DELEGATION_NON_REVOKABLE,
+       /**
+        * Non-zero PLSP-ID in LSP initiation request
+        */
+       NON_ZERO_PLSPID,
        /**
         * A PCE indicates to a PCC that it can not process (an otherwise valid) LSP State Report. The PCEP-ERROR Object is
         * followed by the LSP Object that identifies the LSP.
@@ -235,5 +243,17 @@ public enum PCEPErrors {
        /**
         * SYMBOLIC-PATH-NAME in use
         */
-       USED_SYMBOLIC_PATH_NAME
+       USED_SYMBOLIC_PATH_NAME,
+       /**
+        * LSP instantiation error: Unacceptable instantiation parameters
+        */
+       LSP_UNACC_INST_PARAMS,
+       /**
+        * LSP instantiation error: Internal error
+        */
+       LSP_INTERNAL_ERROR,
+       /**
+        * LSP instantiation error: RSVP signaling error
+        */
+       LSP_RSVP_ERROR
 }