import org.opendaylight.bgpcep.programming.spi.InstructionExecutor;
import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
import org.opendaylight.bgpcep.programming.spi.SuccessfulRpcResult;
+import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil;
+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.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.pcep.types.rev131005.endpoints.address.family.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4CaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6CaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv6._case.Ipv6Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobjects;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.FailureBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.failure.Failure;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.FailureCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.failure._case.Failure;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.add.lsp.args.ArgumentsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.programming.rev131102.TopologyInstructionInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHops;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepCreateP2pTunnelInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepCreateP2pTunnelOutput;
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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.BaseTunnelInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.TpReference;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
TpReader(final DataModificationTransaction t, final InstanceIdentifier<Topology> topo, final TpReference ref) {
this.t = Preconditions.checkNotNull(t);
- nii = InstanceIdentifier.builder(topo).node(Node.class, new NodeKey(ref.getNode())).toInstance();
- tii = InstanceIdentifier.builder(nii).node(TerminationPoint.class, new TerminationPointKey(ref.getTp())).toInstance();
+ this.nii = InstanceIdentifier.builder(topo).child(Node.class, new NodeKey(ref.getNode())).toInstance();
+ this.tii = InstanceIdentifier.builder(this.nii).child(TerminationPoint.class, new TerminationPointKey(ref.getTp())).toInstance();
}
private Node getNode() {
- return (Node) t.readOperationalData(nii);
+ return (Node) this.t.readOperationalData(this.nii);
}
private TerminationPoint getTp() {
- return (TerminationPoint) t.readOperationalData(tii);
+ return (TerminationPoint) this.t.readOperationalData(this.tii);
}
}
if (sc.getIpv4Address() != null) {
for (final IpAddress dc : dsts) {
if (dc.getIpv4Address() != null) {
- return new Ipv4Builder().
- setSourceIpv4Address(sc.getIpv4Address()).
- setDestinationIpv4Address(dc.getIpv4Address()).build();
+ return new Ipv4CaseBuilder().setIpv4(
+ new Ipv4Builder().setSourceIpv4Address(sc.getIpv4Address()).setDestinationIpv4Address(dc.getIpv4Address()).build()).build();
}
}
}
if (sc.getIpv6Address() != null) {
for (final IpAddress dc : dsts) {
if (dc.getIpv6Address() != null) {
- return new Ipv6Builder().
- setSourceIpv6Address(sc.getIpv6Address()).
- setDestinationIpv6Address(dc.getIpv6Address()).build();
+ return new Ipv6CaseBuilder().setIpv6(
+ new Ipv6Builder().setSourceIpv6Address(sc.getIpv6Address()).setDestinationIpv6Address(dc.getIpv6Address()).build()).build();
}
}
}
return null;
}
- private NodeId supportingNode(final DataModificationTransaction t, final Node node) {
- for (SupportingNode n : node.getSupportingNode()) {
+ private NodeId supportingNode(final Node node) {
+ for (final SupportingNode n : node.getSupportingNode()) {
final SupportingNode1 n1 = n.getAugmentation(SupportingNode1.class);
if (n1 != null && n1.getPathComputationClient().isControlling()) {
return n.getKey().getNodeRef();
if (!explicitHops.isEmpty()) {
final List<Subobjects> subobjs = new ArrayList<>(explicitHops.size());
- for (ExplicitHops h : explicitHops) {
+ for (final ExplicitHops h : explicitHops) {
final ExplicitHops1 h1 = h.getAugmentation(ExplicitHops1.class);
if (h1 != null) {
final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() {
@Override
protected ListenableFuture<OperationResult> executeImpl() {
- final InstanceIdentifier<Topology> tii = topologyIdentifier(input);
-
- final DataModificationTransaction t = dataProvider.beginTransaction();
+ final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(input);
+ final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction();
final TpReader dr = new TpReader(t, tii, input.getDestination());
final TpReader sr = new TpReader(t, tii, input.getSource());
final TerminationPoint dp = Preconditions.checkNotNull(dr.getTp());
final AddLspInputBuilder ab = new AddLspInputBuilder();
- ab.setNode(Preconditions.checkNotNull(supportingNode(t, sn)));
+ ab.setNode(Preconditions.checkNotNull(supportingNode(sn)));
ab.setName(Preconditions.checkNotNull(input.getSymbolicPathName()));
// The link has to be non-existent
ab.setArguments(args.build());
return Futures.transform(
- (ListenableFuture<RpcResult<AddLspOutput>>) topologyService.addLsp(ab.build()),
+ (ListenableFuture<RpcResult<AddLspOutput>>) TunnelProgramming.this.topologyService.addLsp(ab.build()),
new Function<RpcResult<AddLspOutput>, OperationResult>() {
@Override
public OperationResult apply(final RpcResult<AddLspOutput> input) {
final Failure f = this.scheduler.submitInstruction(input, e);
final PcepCreateP2pTunnelOutputBuilder b = new PcepCreateP2pTunnelOutputBuilder();
if (f != null) {
- b.setResult(new FailureBuilder().setFailure(f).build());
+ b.setResult(new FailureCaseBuilder().setFailure(f).build());
}
final RpcResult<PcepCreateP2pTunnelOutput> res = SuccessfulRpcResult.create(b.build());
return Futures.immediateFuture(res);
}
- // FIXME: topology programming utility class
- private InstanceIdentifier<Topology> topologyIdentifier(final TopologyInstructionInput input) {
- return InstanceIdentifier.builder().
- node(NetworkTopology.class).child(Topology.class, new TopologyKey(input.getTopologyId())).toInstance();
- }
-
- // FIXME: tunnel programming utility class
- private InstanceIdentifier<Link> linkIdentifier(final InstanceIdentifier<Topology> topology, final BaseTunnelInput input) {
- return InstanceIdentifier.builder(topology).
- child(Link.class, new LinkKey(Preconditions.checkNotNull(input.getLinkId()))).toInstance();
- }
-
private Node sourceNode(final DataModificationTransaction t, final InstanceIdentifier<Topology> topology, final Link link) {
- final InstanceIdentifier<Node> nii = InstanceIdentifier.builder(topology).
- child(Node.class, new NodeKey(link.getSource().getSourceNode())).toInstance();
+ final InstanceIdentifier<Node> nii = InstanceIdentifier.builder(topology).child(Node.class,
+ new NodeKey(link.getSource().getSourceNode())).toInstance();
return (Node) t.readOperationalData(nii);
}
final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() {
@Override
protected ListenableFuture<OperationResult> executeImpl() {
- final InstanceIdentifier<Topology> tii = topologyIdentifier(input);
- final InstanceIdentifier<Link> lii = linkIdentifier(tii, input);
+ final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(input);
+ final InstanceIdentifier<Link> lii = TunnelProgrammingUtil.linkIdentifier(tii, input);
- final DataModificationTransaction t = dataProvider.beginTransaction();
+ final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction();
// The link has to exist
final Link link = (Link) t.readOperationalData(lii);
ab.setNode(node.getSupportingNode().get(0).getKey().getNodeRef());
return Futures.transform(
- (ListenableFuture<RpcResult<RemoveLspOutput>>) topologyService.removeLsp(ab.build()),
+ (ListenableFuture<RpcResult<RemoveLspOutput>>) TunnelProgramming.this.topologyService.removeLsp(ab.build()),
new Function<RpcResult<RemoveLspOutput>, OperationResult>() {
@Override
public OperationResult apply(final RpcResult<RemoveLspOutput> input) {
final Failure f = this.scheduler.submitInstruction(input, e);
final PcepDestroyTunnelOutputBuilder b = new PcepDestroyTunnelOutputBuilder();
if (f != null) {
- b.setResult(new FailureBuilder().setFailure(f).build());
+ b.setResult(new FailureCaseBuilder().setFailure(f).build());
}
final RpcResult<PcepDestroyTunnelOutput> res = SuccessfulRpcResult.create(b.build());
final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() {
@Override
protected ListenableFuture<OperationResult> executeImpl() {
- final InstanceIdentifier<Topology> tii = topologyIdentifier(input);
- final InstanceIdentifier<Link> lii = linkIdentifier(tii, input);
+ final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(input);
+ final InstanceIdentifier<Link> lii = TunnelProgrammingUtil.linkIdentifier(tii, input);
- final DataModificationTransaction t = dataProvider.beginTransaction();
+ final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction();
// The link has to exist
final Link link = (Link) t.readOperationalData(lii);
final UpdateLspInputBuilder ab = new UpdateLspInputBuilder();
ab.setName(link.getAugmentation(Link1.class).getSymbolicPathName());
- ab.setNode(Preconditions.checkNotNull(supportingNode(t, node)));
+ 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();
+ 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());
ab.setArguments(args.build());
return Futures.transform(
- (ListenableFuture<RpcResult<UpdateLspOutput>>) topologyService.updateLsp(ab.build()),
+ (ListenableFuture<RpcResult<UpdateLspOutput>>) TunnelProgramming.this.topologyService.updateLsp(ab.build()),
new Function<RpcResult<UpdateLspOutput>, OperationResult>() {
@Override
public OperationResult apply(final RpcResult<UpdateLspOutput> input) {
final Failure f = this.scheduler.submitInstruction(input, e);
final PcepUpdateTunnelOutputBuilder b = new PcepUpdateTunnelOutputBuilder();
if (f != null) {
- b.setResult(new FailureBuilder().setFailure(f).build());
+ b.setResult(new FailureCaseBuilder().setFailure(f).build());
}
final RpcResult<PcepUpdateTunnelOutput> res = SuccessfulRpcResult.create(b.build());
@Override
public void close() {
- // FIXME: remove all scheduled instructions, etc.
+ // FIXME: BUG-186: remove all scheduled instructions, etc.
}
}