[ONOS-7752] check north-south reachability for troubleshoot purpose

Change-Id: I973047c0fcd4fb241ad010fbbef9d016510b8deb
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
index 3f204fb..645a86d 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
@@ -45,6 +45,7 @@
 import org.onosproject.openstacknetworking.api.InstancePortService;
 import org.onosproject.openstacknetworking.api.InstancePortStore;
 import org.onosproject.openstacknetworking.api.InstancePortStoreDelegate;
+import org.onosproject.openstacknetworking.api.OpenstackRouterService;
 import org.slf4j.Logger;
 
 import java.util.Objects;
@@ -101,6 +102,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected HostService hostService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected OpenstackRouterService routerService;
+
     private final InstancePortStoreDelegate
                             delegate = new InternalInstancePortStoreDelegate();
     private final InternalHostListener
@@ -224,6 +228,17 @@
         return ImmutableSet.copyOf(ports);
     }
 
+    @Override
+    public IpAddress floatingIp(String osPortId) {
+        checkNotNull(osPortId, ERR_NULL_INSTANCE_PORT_ID);
+
+        return routerService.floatingIps().stream()
+                .filter(fip -> osPortId.equals(fip.getPortId()))
+                .filter(fip -> fip.getFloatingIpAddress() != null)
+                .map(fip -> IpAddress.valueOf(fip.getFloatingIpAddress()))
+                .findFirst().orElse(null);
+    }
+
     private boolean isInstancePortInUse(String portId) {
         // TODO add checking logic
         return false;
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
index b8eb339..764cefe 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
@@ -250,7 +250,7 @@
         return osRouter.getExternalGatewayInfo();
     }
 
-    private void handleEchoReply(IPv4 ipPacket, ICMP icmp) {
+    private boolean handleEchoReply(IPv4 ipPacket, ICMP icmp) {
         String icmpInfoKey = icmpInfoKey(icmp,
                 IPv4.fromIPv4Address(ipPacket.getDestinationAddress()),
                 IPv4.fromIPv4Address(ipPacket.getSourceAddress()));
@@ -259,8 +259,10 @@
         if (icmpInfoMap.get(icmpInfoKey) != null) {
             processReplyFromExternal(ipPacket, icmpInfoMap.get(icmpInfoKey).value());
             icmpInfoMap.remove(icmpInfoKey);
+            return true;
         } else {
-            log.warn("No ICMP Info for ICMP packet");
+            log.debug("No ICMP Info for ICMP packet");
+            return false;
         }
     }
 
@@ -472,8 +474,9 @@
                     context.block();
                     break;
                 case TYPE_ECHO_REPLY:
-                    handleEchoReply(ipPacket, icmp);
-                    context.block();
+                    if (handleEchoReply(ipPacket, icmp)) {
+                        context.block();
+                    }
                     break;
                 default:
                     break;
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/InstancePortServiceAdapter.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/InstancePortServiceAdapter.java
index 885c7d8..b0efdfa 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/InstancePortServiceAdapter.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/InstancePortServiceAdapter.java
@@ -54,6 +54,11 @@
     }
 
     @Override
+    public IpAddress floatingIp(String osPortId) {
+        return null;
+    }
+
+    @Override
     public void addListener(InstancePortListener listener) {
 
     }