bdi-network-resilience

Final

10/13/2014 3:10:14 PM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
index d383e93..ffb1044 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RateLimiterCapability.java
@@ -129,9 +129,9 @@ public class RateLimiterCapability extends RouterAgentCapability {
 		}
 	}
 
-	public static final double FLOW_LIMIT_RATE = 90;
-	public static final double IP_LIMIT_RATE = 50;
-	public static final double LINK_LIMIT_RATE = 90;
+	public static final int FLOW_LIMIT_RATE = 90;
+	public static final int IP_LIMIT_RATE = 50;
+	public static final int LINK_LIMIT_RATE = 90;
 	private static final long serialVersionUID = -1705728861020677126L;
 
 	@bdi4jade.annotation.Plan
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index 57ea840..0a7af6a 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -68,7 +68,7 @@ public class BDINetRApp {
 
 	private static final Set<Link> AFFECTED_LINKS;
 	private static final Network NETWORK;
-	private static final boolean OMNeT = false;
+	private static final boolean OMNeT = true;
 
 	static {
 		PropertyConfigurator.configure(BDINetRApp.class
@@ -79,17 +79,17 @@ public class BDINetRApp {
 
 		if (OMNeT) {
 			AbstractRouterComponentFactory factory = new OMNeTRouterComponentFactory();
-			Ip ip = new Ip("http://localhost:8080/RPC2");
-			NETWORK.addRouter(new Router(ip, "ids_one", Role.ANOMALY_DETECTION
-					.getId(), factory));
-			NETWORK.addRouter(new Router(ip, "linkmonitor_one",
-					Role.LINK_MONITOR.getId(), factory));
-			NETWORK.addRouter(new Router(ip, "classifier_one", Role.CLASSIFIER
-					.getId(), factory));
-			NETWORK.addRouter(new Router(ip, "flowexporter_one",
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.idsModule"),
+					"ids_one", Role.ANOMALY_DETECTION.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.linkMonitor"),
+					"linkmonitor_one", Role.LINK_MONITOR.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.classifier"),
+					"classifier_one", Role.CLASSIFIER.getId(), factory));
+			NETWORK.addRouter(new Router(
+					new Ip("Inet.sas1.core0.flowExporter"), "flowexporter_one",
 					Role.FLOW_EXPORTER.getId(), factory));
-			NETWORK.addRouter(new Router(ip, "ratelimiter_one",
-					Role.RATE_LIMITER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.rateLimiter"),
+					"ratelimiter_one", Role.RATE_LIMITER.getId(), factory));
 		} else {
 			AbstractRouterComponentFactory factory = new DummyRouterComponentFactory();
 			NETWORK.addRouter(new Router(new Ip("RouterLM"), Role.LINK_MONITOR
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 0c14cb6..9faba12 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
@@ -38,9 +38,9 @@ import br.ufrgs.inf.bdinetr.domain.Router;
 public class DummyRateLimiter extends AbstractRouterComponent implements
 		RateLimiter, Observable {
 
-	private final Map<Flow, Double> rateLimitedflows;
-	private final Map<Ip, Double> rateLimitedIps;
-	private final Map<Link, Double> rateLimitedLinks;
+	private final Map<Flow, Integer> rateLimitedflows;
+	private final Map<Ip, Integer> rateLimitedIps;
+	private final Map<Link, Integer> rateLimitedLinks;
 
 	public DummyRateLimiter(Router router) {
 		super(router);
@@ -50,17 +50,17 @@ public class DummyRateLimiter extends AbstractRouterComponent implements
 	}
 
 	@Override
-	public void limitFlow(Flow flow, double rate) {
+	public void limitFlow(Flow flow, int rate) {
 		this.rateLimitedflows.put(flow, rate);
 	}
 
 	@Override
-	public void limitIp(Ip ip, double rate) {
+	public void limitIp(Ip ip, int rate) {
 		this.rateLimitedIps.put(ip, rate);
 	}
 
 	@Override
-	public void limitLink(Link link, double rate) {
+	public void limitLink(Link link, int rate) {
 		this.rateLimitedLinks.put(link, rate);
 		setChanged();
 		notifyObservers(new LimitLinkEvent(link));
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTAnomalyDetection.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTAnomalyDetection.java
index ed685d2..782d936 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTAnomalyDetection.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTAnomalyDetection.java
@@ -49,6 +49,11 @@ public class OMNeTAnomalyDetection extends OMNeTRouterComponent implements
 
 	@Override
 	public Set<Ip> detectIntrusion(Link link) {
+		Object[] params = new Object[2];
+		params[0] = router.getIp().getAddress();
+		params[1] = "on";
+		invoke("togglereport", params);
+
 		synchronized (events) {
 			while (events.isEmpty()) {
 				try {
@@ -70,7 +75,7 @@ public class OMNeTAnomalyDetection extends OMNeTRouterComponent implements
 	}
 
 	@Override
-	public void update(Observable o, Object arg) {
+	public synchronized void update(Observable o, Object arg) {
 		if (arg instanceof AnomalousEvent) {
 			synchronized (events) {
 				events.add((AnomalousEvent) arg);
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTClassifier.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTClassifier.java
index 8fbb33b..0fdcbd2 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTClassifier.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTClassifier.java
@@ -39,6 +39,8 @@ import br.ufrgs.inf.bdinetr.domain.omnet.event.ThreatEvent;
 public class OMNeTClassifier extends OMNeTRouterComponent implements
 		Classifier, Observer {
 
+	private static final long WAITING_TIME = 70000; // 70s
+
 	private final Set<ThreatEvent> events;
 
 	public OMNeTClassifier(Router router) {
@@ -50,14 +52,24 @@ public class OMNeTClassifier extends OMNeTRouterComponent implements
 	@Override
 	public Set<Flow> classifyFlows(Ip ip) {
 		synchronized (events) {
-			while (events.isEmpty()) {
+			long begin = System.currentTimeMillis();
+			long elapsed = System.currentTimeMillis() - begin;
+			while (events.isEmpty() || (elapsed < WAITING_TIME)) {
 				try {
-					events.wait();
+					log.info("Elapsed time: " + elapsed + " - Events empty: "
+							+ events.isEmpty());
+					long timeout = (WAITING_TIME - elapsed) < 0 ? 0
+							: WAITING_TIME - elapsed;
+					events.wait(timeout);
+					elapsed = System.currentTimeMillis() - begin;
 				} catch (InterruptedException e) {
 					log.warn(e);
 				}
 			}
 
+			log.info("Finished receiving Threat events. Elapsed time: "
+					+ elapsed);
+
 			Set<Flow> flows = new HashSet<>();
 			Iterator<ThreatEvent> it = events.iterator();
 			while (it.hasNext()) {
@@ -70,7 +82,7 @@ public class OMNeTClassifier extends OMNeTRouterComponent implements
 	}
 
 	@Override
-	public void update(Observable o, Object arg) {
+	public synchronized void update(Observable o, Object arg) {
 		if (arg instanceof ThreatEvent) {
 			synchronized (events) {
 				events.add((ThreatEvent) arg);
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTFlowExporter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTFlowExporter.java
index a901561..b59f341 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTFlowExporter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTFlowExporter.java
@@ -38,7 +38,7 @@ public class OMNeTFlowExporter extends OMNeTRouterComponent implements
 	@Override
 	public void turnFlowExporterOn(Ip ip) {
 		Object[] params = new Object[3];
-		params[0] = "Inet.sas1.core0.flowExporter";
+		params[0] = router.getIp().getAddress();
 		params[1] = new Integer(60);
 		params[2] = new Integer(10);
 		invoke("setthreshold", params);
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 235d6dd..2586c58 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
@@ -40,11 +40,13 @@ public class OMNeTLinkMonitor extends OMNeTRouterComponent implements
 		LinkMonitor, Observer {
 
 	private final Map<Link, Boolean> overUsageLinks;
+	private boolean received;
 
 	public OMNeTLinkMonitor(Router router) {
 		super(router);
 		this.overUsageLinks = new HashMap<>();
 		EventBroker.getInstance().addObserver(this);
+		this.received = false; 
 	}
 
 	@Override
@@ -73,9 +75,10 @@ public class OMNeTLinkMonitor extends OMNeTRouterComponent implements
 	}
 
 	@Override
-	public void update(Observable o, Object arg) {
-		if (arg instanceof OverUsageEvent) {
+	public synchronized void update(Observable o, Object arg) {
+		if (arg instanceof OverUsageEvent && !received) {
 			setOverUsage(((OverUsageEvent) arg).getLink(), true);
+			this.received = true;
 		} else if (arg instanceof LimitLinkEvent) {
 			LimitLinkEvent event = (LimitLinkEvent) arg;
 			if (this.isOverUsage(event.getLink())) {
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 f009508..8159962 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
@@ -40,9 +40,9 @@ public class OMNeTRateLimiter extends OMNeTRouterComponent implements
 	}
 
 	@Override
-	public void limitFlow(Flow flow, double rate) {
+	public void limitFlow(Flow flow, int rate) {
 		Object[] params = new Object[5];
-		params[0] = "Inet.sas1.core0.rateLimiter";
+		params[0] = router.getIp().getAddress();
 		params[1] = flow.getSrcIp().getAddress();
 		params[2] = flow.getDstIp().getAddress();
 		params[3] = flow.getProtocol();
@@ -51,18 +51,18 @@ public class OMNeTRateLimiter extends OMNeTRouterComponent implements
 	}
 
 	@Override
-	public void limitIp(Ip ip, double rate) {
+	public void limitIp(Ip ip, int rate) {
 		Object[] params = new Object[3];
-		params[0] = "Inet.sas1.core0.rateLimiter";
+		params[0] = router.getIp().getAddress();
 		params[1] = ip.getAddress();
 		params[2] = rate;
 		invoke("limitip", params);
 	}
 
 	@Override
-	public void limitLink(Link link, double rate) {
+	public void limitLink(Link link, int rate) {
 		Object[] params = new Object[3];
-		params[0] = "Inet.sas1.core0.rateLimiter";
+		params[0] = router.getIp().getAddress();
 		params[1] = link.getId();
 		params[2] = rate;
 		invoke("limitlink", params);
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRouterComponent.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRouterComponent.java
index cb78b1d..2a6655b 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRouterComponent.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/omnet/OMNeTRouterComponent.java
@@ -40,6 +40,8 @@ import br.ufrgs.inf.bdinetr.domain.RouterComponent;
 public abstract class OMNeTRouterComponent extends Observable implements
 		RouterComponent {
 
+	private static final String OMNeT_ADDRESS = "http://localhost:8080/RPC2";
+	
 	private final XmlRpcClient adaptorRPC;
 	protected final Log log;
 	protected final Router router;
@@ -51,7 +53,7 @@ public abstract class OMNeTRouterComponent extends Observable implements
 		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
 
 		try {
-			config.setServerURL(new URL(router.getIp().getAddress()));
+			config.setServerURL(new URL(OMNeT_ADDRESS));
 		} catch (MalformedURLException mue) {
 			mue.printStackTrace();
 		}
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 c950a6b..d2f332a 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/RateLimiter.java
@@ -35,11 +35,11 @@ package br.ufrgs.inf.bdinetr.domain;
  */
 public interface RateLimiter extends RouterComponent {
 
-	public void limitFlow(Flow flow, double rate);
+	public void limitFlow(Flow flow, int rate);
 
-	public void limitIp(Ip ip, double rate);
+	public void limitIp(Ip ip, int rate);
 
-	public void limitLink(Link link, double rate);
+	public void limitLink(Link link, int rate);
 
 	public void unlimitFlow(Flow flow);