bdi-network-resilience

Finished draft

10/12/2014 3:02:06 AM

Details

diff --git a/network-resilience/compile-gateway.sh b/network-resilience/compile-gateway.sh
new file mode 100644
index 0000000..a3f9a52
--- /dev/null
+++ b/network-resilience/compile-gateway.sh
@@ -0,0 +1,2 @@
+find ./src -name "*.java" > allSource.log
+javac -classpath ./lib/xmlrpc-client-3.1.3.jar:./lib/xmlrpc-common-3.1.3.jar:./lib/xmlrpc-server-3.1.3.jar:./lib/log4j-1.2.17.jar.jar:./lib/jade-4.3.2.jar.jar:./lib/commons-logging-1.1.3.jar:./lib/commons-codec-1.9.jar:./lib/bdi4jade.jar @allSource.log
diff --git a/network-resilience/run-gateway.sh b/network-resilience/run-gateway.sh
new file mode 100644
index 0000000..f2f68d0
--- /dev/null
+++ b/network-resilience/run-gateway.sh
@@ -0,0 +1 @@
+java -cp ./lib/xmlrpc-client-3.1.3.jar:./lib/xmlrpc-common-3.1.3.jar:./lib/xmlrpc-server-3.1.3.jar:./lib/log4j-1.2.17.jar.jar:./lib/jade-4.3.2.jar.jar:./lib/commons-logging-1.1.3.jar:./lib/commons-codec-1.9.jar:./lib/bdi4jade.jar:./src br.ufrgs.inf.bdinetr.BDINetRApp
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 054a4e0..d383e93 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 = 0.5;
-	public static final double IP_LIMIT_RATE = 0.5;
-	public static final double LINK_LIMIT_RATE = 0.5;
+	public static final double FLOW_LIMIT_RATE = 90;
+	public static final double IP_LIMIT_RATE = 50;
+	public static final double LINK_LIMIT_RATE = 90;
 	private static final long serialVersionUID = -1705728861020677126L;
 
 	@bdi4jade.annotation.Plan
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 e0c644d..6ae53bc 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
@@ -22,6 +22,7 @@
 package br.ufrgs.inf.bdinetr.domain.omnet;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
 import br.ufrgs.inf.bdinetr.domain.AnomalyDetection;
@@ -37,25 +38,43 @@ import br.ufrgs.inf.bdinetr.domain.omnet.event.AnomalousEvent;
 public class OMNeTAnomalyDetection extends OMNeTRouterComponent implements
 		AnomalyDetection, Observer {
 
+	private final Set<AnomalousEvent> events;
+
 	public OMNeTAnomalyDetection(Router router) {
 		super(router);
+		this.events = new HashSet<>();
 		EventBroker.getInstance().attachObserver(this);
 	}
 
 	@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"));
+		synchronized (events) {
+			while (events.isEmpty()) {
+				try {
+					events.wait();
+				} catch (InterruptedException e) {
+					log.warn(e);
+				}
+			}
+
+			Set<Ip> outliers = new HashSet<>();
+			Iterator<AnomalousEvent> it = events.iterator();
+			while (it.hasNext()) {
+				AnomalousEvent event = it.next();
+				outliers.add(event.getIp());
+				it.remove();
+			}
+			return outliers;
 		}
-		return intrusions;
 	}
 
 	@Override
 	public void update(Object o, Object arg) {
 		if (arg instanceof AnomalousEvent) {
-			// TODO Auto-generated method stub
+			synchronized (events) {
+				events.add((AnomalousEvent) arg);
+				events.notifyAll();
+			}
 		}
 	}
 
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 e9333b3..e4042ac 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
@@ -22,6 +22,7 @@
 package br.ufrgs.inf.bdinetr.domain.omnet;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
 import br.ufrgs.inf.bdinetr.domain.Classifier;
@@ -37,30 +38,43 @@ import br.ufrgs.inf.bdinetr.domain.omnet.event.ThreatEvent;
 public class OMNeTClassifier extends OMNeTRouterComponent implements
 		Classifier, Observer {
 
+	private final Set<ThreatEvent> events;
+
 	public OMNeTClassifier(Router router) {
 		super(router);
+		this.events = new HashSet<>();
 		EventBroker.getInstance().attachObserver(this);
 	}
 
 	@Override
 	public Set<Flow> classifyFlows(Ip ip) {
-		Set<Flow> flows = new HashSet<>();
-		if (ip.getAddress().equals("victim1")) {
-			flows.add(new Flow(new Ip("DDoS1"), 80, new Ip("victim1"), 80,
-					"http"));
-			flows.add(new Flow(new Ip("DDoS2"), 80, new Ip("victim1"), 80,
-					"http"));
-		} else if (ip.getAddress().equals("victim2")) {
-			flows.add(new Flow(new Ip("DDoS3"), 80, new Ip("victim2"), 80,
-					"http"));
+		synchronized (events) {
+			while (events.isEmpty()) {
+				try {
+					events.wait();
+				} catch (InterruptedException e) {
+					log.warn(e);
+				}
+			}
+
+			Set<Flow> flows = new HashSet<>();
+			Iterator<ThreatEvent> it = events.iterator();
+			while (it.hasNext()) {
+				ThreatEvent event = it.next();
+				flows.add(event.getFlow());
+				it.remove();
+			}
+			return flows;
 		}
-		return flows;
 	}
 
 	@Override
 	public void update(Object o, Object arg) {
 		if (arg instanceof ThreatEvent) {
-			// TODO Auto-generated method stub
+			synchronized (events) {
+				events.add((ThreatEvent) arg);
+				events.notifyAll();
+			}
 		}
 	}
 
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 396b75a..97847c6 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
@@ -45,7 +45,7 @@ public class OMNeTRateLimiter extends OMNeTRouterComponent implements
 		params[1] = flow.getSrcIp().getAddress();
 		params[2] = flow.getDstIp().getAddress();
 		params[3] = flow.getProtocol();
-		params[4] = new Integer(90); // FIXME
+		params[4] = rate;
 		invoke("limitflow", params);
 	}
 
@@ -54,7 +54,7 @@ public class OMNeTRateLimiter extends OMNeTRouterComponent implements
 		Object[] params = new Object[3];
 		params[0] = "Inet.sas1.core0.rateLimiter";
 		params[1] = ip.getAddress();
-		params[2] = new Integer(50); // FIXME
+		params[2] = rate;
 		invoke("limitip", params);
 	}
 
@@ -63,7 +63,7 @@ public class OMNeTRateLimiter extends OMNeTRouterComponent implements
 		Object[] params = new Object[3];
 		params[0] = "Inet.sas1.core0.rateLimiter";
 		params[1] = link.getId();
-		params[2] = new Integer(90); // FIXME
+		params[2] = rate;
 		invoke("limitlink", params);
 
 		notifyObservers(new LimitLinkEvent(link));