summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
8c9a1cf)
ISSUE: Multiple equivalent static route configurations with different names not detected
CHANGE: In addStaticRoute() perform proper equality check on existing StaticRoute objects
(using available StaticRoute compareTo() method) instead of checking on StaticRouteConfig
objects which can never be positive as same name config is detected at the beginning of method
Change-Id: I51d2e1a641f612f5e79eb11063a868739a275209
Signed-off-by: Alessandro Boch <aboch@cisco.com>
public ConcurrentMap<String, StaticRouteConfig> getStaticRouteConfigs() {
return staticRouteConfigs;
}
public ConcurrentMap<String, StaticRouteConfig> getStaticRouteConfigs() {
return staticRouteConfigs;
}
}
private void notifyHostUpdate(HostNodeConnector host, boolean added) {
}
private void notifyHostUpdate(HostNodeConnector host, boolean added) {
for (StaticRoute s : staticRoutes.values()) {
for (StaticRoute s : staticRoutes.values()) {
- if (s.getType() == StaticRoute.NextHopType.SWITCHPORT)
+ if (s.getType() == StaticRoute.NextHopType.SWITCHPORT) {
if (s.getNextHopAddress().equals(host.getNetworkAddress())) {
if (added) {
s.setHost(host);
if (s.getNextHopAddress().equals(host.getNetworkAddress())) {
if (added) {
s.setHost(host);
}
public boolean isIPv4AddressValid(String cidr) {
}
public boolean isIPv4AddressValid(String cidr) {
String values[] = cidr.split("/");
Pattern ipv4Pattern = Pattern
String values[] = cidr.split("/");
Pattern ipv4Pattern = Pattern
public StaticRoute getBestMatchStaticRoute(InetAddress ipAddress) {
ByteBuffer bblongestPrefix = null;
try {
public StaticRoute getBestMatchStaticRoute(InetAddress ipAddress) {
ByteBuffer bblongestPrefix = null;
try {
return longestPrefixRoute;
}
return longestPrefixRoute;
}
public Status addStaticRoute(StaticRouteConfig config) {
public Status addStaticRoute(StaticRouteConfig config) {
- Status status;
-
- status = config.isValid();
+ Status status = config.isValid();
if (!status.isSuccess()) {
return status;
}
if (!status.isSuccess()) {
return status;
}
"A valid Static Route configuration with this name " +
"already exists. Please use a different name");
}
"A valid Static Route configuration with this name " +
"already exists. Please use a different name");
}
- for (StaticRouteConfig s : staticRouteConfigs.values()) {
- if (s.equals(config)) {
+
+ // Update database
+ StaticRoute sRoute = new StaticRoute(config);
+
+ for (Map.Entry<String, StaticRoute> entry : staticRoutes.entrySet()) {
+ if (entry.getValue().compareTo(sRoute) == 0) {
return new Status(StatusCode.CONFLICT,
return new Status(StatusCode.CONFLICT,
- "This conflicts with an existing Static Route " +
- "Configuration. Please check the configuration " +
- "and try again");
+ "This conflicts with an existing Static Route " +
+ "Configuration. Please check the configuration " +
+ "and try again");
+ staticRoutes.put(config.getName(), sRoute);
+ // Update config databse
staticRouteConfigs.put(config.getName(), config);
staticRouteConfigs.put(config.getName(), config);
- StaticRoute sRoute = new StaticRoute(config);
- staticRoutes.put(config.getName(), sRoute);
checkAndUpdateListeners(sRoute, true);
return status;
}
checkAndUpdateListeners(sRoute, true);
return status;
}
public Status removeStaticRoute(String name) {
staticRouteConfigs.remove(name);
StaticRoute sRoute = staticRoutes.remove(name);
public Status removeStaticRoute(String name) {
staticRouteConfigs.remove(name);
StaticRoute sRoute = staticRoutes.remove(name);
allocateCaches();
retrieveCaches();
this.executor = Executors.newFixedThreadPool(1);
allocateCaches();
retrieveCaches();
this.executor = Executors.newFixedThreadPool(1);
- if (staticRouteConfigs.isEmpty())
+ if (staticRouteConfigs.isEmpty()) {
/*
* Slow probe to identify any gateway that might have silently appeared
/*
* Slow probe to identify any gateway that might have silently appeared
Assert.assertFalse(staticRoute1.equals(staticRoute3));
Assert.assertFalse(staticRoute1.equals(staticRoute4));
Assert.assertFalse(staticRoute1.equals(staticRoute3));
Assert.assertFalse(staticRoute1.equals(staticRoute4));
- Assert.assertTrue(staticRoute1.compareTo(staticRoute2) == 0 ? true : false);
- Assert.assertFalse(staticRoute1.compareTo(staticRoute3) == 0 ? true : false);
- Assert.assertTrue(staticRoute1.compareTo(staticRoute4) == 0 ? true : false);
+ Assert.assertTrue(staticRoute1.compareTo(staticRoute2) == 0);
+ Assert.assertFalse(staticRoute1.compareTo(staticRoute3) == 0);
+ Assert.assertTrue(staticRoute1.compareTo(staticRoute4) == 0);