bdi-network-resilience

removing XMLRPC and using simple tcp sockets + rate limiter

6/5/2016 9:01:41 PM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index cc9feea..f425e0e 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -72,7 +72,7 @@ public class BDINetRApp {
 
 	private static final Set<Link> AFFECTED_LINKS;
 	private static final Network NETWORK;
-	private static final SimulationType SIMULATION_TYPE = SimulationType.SIMPLE_NETWORK;
+	private static final SimulationType SIMULATION_TYPE = SimulationType.ESCAPE;
 
 	static {
 		PropertyConfigurator.configure(BDINetRApp.class.getResource("log4j.properties"));
@@ -84,48 +84,49 @@ public class BDINetRApp {
 		switch (SIMULATION_TYPE) {
 		case OMNeT:
 			factory = new OMNeTRouterComponentFactory();
-			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.idsModule"), "ids_one", Role.ANOMALY_DETECTION.getId(),
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.idsModule"), 8080, "ids_one", Role.ANOMALY_DETECTION.getId(),
 					factory));
-			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.linkMonitor"), "linkmonitor_one",
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.linkMonitor"), 8080, "linkmonitor_one",
 					Role.LINK_MONITOR.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.classifier"), "classifier_one",
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.classifier"), 8080, "classifier_one",
 					Role.CLASSIFIER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.flowExporter"), "flowexporter_one",
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.flowExporter"), 8080, "flowexporter_one",
 					Role.FLOW_EXPORTER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.rateLimiter"), "ratelimiter_one",
+			NETWORK.addRouter(new Router(new Ip("Inet.sas1.core0.rateLimiter"), 8080, "ratelimiter_one",
 					Role.RATE_LIMITER.getId(), factory));
 			break;
 		case SIMPLE_NETWORK:
 			factory = new DummyRouterComponentFactory();
 			NETWORK.addRouter(
-					new Router(new Ip("LC+RL"), Role.LINK_MONITOR.getId() | Role.RATE_LIMITER.getId(), factory));
+					new Router(new Ip("LC+RL"), -1, Role.LINK_MONITOR.getId() | Role.RATE_LIMITER.getId(), factory));
 			NETWORK.addRouter(
-					new Router(new Ip("IPC+RL"), Role.ANOMALY_DETECTION.getId() | Role.RATE_LIMITER.getId(), factory));
+					new Router(new Ip("IPC+RL"), -1, Role.ANOMALY_DETECTION.getId() | Role.RATE_LIMITER.getId(), factory));
 			NETWORK.addRouter(
-					new Router(new Ip("FC+RL"), Role.CLASSIFIER.getId() | Role.RATE_LIMITER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("FE"), Role.FLOW_EXPORTER.getId(), factory));
+					new Router(new Ip("FC+RL"), -1, Role.CLASSIFIER.getId() | Role.RATE_LIMITER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("FE"), -1, Role.FLOW_EXPORTER.getId(), factory));
 
 			AFFECTED_LINKS.add(new Link("AFFECTED_LINK"));
 			break;
 		case COMPLEX_NETWORK:
 			factory = new DummyRouterComponentFactory();
