Make tunnel-topology independent of stateful draft 27/4727/2
authorRobert Varga <rovarga@cisco.com>
Fri, 24 Jan 2014 15:26:28 +0000 (16:26 +0100)
committerRobert Varga <rovarga@cisco.com>
Sat, 25 Jan 2014 07:53:04 +0000 (08:53 +0100)
Change-Id: I52c484c288847fd7520563305644c49c6b200989
Signed-off-by: Robert Varga <rovarga@cisco.com>
integration-tests/src/test/java/org/opendaylight/protocol/integration/PcepImplBundleTest.java
pcep/ietf-stateful07/pom.xml
pcep/ietf-stateful07/src/main/yang/odl-pcep-ietf-stateful07.yang
pcep/tunnel-api/pom.xml
pcep/tunnel-api/src/main/yang/topology-tunnel-pcep.yang
pcep/tunnel-provider/pom.xml
pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java
pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgramming.java

index 40ff0acf0d0a55b75e13a228bbfa17132200a013..569026199a1911f361379d5a28123545341b703a 100644 (file)
@@ -15,7 +15,8 @@ public final class PcepImplBundleTest extends AbstractBundleTest {
        @Override
        protected Collection<String> prerequisiteBundles() {
                return Lists.newArrayList("concepts", "pcep-api", "pcep-spi", "pcep-ietf-stateful02", "pcep-ietf-stateful07", "pcep-topology-api",
-                               "rsvp-api", "programming-api", "programming-topology-api", "topology-api", "util");
+                               "pcep-tunnel-api", "rsvp-api", "programming-api", "programming-topology-api", "topology-api", "topology-tunnel-api",
+                               "programming-tunnel-api", "util");
        }
 
        @Override
index 8838f5ae231f9600d0f51ccfadf41ef1d25d2aa7..01f37b75a3a68f5beda1dd20b08e2e83d25c7d18 100644 (file)
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-topology-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pcep-tunnel-api</artifactId>
+        </dependency>
 
         <!--
             FIXME: this is in support of the generated code. This should not
