Moved default flows logic into the PacketManager.
This prevents us duplicating code in each of the apps and allows us to manage
packet requests better in the future.
Change-Id: I5656b2f0f3cecd3e42fe7b4a0a5ab7cb6582bb25
diff --git a/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java b/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
index 0d0dda9..dc925e6 100644
--- a/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
+++ b/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
@@ -30,14 +30,10 @@
import org.onlab.packet.Ethernet;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
-import org.onosproject.net.Device;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
import org.onosproject.net.Path;
import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultFlowRule;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -48,6 +44,7 @@
import org.onosproject.net.host.HostService;
import org.onosproject.net.packet.InboundPacket;
import org.onosproject.net.packet.PacketContext;
+import org.onosproject.net.packet.PacketPriority;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.packet.PacketService;
import org.onosproject.net.topology.TopologyService;
@@ -62,7 +59,6 @@
private static final int TIMEOUT = 10;
private static final int PRIORITY = 10;
- private static final int PUNT_RULE_PRIORITY = 5;
private final Logger log = getLogger(getClass());
@@ -79,9 +75,6 @@
protected FlowRuleService flowRuleService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DeviceService deviceService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected CoreService coreService;
private ReactivePacketProcessor processor = new ReactivePacketProcessor();
@@ -99,10 +92,14 @@
@Activate
public void activate(ComponentContext context) {
appId = coreService.registerApplication("org.onosproject.fwd");
- deviceService.addListener(new InternalDeviceListener());
- pushRules();
+
packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 2);
readComponentConfiguration(context);
+
+ TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
+ selector.matchEthType(Ethernet.TYPE_IPV4);
+ packetService.requestPackets(selector.build(), PacketPriority.REACTIVE, appId);
+
log.info("Started with Application ID {}", appId.id());
}
@@ -303,58 +300,6 @@
}
}
- /**
- * Pushes flow rules to all devices.
- */
- private void pushRules() {
- for (Device device : deviceService.getDevices()) {
- pushRules(device);
- }
- }
-
- /**
- * Pushes flow rules to the device to receive packets that need
- * to be processed.
- *
- * @param device the device to push the rules to
- */
- private synchronized void pushRules(Device device) {
- TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder();
- TrafficTreatment.Builder tbuilder = DefaultTrafficTreatment.builder();
-
- // Get all IPv4 packets
- sbuilder.matchEthType(Ethernet.TYPE_IPV4);
- tbuilder.punt();
- FlowRule flowArp =
- new DefaultFlowRule(device.id(),
- sbuilder.build(), tbuilder.build(),
- PUNT_RULE_PRIORITY, appId, 0, true);
-
- flowRuleService.applyFlowRules(flowArp);
- }
-
- public class InternalDeviceListener implements DeviceListener {
-
- @Override
- public void event(DeviceEvent event) {
- Device device = event.subject();
- switch (event.type()) {
- case DEVICE_ADDED:
- pushRules(device);
- break;
- case DEVICE_AVAILABILITY_CHANGED:
- case DEVICE_SUSPENDED:
- case DEVICE_UPDATED:
- case DEVICE_REMOVED:
- case PORT_ADDED:
- case PORT_UPDATED:
- case PORT_REMOVED:
- default:
- break;
- }
- }
- }
-
}