1 package org.opendaylight.controller.ping.plugin.internal;
3 import java.io.IOException;
4 import java.net.InetAddress;
5 import java.util.Collections;
6 import java.util.concurrent.Future;
8 import org.opendaylight.controller.sal.common.util.Rpcs;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.PingService;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoInput;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput.EchoResult;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutputBuilder;
14 import org.opendaylight.yangtools.yang.common.RpcError;
15 import org.opendaylight.yangtools.yang.common.RpcResult;
17 import com.google.common.util.concurrent.Futures;
19 public class PingImpl implements PingService {
21 private EchoResult pingHost(InetAddress destination) throws IOException {
22 if (destination.isReachable(5000)) {
23 return EchoResult.Reachable;
25 return EchoResult.Unreachable;
30 public Future<RpcResult<SendEchoOutput>> sendEcho(SendEchoInput destination) {
32 InetAddress dst = InetAddress.getByName(destination
33 .getDestination().getValue());
34 EchoResult result = this.pingHost(dst);
36 /* Build the result and return it. */
37 SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
38 ob.setEchoResult(result);
39 RpcResult<SendEchoOutput> rpcResult =
40 Rpcs.<SendEchoOutput> getRpcResult(true, ob.build(),
41 Collections.<RpcError> emptySet());
43 return Futures.immediateFuture(rpcResult);
44 } catch (Exception e) {
46 /* Return error result. */
47 SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
48 ob.setEchoResult(EchoResult.Error);
49 RpcResult<SendEchoOutput> rpcResult =
50 Rpcs.<SendEchoOutput> getRpcResult(true, ob.build(),
51 Collections.<RpcError> emptySet());
52 return Futures.immediateFuture(rpcResult);