@Override public void cancelPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId, Optional<DeviceId> deviceId) { checkPermission(PACKET_READ); checkNotNull(selector, ERROR_NULL_SELECTOR); checkNotNull(appId, ERROR_NULL_APP_ID); checkNotNull(deviceId, ERROR_NULL_DEVICE_ID); PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId, deviceId); store.cancelPackets(request); }
@Override public void emit(OutboundPacket packet) { checkPermission(PACKET_WRITE); checkNotNull(packet, "Packet cannot be null"); store.emit(packet); }
@Override public List<PacketRequest> getRequests() { checkPermission(PACKET_READ); return store.existingRequests(); }
@Activate public void activate() { eventHandlingExecutor = Executors.newSingleThreadExecutor( groupedThreads("onos/net/packet", "event-handler", log)); localNodeId = clusterService.getLocalNode().id(); appId = coreService.getAppId(CoreService.CORE_APP_NAME); store.setDelegate(delegate); deviceService.addListener(deviceListener); defaultProvider.init(deviceService); store.existingRequests().forEach(request -> { if (request.deviceId().isPresent()) { Device device = deviceService.getDevice(request.deviceId().get()); if (device != null) { pushRule(device, request); } else { log.info("Device is not ready yet; not processing packet request {}", request); } } else { pushToAllDevices(request); } }); log.info("Started"); }
@Override public void requestPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId, Optional<DeviceId> deviceId) { checkPermission(PACKET_READ); checkNotNull(selector, ERROR_NULL_SELECTOR); checkNotNull(appId, ERROR_NULL_APP_ID); checkNotNull(deviceId, ERROR_NULL_DEVICE_ID); PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId, deviceId); store.requestPackets(request); }
@Deactivate public void deactivate() { store.unsetDelegate(delegate); deviceService.removeListener(deviceListener); eventHandlingExecutor.shutdown(); log.info("Stopped"); }
@Override public void requestPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) { checkPermission(PACKET_READ); checkNotNull(selector, ERROR_NULL_SELECTOR); checkNotNull(appId, ERROR_NULL_APP_ID); PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId, Optional.empty()); store.requestPackets(request); }
/** * Pushes all rules to the specified device. * * @param device device on which to install packet request flows */ private void pushRulesToDevice(Device device) { log.debug("Pushing packet requests to device {}", device.id()); for (PacketRequest request : store.existingRequests()) { if (!request.deviceId().isPresent()) { pushRule(device, request); } else if (request.deviceId().get().equals(device.id())) { pushRule(device, request); } } }
@Override public void cancelPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) { checkPermission(PACKET_READ); checkNotNull(selector, ERROR_NULL_SELECTOR); checkNotNull(appId, ERROR_NULL_APP_ID); PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId, Optional.empty()); store.cancelPackets(request); }