bdi-network-resilience

Fixes to make networks independent.

10/12/2014 3:05:29 PM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
index f467f73..153d6ca 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
@@ -114,6 +114,7 @@ public class LinkMonitorCapability extends RouterAgentCapability implements
 						addBelief(((BeliefGoal<?>) event.getGoal())
 								.getOutputBelief());
 						belief(new AttackPrevented(link), false);
+						belief(new AnomalousUsage(link), null);
 					} else {
 						setEndState(EndState.FAILED);
 					}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index f20c5b5..57ea840 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -39,6 +39,7 @@ import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Observer;
 import java.util.Set;
 
 import javax.swing.JButton;
@@ -54,6 +55,7 @@ import br.ufrgs.inf.bdinetr.domain.AbstractRouterComponentFactory;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
+import br.ufrgs.inf.bdinetr.domain.Observable;
 import br.ufrgs.inf.bdinetr.domain.Role;
 import br.ufrgs.inf.bdinetr.domain.Router;
 import br.ufrgs.inf.bdinetr.domain.dummy.DummyRouterComponentFactory;
@@ -94,14 +96,8 @@ public class BDINetRApp {
 					.getId(), factory));
 			NETWORK.addRouter(new Router(new Ip("RouterRL"), Role.RATE_LIMITER
 					.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterRL+FE"),
-					Role.RATE_LIMITER.getId() | Role.FLOW_EXPORTER.getId(),
-					factory));
 			NETWORK.addRouter(new Router(new Ip("RouterAD"),
 					Role.ANOMALY_DETECTION.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterAD+RL"),
-					Role.ANOMALY_DETECTION.getId() | Role.RATE_LIMITER.getId(),
-					factory));
 			NETWORK.addRouter(new Router(new Ip("RouterCL"), Role.CLASSIFIER
 					.getId(), factory));
 			NETWORK.addRouter(new Router(new Ip("RouterCL+FE"), Role.CLASSIFIER
@@ -111,6 +107,19 @@ public class BDINetRApp {
 
 			AFFECTED_LINKS.add(new Link("AFFECTED_LINK"));
 		}
+
+		Set<Router> routers = NETWORK.getRouters();
+		for (Router router1 : routers) {
+			if (router1.hasRole(Role.RATE_LIMITER)) {
+				for (Router router2 : routers) {
+					if (router2.hasRole(Role.LINK_MONITOR)) {
+						((Observable) router1.getRole(Role.RATE_LIMITER))
+								.addObserver(((Observer) router2
+										.getRole(Role.LINK_MONITOR)));
+					}
+				}
+			}
+		}
 	}
 
 	public static void main(String[] args) {
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyAnomalyDetection.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyAnomalyDetection.java
index 4266967..bb1dfb5 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyAnomalyDetection.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyAnomalyDetection.java
@@ -35,16 +35,23 @@ import br.ufrgs.inf.bdinetr.domain.Router;
 public class DummyAnomalyDetection extends AbstractRouterComponent implements
 		AnomalyDetection {
 
+	private boolean first;
+
 	public DummyAnomalyDetection(Router router) {
 		super(router);
+		this.first = true;
 	}
 
 	@Override
 	public Set<Ip> detectIntrusion(Link link) {
 		Set<Ip> intrusions = new HashSet<>();
 		if (link.getId().equals("AFFECTED_LINK")) {
-			intrusions.add(new Ip("victim1"));
-			intrusions.add(new Ip("victim2"));
+			if (first) {
+				intrusions.add(new Ip("victim1"));
+				first = false;
+			} else {
+				intrusions.add(new Ip("victim2"));
+			}
 		}
 		return intrusions;
 	}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyLinkMonitor.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyLinkMonitor.java
index 8fbdeae..afb3afc 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyLinkMonitor.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyLinkMonitor.java
@@ -23,8 +23,11 @@ package br.ufrgs.inf.bdinetr.domain.dummy;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Observable;
+import java.util.Observer;
 import java.util.Set;
 
+import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Router;
@@ -33,13 +36,15 @@ import br.ufrgs.inf.bdinetr.domain.Router;
  * @author Ingrid Nunes
  */
 public class DummyLinkMonitor extends AbstractRouterComponent implements
-		LinkMonitor {
+		LinkMonitor, Observer {
 
+	private boolean first;
 	private final Map<Link, Boolean> overUsageLinks;
 
 	public DummyLinkMonitor(Router router) {
 		super(router);
 		this.overUsageLinks = new HashMap<>();
+		this.first = true;
 	}
 
 	@Override
@@ -67,4 +72,16 @@ public class DummyLinkMonitor extends AbstractRouterComponent implements
 		notifyObservers(link);
 	}
 
+	@Override
+	public void update(Observable o, Object arg) {
+		if (arg instanceof LimitLinkEvent) {
+			LimitLinkEvent event = (LimitLinkEvent) arg;
+			if (first) {
+				first = false;
+			} else if (this.isOverUsage(event.getLink())) {
+				this.setOverUsage(event.getLink(), false);
+			}
+		}
+	}
+
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyRateLimiter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyRateLimiter.java
index d63a4ca..0c14cb6 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyRateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/dummy/DummyRateLimiter.java
@@ -28,6 +28,7 @@ import br.ufrgs.inf.bdinetr.domain.Flow;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
 import br.ufrgs.inf.bdinetr.domain.Link;
+import br.ufrgs.inf.bdinetr.domain.Observable;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
 import br.ufrgs.inf.bdinetr.domain.Router;
 
@@ -35,7 +36,7 @@ import br.ufrgs.inf.bdinetr.domain.Router;
  * @author Ingrid Nunes
  */
 public class DummyRateLimiter extends AbstractRouterComponent implements
-		RateLimiter {
+		RateLimiter, Observable {
 
 	private final Map<Flow, Double> rateLimitedflows;
 	private final Map<Ip, Double> rateLimitedIps;
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTLinkMonitor.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTLinkMonitor.java
index b8ce4ec..235d6dd 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTLinkMonitor.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTLinkMonitor.java
@@ -27,6 +27,7 @@ import java.util.Observable;
 import java.util.Observer;
 import java.util.Set;
 
+import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
 import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Router;
@@ -75,6 +76,11 @@ public class OMNeTLinkMonitor extends OMNeTRouterComponent implements
 	public void update(Observable o, Object arg) {
 		if (arg instanceof OverUsageEvent) {
 			setOverUsage(((OverUsageEvent) arg).getLink(), true);
+		} else if (arg instanceof LimitLinkEvent) {
+			LimitLinkEvent event = (LimitLinkEvent) arg;
+			if (this.isOverUsage(event.getLink())) {
+				this.setOverUsage(event.getLink(), false);
+			}
 		}
 	}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRateLimiter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRateLimiter.java
index d550ece..f009508 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRateLimiter.java
@@ -25,6 +25,7 @@ import br.ufrgs.inf.bdinetr.domain.Flow;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
 import br.ufrgs.inf.bdinetr.domain.Link;
+import br.ufrgs.inf.bdinetr.domain.Observable;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
 import br.ufrgs.inf.bdinetr.domain.Router;
 
@@ -32,7 +33,7 @@ import br.ufrgs.inf.bdinetr.domain.Router;
  * @author Alberto Egon and Ingrid Nunes
  */
 public class OMNeTRateLimiter extends OMNeTRouterComponent implements
-		RateLimiter {
+		RateLimiter, Observable {
 
 	public OMNeTRateLimiter(Router router) {
 		super(router);
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
index cc6355b..c950a6b 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
@@ -33,7 +33,7 @@ package br.ufrgs.inf.bdinetr.domain;
  * 
  * @author Ingrid Nunes
  */
-public interface RateLimiter extends RouterComponent, Observable {
+public interface RateLimiter extends RouterComponent {
 
 	public void limitFlow(Flow flow, double rate);
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
index b2b54ca..7a215d5 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
@@ -24,38 +24,24 @@ package br.ufrgs.inf.bdinetr;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Observable;
-import java.util.Observer;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import br.ufrgs.inf.bdinetr.agent.RouterAgent;
-import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
-import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
-import br.ufrgs.inf.bdinetr.domain.RateLimiter;
-import br.ufrgs.inf.bdinetr.domain.Role;
 import br.ufrgs.inf.bdinetr.domain.Router;
 
 /**
  * @author Ingrid Nunes
  */
-public class Network implements Observer {
+public class Network {
 
-	private final Log log;
 	private final Map<Router, RouterAgent> routerAgents;
 
 	public Network() {
-		this.log = LogFactory.getLog(this.getClass());
 		this.routerAgents = new HashMap<>();
 	}
 
 	public void addRouter(Router router) {
 		this.routerAgents.put(router, new RouterAgent(router));
-		if (router.hasRole(Role.RATE_LIMITER)) {
-			((RateLimiter) router.getRole(Role.RATE_LIMITER)).addObserver(this);
-		}
 	}
 
 	public RouterAgent getAgent(Router router) {
@@ -70,21 +56,4 @@ public class Network implements Observer {
 		return routerAgents.keySet();
 	}
 
-	@Override
-	public void update(Observable o, Object arg) {
-		if (arg instanceof LimitLinkEvent) {
-			LimitLinkEvent event = (LimitLinkEvent) arg;
-			for (Router router : getRouters()) {
-				if (router.hasRole(Role.LINK_MONITOR)) {
-					LinkMonitor lm = (LinkMonitor) router
-							.getRole(Role.LINK_MONITOR);
-					if (lm.isOverUsage(event.getLink())) {
-						log.info("Updating link monitors...");
-						lm.setOverUsage(event.getLink(), false);
-					}
-				}
-			}
-		}
-	}
-
 }