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