uses ntp:topology-instruction-output;
}
}
+
+ rpc submit-ensure-lsp-operational {
+ input {
+ uses ntp:topology-instruction-input;
+ uses pcep:ensure-lsp-operational-args;
+ }
+ output {
+ uses ntp:topology-instruction-output;
+ }
+ }
}
uses operation-result;
}
}
+
+ grouping ensure-lsp-operational-args {
+ uses lsp-id;
+
+ container arguments {
+ leaf operational {
+ type pcep:operational-status;
+ mandatory true;
+ }
+ }
+ }
+
+ rpc ensure-lsp-operational {
+ description
+ "Ensure that the target LSP is provisioned and has specified
+ operational status.";
+
+ input {
+ uses ensure-lsp-operational-args;
+ }
+ output {
+ uses operation-result;
+ }
+ }
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspArgs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.FailureType;
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.Node1Builder;
ub.setUpdates(ImmutableList.of(rb.build()));
return l.sendMessage(new PcupdBuilder().setPcupdMessage(ub.build()).build(), rb.getSrp().getOperationId());
}
+
+ synchronized ListenableFuture<OperationResult> realEnsureLspOperational(final EnsureLspOperationalInput input) {
+ // Get the listener corresponding to the node
+ final SessionListener l = this.nodes.get(input.getNode());
+ if (l == null) {
+ LOG.debug("Session for node {} not found", input.getNode());
+ return Futures.immediateFuture(OPERATION_UNSENT);
+ }
+
+ // Make sure the LSP exists
+ final InstanceIdentifier<ReportedLsps> lsp = InstanceIdentifier.builder(l.topologyAugment).
+ child(PathComputationClient.class).
+ child(ReportedLsps.class, new ReportedLspsKey(input.getName())).toInstance();
+ LOG.debug("Checking if LSP {} has operational state {}", lsp, input.getArguments().getOperational());
+ final ReportedLsps rep = (ReportedLsps) this.dataProvider.readOperationalData(lsp);
+ if (rep == null) {
+ LOG.debug("Node {} does not contain LSP {}", input.getNode(), input.getName());
+ return Futures.immediateFuture(OPERATION_UNSENT);
+ }
+
+ if (rep.getLsp().getOperational().equals(input.getArguments().getOperational())) {
+ return Futures.immediateFuture(OPERATION_SUCCESS);
+ } else {
+ return Futures.immediateFuture(OPERATION_UNSENT);
+ }
+ }
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitAddLspInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitAddLspOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitAddLspOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitEnsureLspOperationalInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitEnsureLspOperationalOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitEnsureLspOperationalOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitRemoveLspInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitRemoveLspOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitRemoveLspOutputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitUpdateLspInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitUpdateLspOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev131106.SubmitUpdateLspOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.OperationResult;
import org.opendaylight.yangtools.yang.common.RpcResult;
return Futures.immediateFuture(res);
}
+ @Override
+ public ListenableFuture<RpcResult<SubmitEnsureLspOperationalOutput>> submitEnsureLspOperational(final SubmitEnsureLspOperationalInput input) {
+ Preconditions.checkArgument(input.getNode() != null);
+ Preconditions.checkArgument(input.getName() != null);
+ Preconditions.checkArgument(input.getArguments() != null);
+ Preconditions.checkArgument(input.getArguments().getOperational() != null);
+
+ final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() {
+ @Override
+ protected ListenableFuture<OperationResult> executeImpl() {
+ return manager.realEnsureLspOperational(new EnsureLspOperationalInputBuilder(input).build());
+ }
+ };
+
+ final Failure f = this.scheduler.submitInstruction(input, e);
+ final SubmitEnsureLspOperationalOutputBuilder b = new SubmitEnsureLspOperationalOutputBuilder();
+ if (f != null) {
+ b.setResult(new FailureBuilder().setFailure(f).build());
+ }
+
+ final RpcResult<SubmitEnsureLspOperationalOutput> res = SuccessfulRpcResult.create(b.build());
+ return Futures.immediateFuture(res);
+ }
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspInput;
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.AddLspOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalOutputBuilder;
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.OperationResult;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.RemoveLspInput;
}
});
}
+
+ @Override
+ public Future<RpcResult<EnsureLspOperationalOutput>> ensureLspOperational(final EnsureLspOperationalInput input) {
+ return Futures.transform(manager.realEnsureLspOperational(input), new Function<OperationResult, RpcResult<EnsureLspOperationalOutput>>() {
+ @Override
+ public RpcResult<EnsureLspOperationalOutput> apply(final OperationResult input) {
+ return SuccessfulRpcResult.create(new EnsureLspOperationalOutputBuilder(input).build());
+ }
+ });
+ }
}