[FALCON] adding api to enable packet requests to a single device.
Change-Id: Id870c13ece658fe61f46194c1e795fb1d209a6a8
diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
index 79ac4b0..c0a2286 100644
--- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
+++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
@@ -29,6 +29,7 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceEvent;
import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
@@ -60,6 +61,7 @@
import org.slf4j.Logger;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -175,18 +177,49 @@
checkNotNull(selector, "Selector cannot be null");
checkNotNull(appId, "Application ID cannot be null");
- PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId);
+ PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
+ localNodeId, Optional.empty());
store.requestPackets(request);
}
@Override
+ public void requestPackets(TrafficSelector selector, PacketPriority priority,
+ ApplicationId appId, Optional<DeviceId> deviceId) {
+ checkPermission(PACKET_READ);
+ checkNotNull(selector, "Selector cannot be null");
+ checkNotNull(appId, "Application ID cannot be null");
+
+ PacketRequest request =
+ new DefaultPacketRequest(selector, priority, appId,
+ localNodeId, deviceId);
+
+ store.requestPackets(request);
+
+ }
+
+ @Override
public void cancelPackets(TrafficSelector selector, PacketPriority priority,
ApplicationId appId) {
checkPermission(PACKET_READ);
checkNotNull(selector, "Selector cannot be null");
checkNotNull(appId, "Application ID cannot be null");
- PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId);
+
+ PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
+ localNodeId, Optional.empty());
+ store.cancelPackets(request);
+ }
+
+ @Override
+ public void cancelPackets(TrafficSelector selector, PacketPriority priority,
+ ApplicationId appId, Optional<DeviceId> deviceId) {
+ checkPermission(PACKET_READ);
+ checkNotNull(selector, "Selector cannot be null");
+ checkNotNull(appId, "Application ID cannot be null");
+
+ PacketRequest request = new DefaultPacketRequest(selector, priority,
+ appId, localNodeId,
+ deviceId);
store.cancelPackets(request);
}
@@ -203,7 +236,12 @@
private void pushRulesToDevice(Device device) {
log.debug("Pushing packet requests to device {}", device.id());
for (PacketRequest request : store.existingRequests()) {
- pushRule(device, request);
+ if (!request.deviceId().isPresent()) {
+ pushRule(device, request);
+ } else if (request.deviceId().get().equals(device.id())) {
+ pushRule(device, request);
+ }
+
}
}
@@ -332,6 +370,7 @@
}
+
/**
* Internal callback from the packet store.
*/
@@ -343,12 +382,24 @@
@Override
public void requestPackets(PacketRequest request) {
- pushToAllDevices(request);
+ DeviceId deviceid = request.deviceId().orElse(null);
+
+ if (deviceid != null) {
+ pushRule(deviceService.getDevice(deviceid), request);
+ } else {
+ pushToAllDevices(request);
+ }
}
@Override
public void cancelPackets(PacketRequest request) {
- removeFromAllDevices(request);
+ DeviceId deviceid = request.deviceId().orElse(null);
+
+ if (deviceid != null) {
+ removeRule(deviceService.getDevice(deviceid), request);
+ } else {
+ removeFromAllDevices(request);
+ }
}
}