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);