if (f == null) {
return OperationResults.createUnsent(PCEPErrors.LSP_INTERNAL_ERROR).future();
}
-
return Futures.transform(f, new AsyncFunction<Optional<ReportedLsp>, OperationResult>() {
@Override
public ListenableFuture<OperationResult> apply(final Optional<ReportedLsp> rep) {
if (reportedLsp == null) {
return OperationResults.createUnsent(PCEPErrors.UNKNOWN_PLSP_ID).future();
}
- // Build the request and send it
- final RequestsBuilder rb = new RequestsBuilder();
- final SrpBuilder srpBuilder = new SrpBuilder().addAugmentation(Srp1.class, new Srp1Builder().setRemove(Boolean.TRUE).build()).setOperationId(nextRequest()).setProcessingRule(Boolean.TRUE);
- final Optional<PathSetupType> maybePST = getPST(rep);
- if (maybePST.isPresent()) {
- srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder()
- .setPathSetupType(maybePST.get())
- .build());
- }
- rb.setSrp(srpBuilder.build());
- rb.setLsp(new LspBuilder().setRemove(Boolean.FALSE).setPlspId(reportedLsp.getPlspId()).setDelegate(reportedLsp.isDelegate()).build());
-
final PcinitiateMessageBuilder ib = new PcinitiateMessageBuilder(MESSAGE_HEADER);
- ib.setRequests(Collections.singletonList(rb.build()));
+ final Requests rb = buildRequest(rep, reportedLsp);
+ ib.setRequests(Collections.singletonList(rb));
return sendMessage(new PcinitiateBuilder().setPcinitiateMessage(ib.build()).build(), rb.getSrp().getOperationId(), null);
}
});
}
+ private Requests buildRequest(final Optional<ReportedLsp> rep, final Lsp reportedLsp) {
+ // Build the request and send it
+ final RequestsBuilder rb = new RequestsBuilder();
+ final SrpBuilder srpBuilder = new SrpBuilder().addAugmentation(Srp1.class, new Srp1Builder().setRemove(Boolean.TRUE).build()).setOperationId(nextRequest()).setProcessingRule(Boolean.TRUE);
+ final Optional<PathSetupType> maybePST = getPST(rep);
+ if (maybePST.isPresent()) {
+ srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder()
+ .setPathSetupType(maybePST.get())
+ .build());
+ }
+ rb.setSrp(srpBuilder.build());
+ rb.setLsp(new LspBuilder().setRemove(Boolean.FALSE).setPlspId(reportedLsp.getPlspId()).setDelegate(reportedLsp.isDelegate()).build());
+ return rb.build();
+ }
+
private class UpdateFunction implements AsyncFunction<Optional<ReportedLsp>, OperationResult> {
private final UpdateLspArgs input;
return OperationResults.UNSENT;
}
// check if at least one of the paths has the same status as requested
- boolean operational = false;
for (final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.path.computation.client.reported.lsp.Path p : rep.get().getPath()) {
final Path1 p1 = p.getAugmentation(Path1.class);
if (p1 == null) {
LOG.warn("Node {} LSP {} does not contain data", input.getNode(), input.getName());
return OperationResults.UNSENT;
}
- final Lsp l = p1.getLsp();
- if (l.getOperational().equals(op)) {
- operational = true;
+ if (op.equals(p1.getLsp().getOperational())) {
+ return OperationResults.SUCCESS;
}
}
- return operational ? OperationResults.SUCCESS : OperationResults.UNSENT;
+ return OperationResults.UNSENT;
}
});
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.OperationResult;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.RemoveLspInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.RemoveLspOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspInput;
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.Arguments;
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.pcep.rev131024.operation.result.Error;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHops;
} catch (final ReadFailedException e) {
throw new IllegalStateException("Failed to ensure link existence.", e);
}
-
- final ArgumentsBuilder args = new ArgumentsBuilder();
- if (input.getBandwidth() != null) {
- args.setBandwidth(new BandwidthBuilder().setBandwidth(input.getBandwidth()).build());
- }
- if (input.getClassType() != null) {
- 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 AdministrativeStatus adminStatus = input.getAugmentation(PcepCreateP2pTunnelInput1.class).getAdministrativeStatus();
- if (adminStatus != null) {
- args.addAugmentation(Arguments2.class, new Arguments2Builder().setLsp(new LspBuilder().setAdministrative((adminStatus == AdministrativeStatus.Active) ? true : false).build()).build());
- }
-
- ab.setArguments(args.build());
-
+ ab.setArguments(buildArguments(input, sp, dp));
return Futures.transform(
(ListenableFuture<RpcResult<AddLspOutput>>) TunnelProgramming.this.topologyService.addLsp(ab.build()),
new Function<RpcResult<AddLspOutput>, OperationResult>() {
}
}
}));
-
final RpcResult<PcepCreateP2pTunnelOutput> res = SuccessfulRpcResult.create(b.build());
return Futures.immediateFuture(res);
}
+ private Arguments buildArguments(final PcepCreateP2pTunnelInput input, final TerminationPoint sp, final TerminationPoint dp) {
+ final ArgumentsBuilder args = new ArgumentsBuilder();
+ if (input.getBandwidth() != null) {
+ args.setBandwidth(new BandwidthBuilder().setBandwidth(input.getBandwidth()).build());
+ }
+ if (input.getClassType() != null) {
+ 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 AdministrativeStatus adminStatus = input.getAugmentation(PcepCreateP2pTunnelInput1.class).getAdministrativeStatus();
+ if (adminStatus != null) {
+ args.addAugmentation(Arguments2.class, new Arguments2Builder().setLsp(new LspBuilder().setAdministrative((adminStatus == AdministrativeStatus.Active) ? true : false).build()).build());
+ }
+ return args.build();
+ }
+
private Optional<Node> sourceNode(final ReadTransaction t, final InstanceIdentifier<Topology> topology, final Link link) throws ReadFailedException {
return t.read(LogicalDatastoreType.OPERATIONAL,
topology.child(Node.class, new NodeKey(link.getSource().getSourceNode()))).checkedGet();
protected ListenableFuture<OperationResult> invokeOperation() {
final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(input);
final InstanceIdentifier<Link> lii = TunnelProgrammingUtil.linkIdentifier(tii, input);
-
try (final ReadOnlyTransaction t = TunnelProgramming.this.dataProvider.newReadOnlyTransaction()) {
final Node node;
final Link link;
-
try {
// The link has to exist
link = t.read(LogicalDatastoreType.OPERATIONAL, lii).checkedGet().get();
-
// The source node has to exist
node = sourceNode(t, tii, link).get();
} catch (IllegalStateException | ReadFailedException e) {
LOG.debug("Link or node does not exist.", e);
return RESULT;
}
-
final RemoveLspInputBuilder ab = new RemoveLspInputBuilder();
ab.setName(link.getAugmentation(Link1.class).getSymbolicPathName());
ab.setNode(node.getSupportingNode().get(0).getKey().getNodeRef());
-
return Futures.transform(
(ListenableFuture<RpcResult<RemoveLspOutput>>) TunnelProgramming.this.topologyService.removeLsp(ab.build()),
new Function<RpcResult<RemoveLspOutput>, OperationResult>() {
}
}
}));
-
final RpcResult<PcepDestroyTunnelOutput> res = SuccessfulRpcResult.create(b.build());
return Futures.immediateFuture(res);
}
b.setResult(AbstractInstructionExecutor.schedule(this.scheduler, new AbstractInstructionExecutor(input) {
@Override
protected ListenableFuture<OperationResult> invokeOperation() {
-
final InstanceIdentifier<Topology> tii = TopologyProgrammingUtil.topologyForInput(input);
final InstanceIdentifier<Link> lii = TunnelProgrammingUtil.linkIdentifier(tii, input);
-
try (final ReadOnlyTransaction t = TunnelProgramming.this.dataProvider.newReadOnlyTransaction()) {
final Link link;
final Node node;
-
try {
// The link has to exist
link = t.read(LogicalDatastoreType.OPERATIONAL, lii).checkedGet().get();
-
// The source node has to exist
node = sourceNode(t, tii, link).get();
} catch (IllegalStateException | ReadFailedException e) {
LOG.debug("Link or node does not exist.", e);
return RESULT;
}
-
- final UpdateLspInputBuilder ab = new UpdateLspInputBuilder();
- 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.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 AdministrativeStatus adminStatus = input.getAugmentation(PcepUpdateTunnelInput1.class).getAdministrativeStatus();
- if (adminStatus != null) {
- args.addAugmentation(Arguments3.class, new Arguments3Builder().setLsp(new LspBuilder().setAdministrative((adminStatus == AdministrativeStatus.Active) ? true : false).build()).build());
- }
-
- ab.setArguments(args.build());
-
return Futures.transform(
- (ListenableFuture<RpcResult<UpdateLspOutput>>) TunnelProgramming.this.topologyService.updateLsp(ab.build()),
+ (ListenableFuture<RpcResult<UpdateLspOutput>>) TunnelProgramming.this.topologyService.updateLsp(buildUpdateInput(link, node, input)),
new Function<RpcResult<UpdateLspOutput>, OperationResult>() {
@Override
public OperationResult apply(final RpcResult<UpdateLspOutput> input) {
return Futures.immediateFuture(res);
}
+ private UpdateLspInput buildUpdateInput(final Link link, final Node node, final PcepUpdateTunnelInput input) {
+ final UpdateLspInputBuilder ab = new UpdateLspInputBuilder();
+ 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.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 AdministrativeStatus adminStatus = input.getAugmentation(PcepUpdateTunnelInput1.class).getAdministrativeStatus();
+ if (adminStatus != null) {
+ args.addAugmentation(Arguments3.class, new Arguments3Builder().setLsp(new LspBuilder().setAdministrative((adminStatus == AdministrativeStatus.Active) ? true : false).build()).build());
+ }
+ ab.setArguments(args.build());
+ return ab.build();
+ }
+
@Override
public void close() {
LOG.debug("Shutting down instruction scheduler {}", this);