Details
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
index 3c6066d..61384ba 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/AnomalyDetectionCapability.java
@@ -112,7 +112,7 @@ public class AnomalyDetectionCapability extends RouterAgentCapability implements
@Override
public void generateGoals(GoalUpdateSet goalUpdateSet) {
- // Anomalous(ip) AND not Restricted(ip) --> goal(Restricted(ip)) AND goal(belief(Anomalous(ip))
+ // Anomalous(ip) AND not Restricted(ip) --> goal(Restricted(ip)) AND goal(?belief(Anomalous(ip))
Set<Belief<?, ?>> anomalousIpBeliefs = getBeliefBase()
.getBeliefsByType(Anomalous.class);
for (Belief<?, ?> belief : anomalousIpBeliefs) {
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
index 501f153..31b1d95 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/ClassifierCapability.java
@@ -29,12 +29,16 @@ import bdi4jade.belief.Belief;
import bdi4jade.belief.PropositionalBelief;
import bdi4jade.core.Capability;
import bdi4jade.core.GoalUpdateSet;
+import bdi4jade.event.GoalEvent;
import bdi4jade.goal.BeliefPresentGoal;
+import bdi4jade.goal.GoalStatus;
import bdi4jade.goal.GoalTemplateFactory;
import bdi4jade.plan.DefaultPlan;
import bdi4jade.plan.Plan;
+import bdi4jade.plan.Plan.EndState;
import bdi4jade.plan.planbody.BeliefGoalPlanBody;
import bdi4jade.reasoning.OptionGenerationFunction;
+import br.ufrgs.inf.bdinetr.agent.RouterAgent.RootCapability.ExportFlows;
import br.ufrgs.inf.bdinetr.domain.Classifier;
import br.ufrgs.inf.bdinetr.domain.Flow;
import br.ufrgs.inf.bdinetr.domain.Ip;
@@ -54,31 +58,53 @@ public class ClassifierCapability extends RouterAgentCapability implements
private static final long serialVersionUID = -3493377510830902961L;
private Ip ip;
+ private boolean flowsExported;
@Override
public void execute() {
- role.turnFlowExporterOn();
- Set<Flow> malicious = role.classifyFlows(ip);
-
- for (Flow flow : malicious) {
- belief(new Threat(flow), true);
- }
-
- // Exists flow.(threat(flow) AND ip = dst(flow)) --> not Benign(ip)
- // nExists flow.(threat(flow) AND ip = dst(flow)) --> Benign(ip)
- boolean exists = false;
- Set<Belief<?, ?>> threatBeliefs = getBeliefBase().getBeliefsByType(
- Threat.class);
- for (Belief<?, ?> belief : threatBeliefs) {
- PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) belief;
- assert threat.getValue();
-
- if (ip.equals(threat.getName().getFlow().getDstIp())) {
- exists = true;
- break;
+ if (!flowsExported) {
+ dispatchSubgoalAndListen(new ExportFlows(ip));
+ this.flowsExported = true;
+ } else {
+ GoalEvent event = getGoalEvent();
+ if (event != null) {
+ if (GoalStatus.ACHIEVED.equals(event.getStatus())) {
+ Set<Flow> malicious = role.classifyFlows(ip);
+
+ for (Flow flow : malicious) {
+ belief(new Threat(flow), true);
+ }
+
+ // Exists flow.(threat(flow) AND ip = dst(flow)) --> not
+ // Benign(ip)
+ // nExists flow.(threat(flow) AND ip = dst(flow)) -->
+ // Benign(ip)
+ boolean exists = false;
+ Set<Belief<?, ?>> threatBeliefs = getBeliefBase()
+ .getBeliefsByType(Threat.class);
+ for (Belief<?, ?> belief : threatBeliefs) {
+ PropositionalBelief<Threat> threat = (PropositionalBelief<Threat>) belief;
+ assert threat.getValue();
+
+ if (ip.equals(threat.getName().getFlow().getDstIp())) {
+ exists = true;
+ break;
+ }
+ }
+ belief(new Benign(ip), !exists);
+ } else {
+ setEndState(EndState.FAILED);
+ }
+ } else {
+ block();
}
}
- belief(new Benign(ip), !exists);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ this.flowsExported = false;
}
@Parameter(direction = Direction.IN)
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java
new file mode 100644
index 0000000..5641666
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/FlowExporterCapability.java
@@ -0,0 +1,53 @@
+package br.ufrgs.inf.bdinetr.agent;
+
+import bdi4jade.annotation.Parameter;
+import bdi4jade.annotation.Parameter.Direction;
+import bdi4jade.goal.GoalTemplateFactory;
+import bdi4jade.plan.DefaultPlan;
+import bdi4jade.plan.Plan;
+import bdi4jade.plan.Plan.EndState;
+import bdi4jade.plan.planbody.AbstractPlanBody;
+import br.ufrgs.inf.bdinetr.agent.RouterAgent.RootCapability.ExportFlows;
+import br.ufrgs.inf.bdinetr.domain.FlowExporter;
+import br.ufrgs.inf.bdinetr.domain.Ip;
+import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
+
+public class FlowExporterCapability extends RouterAgentCapability {
+
+ public class ExportFlowsPlanBody extends AbstractPlanBody {
+ private static final long serialVersionUID = -3493377510830902961L;
+
+ private Ip ip;
+
+ @Override
+ public void action() {
+ role.turnFlowExporterOn();
+ setEndState(EndState.SUCCESSFUL);
+ }
+
+ @Parameter(direction = Direction.IN)
+ public void setIp(Ip ip) {
+ this.ip = ip;
+ }
+ }
+
+ private static final long serialVersionUID = -1705728861020677126L;
+
+ @bdi4jade.annotation.Plan
+ private Plan exportFlows;
+ @bdi4jade.annotation.TransientBelief
+ private final FlowExporter role;
+
+ public FlowExporterCapability(FlowExporter flowExporter) {
+ this.role = flowExporter;
+
+ exportFlows = new DefaultPlan(
+ GoalTemplateFactory.goalOfType(ExportFlows.class),
+ ExportFlowsPlanBody.class);
+ }
+
+ @Override
+ public RoleType getRole() {
+ return RoleType.FLOW_EXPORTER;
+ }
+}
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 b69dbbc..7bfb469 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/LinkMonitorCapability.java
@@ -70,7 +70,7 @@ public class LinkMonitorCapability extends RouterAgentCapability implements
@Override
public void generateGoals(GoalUpdateSet goalUpdateSet) {
- // OverUsage(link) AND not AttackPrevented(link) --> goal(AttackPrevent(link)) AND goal(belief(RegularUsage(link)))
+ // OverUsage(link) AND not AttackPrevented(link) --> goal(AttackPrevented(link)) AND goal(belief(?RegularUsage(link)))
Set<Belief<?, ?>> overUsageBeliefs = getBeliefBase().getBeliefsByType(
OverUsage.class);
for (Belief<?, ?> belief : overUsageBeliefs) {
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
index 5c2dd27..bc2d6fe 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RequestBeliefGoalPlanBody.java
@@ -39,8 +39,8 @@ import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
*/
public class RequestBeliefGoalPlanBody extends BeliefGoalPlanBody {
- public static final int MSG_TIME_OUT = 10;
- public static final int ANSWER_TIME_OUT = 100;
+ public static final int MSG_TIME_OUT = 100;
+ public static final int ANSWER_TIME_OUT = 1000;
private enum State {
Resquesting, ReceivingResponses, Selecting, AchievingGoal, Ended;
@@ -154,6 +154,7 @@ public class RequestBeliefGoalPlanBody extends BeliefGoalPlanBody {
}
} catch (Exception exc) {
log.error(exc);
+ exc.printStackTrace();
setEndState(EndState.FAILED);
}
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RespondBeliefGoalPlanBody.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RespondBeliefGoalPlanBody.java
index 72ea425..5af8f6e 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RespondBeliefGoalPlanBody.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RespondBeliefGoalPlanBody.java
@@ -82,7 +82,7 @@ public class RespondBeliefGoalPlanBody extends AbstractPlanBody {
dispatchSubgoalAndListen(beliefGoal);
this.state = State.AchievingBeliefGoal;
} else {
- setEndState(EndState.SUCCESSFULL);
+ setEndState(EndState.SUCCESSFUL);
log.info("Proposal rejected.");
this.state = State.Ended;
return;
@@ -113,6 +113,7 @@ public class RespondBeliefGoalPlanBody extends AbstractPlanBody {
}
} catch (Exception exc) {
log.error(exc);
+ exc.printStackTrace();
setEndState(EndState.FAILED);
}
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
index df54a2e..747d09f 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/RouterAgent.java
@@ -31,6 +31,8 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import bdi4jade.annotation.Parameter;
+import bdi4jade.annotation.Parameter.Direction;
import bdi4jade.belief.Belief;
import bdi4jade.belief.TransientBelief;
import bdi4jade.core.BDIAgent;
@@ -43,6 +45,8 @@ import bdi4jade.plan.Plan;
import bdi4jade.reasoning.AgentPlanSelectionStrategy;
import br.ufrgs.inf.bdinetr.domain.AnomalyDetection;
import br.ufrgs.inf.bdinetr.domain.Classifier;
+import br.ufrgs.inf.bdinetr.domain.FlowExporter;
+import br.ufrgs.inf.bdinetr.domain.Ip;
import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
import br.ufrgs.inf.bdinetr.domain.PReSETRole.RoleType;
import br.ufrgs.inf.bdinetr.domain.PReSETRouter;
@@ -56,6 +60,23 @@ public class RouterAgent extends SingleCapabilityAgent implements
public static class RootCapability extends Capability {
+ public static class ExportFlows implements Goal {
+
+ private static final long serialVersionUID = -7114413010093171144L;
+
+ private Ip ip;
+
+ public ExportFlows(Ip ip) {
+ this.ip = ip;
+ }
+
+ @Parameter(direction = Direction.IN)
+ public Ip getIp() {
+ return ip;
+ }
+
+ }
+
public static final String ROUTER_BELIEF = "router";
private static final long serialVersionUID = -2156730094556459899L;
@@ -114,6 +135,11 @@ public class RouterAgent extends SingleCapabilityAgent implements
new ClassifierCapability((Classifier) router
.getRole(RoleType.CLASSIFIER)));
}
+ if (router.hasRole(RoleType.FLOW_EXPORTER)) {
+ this.getCapability().addPartCapability(
+ new FlowExporterCapability((FlowExporter) router
+ .getRole(RoleType.FLOW_EXPORTER)));
+ }
setPlanSelectionStrategy(this);
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index a802cd0..28e0704 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -75,7 +75,8 @@ public class BDINetRApp {
routers.add(new PReSETRouter(new Ip("RouterLM"), RoleType.LINK_MONITOR
.getId()));
routers.add(new PReSETRouter(new Ip("RouterRLCA"),
- RoleType.RATE_LIMITER.getId() | RoleType.CLASSIFIER.getId()
+ RoleType.RATE_LIMITER.getId() | RoleType.FLOW_EXPORTER.getId()
+ | RoleType.CLASSIFIER.getId()
| RoleType.ANOMALY_DETECTION.getId()));
Link affectedLink = new Link("AFFECTED_LINK");
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
index ca7b727..095f129 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Classifier.java
@@ -25,8 +25,6 @@ import java.util.HashSet;
import java.util.Set;
/**
- * flowexporter addOperation: "victim:flow:idle:" remoteName: "setthreshold".
- *
* event at:
*
* "classification" put: (factory/event create: #( "value_name" "value_source"
@@ -54,8 +52,4 @@ public class Classifier extends PReSETRole {
return flows;
}
- public void turnFlowExporterOn() {
-
- }
-
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java
new file mode 100644
index 0000000..bce88dc
--- /dev/null
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/FlowExporter.java
@@ -0,0 +1,39 @@
+//----------------------------------------------------------------------------
+// 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
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// To contact the authors:
+// http://inf.ufrgs.br/prosoft/bdi4jade/
+//
+//----------------------------------------------------------------------------
+package br.ufrgs.inf.bdinetr.domain;
+
+/**
+ * flowexporter addOperation: "victim:flow:idle:" remoteName: "setthreshold".
+ *
+ * @author Ingrid Nunes
+ */
+public class FlowExporter extends PReSETRole {
+
+ public FlowExporter(PReSETRouter router) {
+ super(router);
+ }
+
+ public void turnFlowExporterOn() {
+
+ }
+
+}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRole.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRole.java
index 2ce637d..663b5a5 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRole.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRole.java
@@ -31,7 +31,8 @@ public abstract class PReSETRole {
public enum RoleType {
- ANOMALY_DETECTION(1), CLASSIFIER(2), LINK_MONITOR(4), RATE_LIMITER(8);
+ ANOMALY_DETECTION(1), CLASSIFIER(2), FLOW_EXPORTER(4), LINK_MONITOR(8), RATE_LIMITER(
+ 16);
private final int id;
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRouter.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRouter.java
index 8e989af..8a94996 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRouter.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/PReSETRouter.java
@@ -50,6 +50,9 @@ public class PReSETRouter {
if (RoleType.CLASSIFIER.isPresent(roles)) {
this.roles.put(RoleType.CLASSIFIER, new Classifier(this));
}
+ if (RoleType.FLOW_EXPORTER.isPresent(roles)) {
+ this.roles.put(RoleType.FLOW_EXPORTER, new FlowExporter(this));
+ }
}
@Override