[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()))