+
+ @Override
+ public Future<RpcResult<GetNodeIpAddressOutput>> getNodeIpAddress(GetNodeIpAddressInput input) {
+ if (!sessionContext.isValid()) {
+ return Futures.immediateFuture(RpcResultBuilder
+ .<GetNodeIpAddressOutput> failed()
+ .withError(org.opendaylight.yangtools.yang.common.RpcError.ErrorType.TRANSPORT,
+ "Session is not valid.").build());
+ }
+ InetSocketAddress remoteAddress = sessionContext.getPrimaryConductor().getConnectionAdapter()
+ .getRemoteAddress();
+ if (remoteAddress == null) {
+ return Futures.immediateFuture(RpcResultBuilder
+ .<GetNodeIpAddressOutput> failed()
+ .withError(org.opendaylight.yangtools.yang.common.RpcError.ErrorType.TRANSPORT,
+ "No connection with switch.").build());
+ }
+ IpAddress ipAddress = resolveIpAddress(remoteAddress.getAddress());
+ GetNodeIpAddressOutput result = new GetNodeIpAddressOutputBuilder().setIpAddress(ipAddress).build();
+ return Futures.immediateFuture(RpcResultBuilder.<GetNodeIpAddressOutput> success(result).build());
+ }
+
+ private static IpAddress resolveIpAddress(InetAddress address) {
+ String hostAddress = address.getHostAddress();
+ if (address instanceof Inet4Address) {
+ return new IpAddress(new Ipv4Address(hostAddress));
+ }
+ if (address instanceof Inet6Address) {
+ return new IpAddress(new Ipv6Address(hostAddress));
+ }
+ throw new IllegalArgumentException("Unsupported IP address type!");
+ }