sample app launched
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
index d206c97..6eaa2c3 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
@@ -6,7 +6,6 @@
import java.util.LinkedList;
import java.util.List;
-import org.onlab.onos.net.PortNumber;
import org.slf4j.Logger;
@SuppressWarnings("rawtypes")
@@ -33,29 +32,33 @@
private final Logger log = getLogger(getClass());
- List<Instruction<PortNumber>> outputs = new LinkedList<>();
+ boolean drop = false;
+
+ List<Instruction> outputs = new LinkedList<>();
// TODO: should be a list of instructions based on group objects
- List<Instruction<Object>> groups = new LinkedList<>();
+ List<Instruction> groups = new LinkedList<>();
// TODO: should be a list of instructions based on modification objects
- List<Instruction<Object>> modifications = new LinkedList<>();
+ List<Instruction> modifications = new LinkedList<>();
- @SuppressWarnings("unchecked")
@Override
public Builder add(Instruction instruction) {
switch (instruction.type()) {
- case OUTPUT:
case DROP:
- // TODO: should check that there is only one drop instruction.
+ drop = true;
+ break;
+ case OUTPUT:
outputs.add(instruction);
break;
case MODIFICATION:
// TODO: enforce modification order if any
modifications.add(instruction);
+ break;
case GROUP:
groups.add(instruction);
+ break;
default:
log.warn("Unknown instruction type {}", instruction.type());
}
@@ -64,10 +67,14 @@
@Override
public TrafficTreatment build() {
+
+ //If we are dropping should we just return an emptry list?
List<Instruction> instructions = new LinkedList<Instruction>();
instructions.addAll(modifications);
instructions.addAll(groups);
- instructions.addAll(outputs);
+ if (!drop) {
+ instructions.addAll(outputs);
+ }
return new DefaultTrafficTreatment(instructions);
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java b/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
index e9ea35b..0888d9b 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Instruction.java
@@ -4,7 +4,7 @@
* Abstraction of a single traffic treatment step.
* @param <T> the type parameter for the instruction
*/
-public interface Instruction<T> {
+public interface Instruction {
/**
* Represents the type of traffic treatment.
@@ -41,10 +41,4 @@
*/
public Type type();
- /**
- * Returns the actual value of the instruction.
- * @return the value for this instruction
- */
- public T instruction();
-
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java b/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
index f72b07e..9681076 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Instructions.java
@@ -1,7 +1,8 @@
package org.onlab.onos.net.flow;
-import org.onlab.onos.net.PortNumber;
+import static com.google.common.base.Preconditions.checkNotNull;
+import org.onlab.onos.net.PortNumber;
/**
* Factory class for creating various traffic treatment instructions.
*/
@@ -17,22 +18,44 @@
* @param number port number
* @return output instruction
*/
- public static Instruction<PortNumber> createOutput(final PortNumber number) {
- return new Instruction<PortNumber>() {
+ public static OutputInstruction createOutput(final PortNumber number) {
+ checkNotNull(number, "PortNumber cannot be null");
+ return new OutputInstruction(number);
+ }
- @Override
- public Instruction.Type type() {
- return Type.OUTPUT;
- }
-
- @Override
- public PortNumber instruction() {
- return number;
- }
-
- };
+ public static DropInstruction createDrop() {
+ return new DropInstruction();
}
// TODO: add create methods
+ public static final class DropInstruction implements Instruction {
+
+ @Override
+ public Type type() {
+ return Type.DROP;
+ }
+ }
+
+
+ public static final class OutputInstruction implements Instruction {
+
+ private final PortNumber port;
+
+ private OutputInstruction(PortNumber port) {
+ this.port = port;
+ }
+
+ public PortNumber port() {
+ return port;
+ }
+
+ @Override
+ public Type type() {
+ return Type.OUTPUT;
+ }
+
+
+ }
+
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
index 3c2b0ea..6f1b708 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/DefaultPacketContext.java
@@ -51,7 +51,7 @@
public abstract void send();
@Override
- public boolean blocked() {
+ public boolean block() {
return this.block.getAndSet(true);
}
diff --git a/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
index ce08fde..48cb084 100644
--- a/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
+++ b/core/api/src/main/java/org/onlab/onos/net/packet/PacketContext.java
@@ -45,7 +45,7 @@
* Blocks the outbound packet from being sent from this point onward.
* @return whether the outbound packet is blocked.
*/
- boolean blocked();
+ boolean block();
/**
* Check whether the outbound packet is blocked.
diff --git a/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java b/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
index c0cce92..9e561bf 100644
--- a/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
+++ b/core/api/src/test/java/org/onlab/onos/event/AbstractEventAccumulatorTest.java
@@ -1,13 +1,15 @@
package org.onlab.onos.event;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.onlab.junit.TestTools.delay;
+import static org.onlab.onos.event.TestEvent.Type.FOO;
import java.util.List;
import java.util.Timer;
-import static org.junit.Assert.*;
-import static org.onlab.junit.TestTools.delay;
-import static org.onlab.onos.event.TestEvent.Type.FOO;
+import org.junit.Test;
/**
* Tests the operation of the accumulator.
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java
deleted file mode 100644
index bc5d30a..0000000
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/ReactivePacketProcessor.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.onlab.onos.net.trivial.packet.impl;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-import org.onlab.onos.net.PortNumber;
-import org.onlab.onos.net.flow.Instructions;
-import org.onlab.onos.net.packet.PacketContext;
-import org.onlab.onos.net.packet.PacketProcessor;
-import org.slf4j.Logger;
-
-public class ReactivePacketProcessor implements PacketProcessor {
-
- private final Logger log = getLogger(getClass());
-
- @Override
- public void process(PacketContext context) {
- context.treatmentBuilder().add(Instructions.createOutput(PortNumber.FLOOD));
- context.send();
- }
-
-}
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
index 95d3664..637ada8 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/packet/impl/SimplePacketManager.java
@@ -1,5 +1,6 @@
package org.onlab.onos.net.trivial.packet.impl;
+import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
import java.util.Map;
@@ -42,22 +43,20 @@
private final Map<Integer, PacketProcessor> processors = new TreeMap<>();
- private final PacketProcessor reactiveProcessor = new ReactivePacketProcessor();
@Activate
public void activate() {
- addProcessor(reactiveProcessor, PacketProcessor.ADVISOR_MAX + 1);
log.info("Started");
}
@Deactivate
public void deactivate() {
- removeProcessor(reactiveProcessor);
log.info("Stopped");
}
@Override
public void addProcessor(PacketProcessor processor, int priority) {
+ checkNotNull(processor, "Processor cannot be null");
processors.put(priority, processor);
}