1 package org.opendaylight.controller.ping.plugin.internal;
3 import java.net.InetAddress;
4 import java.util.Collections;
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ExecutorService;
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
10 import org.opendaylight.controller.sal.common.util.Rpcs;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.PingService;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoInput;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput.EchoResult;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutputBuilder;
16 import org.opendaylight.yangtools.yang.common.RpcError;
17 import org.opendaylight.yangtools.yang.common.RpcResult;
19 public class PingImpl implements PingService {
20 private final ExecutorService pool = Executors.newFixedThreadPool(2);
22 private Future<RpcResult<SendEchoOutput>> startPingHost(final SendEchoInput destination) {
23 return pool.submit(new Callable<RpcResult<SendEchoOutput>>() {
25 public RpcResult<SendEchoOutput> call() throws Exception {
26 SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
28 InetAddress dst = InetAddress.getByName(destination.getDestination().getValue());
29 /* Build the result and return it. */
30 ob.setEchoResult(dst.isReachable(5000) ? EchoResult.Reachable : EchoResult.Unreachable);
31 } catch (Exception e) {
32 /* Return error result. */
33 ob.setEchoResult(EchoResult.Error);
35 return Rpcs.<SendEchoOutput>getRpcResult(true, ob.build(), Collections.<RpcError>emptySet());
41 public Future<RpcResult<SendEchoOutput>> sendEcho(SendEchoInput destination) {
42 return this.startPingHost(destination);