index 5b2f4a93bb347828337ae9630b92bda010e35d60..2b155a8348c1af684dcd14a350667348243c7210 100644 (file)
@@ -9,6 +9,9 @@ module odl-pcep-ietf-stateful07 {
        import pcep-types { prefix pcep; revision-date 2013-10-05; }
        import pcep-message { prefix msg; revision-date 2013-10-07; }
        import rsvp { prefix rsvp; revision-date 2013-08-20; }
+       import topology-tunnel { prefix tt; revision-date 2013-08-19; }
+       import topology-tunnel-pcep { prefix tun; revision-date 2013-08-20; }
+       import topology-tunnel-pcep-programming { prefix ttpp; revision-date 2013-10-30; }
 
        organization "Cisco Systems, Inc.";
        contact "Robert Varga <rovarga@cisco.com>";
@@ -317,7 +320,51 @@ module odl-pcep-ietf-stateful07 {
 
        augment "/topo:ensure-lsp-operational/topo:input/topo:arguments" {
                leaf operational {
-                       type stateful:operational-status;
+                       type operational-status;
                }
        }
+
+       typedef administrative-status {
+               type enumeration {
+                       enum active;
+                       enum inactive;
+               }
+               reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-07#section-7.3";
+       }
+
+       grouping cfg-attributes {
+               leaf administrative-status {
+                       type administrative-status;
+               }
+       }
+
+       grouping oper-attributes {
+               leaf operational-status {
+                       type operational-status;
+                       config false;
+               }
+       }
+
+       augment "/nt:network-topology/nt:topology/nt:link" {
+               when "../../tunnel-types/pcep-tunnel";
+
+               uses cfg-attributes;
+               uses oper-attributes;
+       }
+
+       augment "/nt:network-topology/nt:topology/tt:paths" {
+               when "../../tunnel-types/pcep-tunnel";
+
+               uses cfg-attributes;
+               uses oper-attributes;
+       }
+
+       augment "/ttpp:pcep-create-p2p-tunnel/ttpp:input" {
+               uses cfg-attributes;
+       }
+
+       augment "/ttpp:pcep-update-tunnel/ttpp:input" {
+               uses cfg-attributes;
+       }
 }
+
index ea1900e7e48559520f49880bcd6b3f9d116c20ba..deaaa2cedf5c3f349958e3d4f38da5b3af15f0dd 100644 (file)
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>pcep-ietf-stateful02</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>pcep-ietf-stateful07</artifactId>
-        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>programming-api</artifactId>
index 7ce8744e50c1f1cc440c2fdad7b53da8e6e92ff0..b82de82400cd577dbda51fed6067ae19afc54397 100644 (file)
@@ -6,7 +6,6 @@ module topology-tunnel-pcep {
 
        import network-topology { prefix nt; revision-date 2013-10-21; }
        import network-concepts { prefix netc; revision-date 2013-11-25; }
-       import odl-pcep-ietf-stateful07 { prefix stateful; revision-date 2013-12-22; }
        import pcep-types { prefix pcep; revision-date 2013-10-05; }
        import rsvp { prefix rsvp; revision-date 2013-08-20; }
        import topology-tunnel { prefix tt; revision-date 2013-08-19; }
@@ -32,14 +31,6 @@ module topology-tunnel-pcep {
                reference "";
        }
 
-       typedef administrative-status {
-               type enumeration {
-                       enum active;
-                       enum inactive;
-               }
-               reference "https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-05#section-7.3";
-       }
-
        grouping topology-tunnel-pcep-type {
                container topology-tunnel-pcep {
                        presence "indicates a PCEP tunnel-aware topology";
@@ -76,9 +67,9 @@ module topology-tunnel-pcep {
        }
 
        grouping tunnel-pcep-link-cfg-attributes {
-               leaf administrative-status {
-                       type administrative-status;
-               }
+        leaf symbolic-path-name {
+            type string;
+        }
 
                leaf class-type {
                        type pcep:class-type;
@@ -88,30 +79,16 @@ module topology-tunnel-pcep {
                        type netc:bandwidth;
                }
 
-        leaf symbolic-path-name {
-            type stateful:symbolic-path-name;
-        }
-
         uses rsvp:tunnel-attributes;
        }
 
        grouping tunnel-pcep-link-oper-attributes {
-               leaf operational-status {
-                       type stateful:operational-status;
-                       config false;
-               }
+
        }
 
        grouping tunnel-pcep-path-attributes {
-               leaf administrative-status {
-                       type administrative-status;
-               }
 
-               leaf operational-status {
-                       type stateful:operational-status;
-                       config false;
-               }
-       }
+    }
 
        augment "/nt:network-topology/nt:topology/nt:link" {
                when "../../tunnel-types/pcep-tunnel";
index 900f866e9f20340f725312436273e18198e8b166..e57a1b7711cc8c0383c01db3c5ae79d618778b15 100644 (file)
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-tunnel-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pcep-ietf-stateful02</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pcep-ietf-stateful07</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>programming-spi</artifactId>
index 1fcdb8954aeaa4c5ae23d793a9e00b85eba53e18..1ff7b7f5ac940240803831b14a857cc66c09a075 100644 (file)
@@ -17,8 +17,8 @@ import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.AdministrativeStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.ReportedLsp1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4Case;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6Case;
@@ -27,7 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.PathComputationClient;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.path.computation.client.ReportedLsp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.AdministrativeStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.SupportingNode1;
@@ -63,7 +62,6 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.FutureCallback;
@@ -228,12 +226,14 @@ public final class NodeChangedListener implements DataChangeListener {
                final Link1Builder lab = new Link1Builder(value.getPath().getLspa());
                lab.setBandwidth(value.getPath().getBandwidth().getBandwidth());
                lab.setClassType(value.getPath().getClassType().getClassType());
-               lab.setSymbolicPathName(new SymbolicPathName(value.getName().getBytes(Charsets.UTF_8)));
+               lab.setSymbolicPathName(value.getName());
 
                final InstanceIdentifier<TerminationPoint> dst = getIpTerminationPoint(trans, dstIp, null, Boolean.FALSE);
-               final InstanceIdentifier<TerminationPoint> src = getIpTerminationPoint(trans, srcIp, ni, rl.getLsp().isDelegate());;
-               lab.setOperationalStatus(rl.getLsp().getOperational());
-               lab.setAdministrativeStatus(rl.getLsp().isAdministrative() ? AdministrativeStatus.Active : AdministrativeStatus.Inactive);
+               final InstanceIdentifier<TerminationPoint> src = getIpTerminationPoint(trans, srcIp, ni, rl.getLsp().isDelegate());
+
+               final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Link1Builder slab = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Link1Builder();
+               slab.setOperationalStatus(rl.getLsp().getOperational());
+               slab.setAdministrativeStatus(rl.getLsp().isAdministrative() ? AdministrativeStatus.Active : AdministrativeStatus.Inactive);
 
                final LinkId id = linkIdForLsp(i, value);
                final LinkBuilder lb = new LinkBuilder();
@@ -244,6 +244,7 @@ public final class NodeChangedListener implements DataChangeListener {
                lb.setDestination(new DestinationBuilder().setDestNode(dst.firstKeyOf(Node.class, NodeKey.class).getNodeId()).setDestTp(
                                dst.firstKeyOf(TerminationPoint.class, TerminationPointKey.class).getTpId()).build());
                lb.addAugmentation(Link1.class, lab.build());
+               lb.addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Link1.class, slab.build());
 
                trans.putOperationalData(linkForLsp(id), lb.build());
        }
index a14874e1408fc8b67ba1b5af4ae168f482130967..0322b4c817a35c2db418cf5339410b74f0daf5aa 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.bgpcep.pcep.tunnel.provider;
 
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -19,6 +18,9 @@ import org.opendaylight.bgpcep.programming.tunnel.TunnelProgrammingUtil;
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.AdministrativeStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcepCreateP2pTunnelInput1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcepUpdateTunnelInput1;
 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.ClassTypeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.AddressFamily;
@@ -52,7 +54,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepUpdateTunnelOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepUpdateTunnelOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.TopologyTunnelPcepProgrammingService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.AdministrativeStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.ExplicitHops1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.SupportingNode1;
@@ -73,7 +74,6 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Charsets;
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
@@ -227,20 +227,24 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer
 
                                final AddLspInputBuilder ab = new AddLspInputBuilder();
                                ab.setNode(Preconditions.checkNotNull(supportingNode(sn)));
-                               ab.setName(Charsets.UTF_8.decode(ByteBuffer.wrap(Preconditions.checkNotNull(input.getSymbolicPathName()).getValue())).toString());
+                               ab.setName(input.getSymbolicPathName());
 
                                // The link has to be non-existent
                                final InstanceIdentifier<Link> lii = NodeChangedListener.linkIdentifier(tii, ab.getNode(), ab.getName());
                                Preconditions.checkState(t.readOperationalData(lii) == null);
 
                                final ArgumentsBuilder args = new ArgumentsBuilder();
-                               args.setAdministrative(input.getAdministrativeStatus() == AdministrativeStatus.Active);
                                args.setBandwidth(new BandwidthBuilder().setBandwidth(input.getBandwidth()).build());
                                args.setClassType(new ClassTypeBuilder().setClassType(input.getClassType()).build());
                                args.setEndpointsObj(new EndpointsObjBuilder().setAddressFamily(buildAddressFamily(sp, dp)).build());
                                args.setEro(buildEro(input.getExplicitHops()));
                                args.setLspa(new LspaBuilder(input).build());
 
+                               final PcepCreateP2pTunnelInput1 ia = input.getAugmentation(PcepCreateP2pTunnelInput1.class);
+                               if (ia != null) {
+                                       args.setAdministrative(ia.getAdministrativeStatus() == AdministrativeStatus.Active);
+                               }
+
                                ab.setArguments(args.build());
 
                                return Futures.transform(
@@ -284,7 +288,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer
                                Preconditions.checkState(node != null);
 
                                final RemoveLspInputBuilder ab = new RemoveLspInputBuilder();
-                               ab.setName(Charsets.UTF_8.decode(ByteBuffer.wrap(link.getAugmentation(Link1.class).getSymbolicPathName().getValue())).toString());
+                               ab.setName(link.getAugmentation(Link1.class).getSymbolicPathName());
                                ab.setNode(node.getSupportingNode().get(0).getKey().getNodeRef());
 
                                return Futures.transform(
@@ -323,17 +327,20 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer
                                Preconditions.checkState(node != null);
 
                                final UpdateLspInputBuilder ab = new UpdateLspInputBuilder();
-                               ab.setName(Charsets.UTF_8.decode(ByteBuffer.wrap(link.getAugmentation(Link1.class).getSymbolicPathName().getValue())).toString());
+                               ab.setName(link.getAugmentation(Link1.class).getSymbolicPathName());
                                ab.setNode(Preconditions.checkNotNull(supportingNode(node)));
 
                                final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder args = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder();
-
-                               args.setAdministrative(input.getAdministrativeStatus() == AdministrativeStatus.Active);
                                args.setBandwidth(new BandwidthBuilder().setBandwidth(input.getBandwidth()).build());
                                args.setClassType(new ClassTypeBuilder().setClassType(input.getClassType()).build());
                                args.setEro(buildEro(input.getExplicitHops()));
                                args.setLspa(new LspaBuilder(input).build());
 
+                               final PcepUpdateTunnelInput1 ia = input.getAugmentation(PcepUpdateTunnelInput1.class);
+                               if (ia != null) {
+                                       args.setAdministrative(ia.getAdministrativeStatus() == AdministrativeStatus.Active);
+                               }
+
                                ab.setArguments(args.build());
 
                                return Futures.transform(