@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
<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
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>";
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;
+ }
}
+
<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>
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; }
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";
}
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;
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";
<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>
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;
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;
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;
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();
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());
}
*/
package org.opendaylight.bgpcep.pcep.tunnel.provider;
-import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
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;
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;
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;
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(
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(
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(