-			NETWORK.addRouter(new Router(new Ip("RouterLM"), Role.LINK_MONITOR.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterRL"), Role.RATE_LIMITER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterAD"), Role.ANOMALY_DETECTION.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterCL"), Role.CLASSIFIER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterLM"), -1, Role.LINK_MONITOR.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterRL"), -1, Role.RATE_LIMITER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterAD"), -1, Role.ANOMALY_DETECTION.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterCL"), -1, Role.CLASSIFIER.getId(), factory));
 			NETWORK.addRouter(
-					new Router(new Ip("RouterCL+FE"), Role.CLASSIFIER.getId() | Role.FLOW_EXPORTER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("RouterFE"), Role.FLOW_EXPORTER.getId(), factory));
+					new Router(new Ip("RouterCL+FE"), -1, Role.CLASSIFIER.getId() | Role.FLOW_EXPORTER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterFE"), -1, Role.FLOW_EXPORTER.getId(), factory));
 
 			AFFECTED_LINKS.add(new Link("AFFECTED_LINK"));
 			break;
 		case ESCAPE:
 			factory = new EscapeRouterComponentFactory();
-			NETWORK.addRouter(new Router(new Ip("Link Monitor"), Role.LINK_MONITOR.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Rate Limiter"), Role.RATE_LIMITER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Anomaly Detection"), Role.ANOMALY_DETECTION.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Classifier"), Role.CLASSIFIER.getId(), factory));
-			NETWORK.addRouter(new Router(new Ip("Flow Exporter"), Role.FLOW_EXPORTER.getId(), factory));
+			//bdi4jade won't send any data to link monitor
+			NETWORK.addRouter(new Router(new Ip("whatever"), -1, Role.LINK_MONITOR.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("192.168.123.11"), 5550, Role.RATE_LIMITER.getId(), factory));
+			//NETWORK.addRouter(new Router(new Ip("Anomaly Detection"), Role.ANOMALY_DETECTION.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("192.168.123.11"), 5551, Role.CLASSIFIER.getId(), factory));
+			//NETWORK.addRouter(new Router(new Ip("Flow Exporter"), Role.FLOW_EXPORTER.getId(), factory));
 
 			// AFFECTED_LINKS.add(new Link("AFFECTED_LINK"));
 			break;
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeLinkMonitor.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeLinkMonitor.java
index c8fb2ef..7ec9cec 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeLinkMonitor.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeLinkMonitor.java
@@ -76,11 +76,15 @@ public class EscapeLinkMonitor extends EscapeRouterComponent implements
 
 	@Override
 	public synchronized void update(Observable o, Object arg) {
+		log.info("update called = " + arg.getClass());
+		
 		if (arg instanceof OverUsageEvent && !received) {
+			log.info("link: " + ((OverUsageEvent) arg).getLink());
 			setOverUsage(((OverUsageEvent) arg).getLink(), true);
 			this.received = true;
 		} else if (arg instanceof LimitLinkEvent) {
 			LimitLinkEvent event = (LimitLinkEvent) arg;
+			log.info("link: " + ((LimitLinkEvent) arg).getLink());
 			if (this.isOverUsage(event.getLink())) {
 				this.setOverUsage(event.getLink(), false);
 			}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRateLimiter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRateLimiter.java
index f86a2bf..e6aa849 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRateLimiter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRateLimiter.java
@@ -1,5 +1,5 @@
 //----------------------------------------------------------------------------
-// Copyright (C) 2011  Ingrid Nunes, Frederico Schardong
+// Copyright (C) 2011  Ingrid Nunes
 // 
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -21,9 +21,6 @@
 //----------------------------------------------------------------------------
 package br.ufrgs.inf.bdinetr.domain.escape;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import br.ufrgs.inf.bdinetr.domain.Flow;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
@@ -31,54 +28,63 @@ 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;
+import br.ufrgs.inf.bdinetr.domain.omnet.OMNeTRouterComponent;
 
 /**
- * @author Ingrid Nunes, Frederico Schardong
+ * @author Alberto Egon, Ingrid Nunes, Frederico Schardong
  */
-public class EscapeRateLimiter extends AbstractRouterComponent implements
+public class EscapeRateLimiter extends EscapeRouterComponent implements
 		RateLimiter, Observable {
 
-	private final Map<Flow, Integer> rateLimitedflows;
-	private final Map<Ip, Integer> rateLimitedIps;
-	private final Map<Link, Integer> rateLimitedLinks;
-
 	public EscapeRateLimiter(Router router) {
 		super(router);
-		this.rateLimitedLinks = new HashMap<>();
-		this.rateLimitedIps = new HashMap<>();
-		this.rateLimitedflows = new HashMap<>();
 	}
 
 	@Override
 	public void limitFlow(Flow flow, int rate) {
-		this.rateLimitedflows.put(flow, rate);
+		Object[] params = new Object[5];
+		params[0] = router.getIp().getAddress();
+		params[1] = flow.getSrcIp().getAddress();
+		params[2] = flow.getDstIp().getAddress();
+		params[3] = flow.getProtocol();
+		params[4] = rate;
+		invoke("limitflow", params);
 	}
 
 	@Override
 	public void limitIp(Ip ip, int rate) {
-		this.rateLimitedIps.put(ip, rate);
+		Object[] params = new Object[3];
+		params[0] = router.getIp().getAddress();
+		params[1] = ip.getAddress();
+		params[2] = rate;
+		invoke("limitip", params);
 	}
 
 	@Override
 	public void limitLink(Link link, int rate) {
-		this.rateLimitedLinks.put(link, rate);
+		Object[] params = new Object[3];
+		params[0] = router.getIp().getAddress();
+		params[1] = link.getId();
+		params[2] = rate;
+		invoke("limitlink", params);
+
 		setChanged();
 		notifyObservers(new LimitLinkEvent(link));
 	}
 
 	@Override
 	public void unlimitFlow(Flow flow) {
-		this.rateLimitedflows.remove(flow);
+		// TODO unsupported by OMNeT
 	}
 
 	@Override
 	public void unlimitIp(Ip ip) {
-		this.rateLimitedIps.remove(ip);
+		// TODO unsupported by OMNeT
 	}
 
 	@Override
 	public void unlimitLink(Link link) {
-		this.rateLimitedLinks.remove(link);
+		// TODO unsupported by OMNeT
 	}
 
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRouterComponent.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRouterComponent.java
index e795682..17c0fa7 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRouterComponent.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/escape/EscapeRouterComponent.java
@@ -21,64 +21,54 @@
 //----------------------------------------------------------------------------
 package br.ufrgs.inf.bdinetr.domain.escape;
 
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
 import java.util.Observable;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
 import br.ufrgs.inf.bdinetr.domain.Router;
 import br.ufrgs.inf.bdinetr.domain.RouterComponent;
 
 /**
- * @author Alberto Egon and Ingrid Nunes
+ * @author Alberto Egon, Ingrid Nunes and Frederico Schardong
  */
-public abstract class EscapeRouterComponent extends Observable implements
-		RouterComponent {
-
-	private static final String OMNeT_ADDRESS = "http://localhost:8080/RPC2";
-	
-	private final XmlRpcClient adaptorRPC;
+public abstract class EscapeRouterComponent extends Observable implements RouterComponent {
 	protected final Log log;
 	protected final Router router;
+	
 
 	public EscapeRouterComponent(Router router) {
 		this.router = router;
 		this.log = LogFactory.getLog(getClass());
-
-		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
-
-		try {
-			config.setServerURL(new URL(OMNeT_ADDRESS));
-		} catch (MalformedURLException mue) {
-			mue.printStackTrace();
-		}
-
-		this.adaptorRPC = new XmlRpcClient();
-		this.adaptorRPC.setConfig(config);
 	}
 
-	public Object invoke(String remoteOp, Object[] args) {
-		log.info("Invoking operation: " + remoteOp);
+	public void invoke(String remoteOp, Object[] args) {
+		String socket_arg = remoteOp;
+		
 		for (int i = 0; i < args.length; i++) {
-			log.info("args[" + i + "] = " + args[i]);
+			socket_arg += ";" + args[i];
 		}
 
 		Object result = null;
 
 		try {
-			result = this.adaptorRPC.execute(router.getType() + "." + remoteOp,
-					args);
-		} catch (XmlRpcException xre) {
-			xre.printStackTrace();
+			Socket clientSocket = new Socket(router.getIp().getAddress(), router.getPort());
+			
+			DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
+			outToServer.writeBytes(socket_arg);
+			log.info("Sent to server: " + socket_arg);
+			
+			clientSocket.close();
+		} catch (IOException ioe) {
+			ioe.printStackTrace();
 		}
 
 		log.info("Done");
-		return result;
+		//apparently no one needs this return
+		//return result;
 	}
 
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
index 92c283f..a18b5a6 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
@@ -31,15 +31,17 @@ public class Router {
 
 	private final Map<Role, RouterComponent> components;
 	private final Ip ip;
+	private final int port;
 	private final String type;
 
-	public Router(final Ip ip, int roles, AbstractRouterComponentFactory factory) {
-		this(ip, null, roles, factory);
+	public Router(final Ip ip, int port, int roles, AbstractRouterComponentFactory factory) {
+		this(ip, port, null, roles, factory);
 	}
 
-	public Router(final Ip ip, final String type, int roles,
+	public Router(final Ip ip, int port, final String type, int roles,
 			AbstractRouterComponentFactory factory) {
 		this.ip = ip;
+		this.port = port;
 		this.type = type;
 		this.components = new HashMap<>();
 		for (Role role : Role.values()) {
@@ -71,6 +73,10 @@ public class Router {
 		return ip;
 	}
 
+	public int getPort() {
+		return port;
+	}
+
 	public RouterComponent getRole(Role role) {
 		return components.get(role);
 	}