Adding route blackhole
Change-Id: I70212b0ab91e628e8528bca896c3aecc499e31b1
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
index f54ee9e..034ddfe 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/AppConfigHandler.java
@@ -16,6 +16,8 @@
package org.onosproject.segmentrouting;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
@@ -62,6 +64,9 @@
SegmentRoutingAppConfig config = (SegmentRoutingAppConfig) event.config().get();
deviceService.getAvailableDevices().forEach(device -> {
populateVRouter(device.id(), getMacAddresses(config));
+ config.blackholeIPs().forEach(ipPrefix -> {
+ srManager.routingRulePopulator.populateDefaultRouteBlackhole(device.id(), ipPrefix);
+ });
});
}
@@ -86,6 +91,14 @@
revokeVRouter(device.id(), prevMacAddresses);
populateVRouter(device.id(), macAddresses);
+ Set<IpPrefix> toRemove = Sets.difference(prevConfig.blackholeIPs(), config.blackholeIPs());
+ toRemove.forEach(ipPrefix -> {
+ srManager.routingRulePopulator.removeDefaultRouteBlackhole(device.id(), ipPrefix);
+ });
+ Set<IpPrefix> toAdd = Sets.difference(config.blackholeIPs(), prevConfig.blackholeIPs());
+ toAdd.forEach(ipPrefix -> {
+ srManager.routingRulePopulator.populateDefaultRouteBlackhole(device.id(), ipPrefix);
+ });
});
}
@@ -100,11 +113,14 @@
SegmentRoutingAppConfig prevConfig = (SegmentRoutingAppConfig) event.prevConfig().get();
deviceService.getAvailableDevices().forEach(device -> {
revokeVRouter(device.id(), getMacAddresses(prevConfig));
+ prevConfig.blackholeIPs().forEach(ipPrefix -> {
+ srManager.routingRulePopulator.removeDefaultRouteBlackhole(device.id(), ipPrefix);
+ });
});
}
/**
- * Populates initial vRouter rules.
+ * Populates initial vRouter and blackhole rules.
*
* @param deviceId device ID
*/
@@ -112,6 +128,9 @@
SegmentRoutingAppConfig config =
srManager.cfgService.getConfig(srManager.appId, SegmentRoutingAppConfig.class);
populateVRouter(deviceId, getMacAddresses(config));
+ config.blackholeIPs().forEach(ipPrefix -> {
+ srManager.routingRulePopulator.populateDefaultRouteBlackhole(deviceId, ipPrefix);
+ });
}
private void populateVRouter(DeviceId deviceId, Set<MacAddress> pendingAdd) {
@@ -166,7 +185,9 @@
if (srManager.deviceConfiguration.isEdgeDevice(deviceId)) {
return true;
}
- } catch (DeviceConfigNotFoundException e) { }
+ } catch (DeviceConfigNotFoundException e) {
+ log.warn("Device configuration for {} is not present.", deviceId);
+ }
return false;
}
}