[CORD-2529] Fpm route store handling

Change-Id: Idb878fe2d762d4c0849b87e6f4c09d6be072b772
diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
index dbe58fe..b885f8a 100644
--- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
+++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/FpmManager.java
@@ -362,6 +362,24 @@
         }
     }
 
+    private boolean routeInDhcpStore(IpPrefix prefix) {
+
+        if (dhcpStore != null) {
+            Collection<FpmRecord> dhcpRecords = dhcpStore.getFpmRecords();
+            return dhcpRecords.stream().anyMatch(record -> record.ipPrefix().equals(prefix));
+        }
+        return false;
+    }
+
+    private boolean routeInRipStore(IpPrefix prefix) {
+
+        if (ripStore != null) {
+            Collection<FpmRecord> ripRecords = ripStore.getFpmRecords();
+            return ripRecords.stream().anyMatch(record -> record.ipPrefix().equals(prefix));
+        }
+        return false;
+    }
+
     private void fpmMessage(FpmPeer peer, FpmHeader fpmMessage) {
         if (fpmMessage.type() == FpmHeader.FPM_TYPE_KEEPALIVE) {
             return;
@@ -400,6 +418,14 @@
 
         IpPrefix prefix = IpPrefix.valueOf(dstAddress, rtNetlink.dstLength());
 
+        // Ignore routes that we sent.
+        if ((prefix.isIp4() && (gateway.equals(pdPushNextHopIPv4))) ||
+            gateway.equals(pdPushNextHopIPv6)) {
+            if (routeInDhcpStore(prefix) || routeInRipStore(prefix)) {
+                return;
+            }
+        }
+
         List<Route> updates = new LinkedList<>();
         List<Route> withdraws = new LinkedList<>();
 
diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
index 33ff5d6..f55f00e 100644
--- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
+++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/cli/FpmConnectionsList.java
@@ -41,9 +41,8 @@
     protected void execute() {
         FpmInfoService fpmInfo = get(FpmInfoService.class);
 
-        if (fpmInfo.isPdPushEnabled()) {
-            print("PD Pushing is enabled/disbled.");
-        }
+        print(String.format("PD Pushing is %s.", fpmInfo.isPdPushEnabled() ? "enabled" : "disabled"));
+
         fpmInfo.peers().entrySet().stream()
                 .sorted(Comparator.<Map.Entry<FpmPeer, FpmPeerInfo>, IpAddress>comparing(e -> e.getKey().address())
                         .thenComparing(e -> e.getKey().port()))