/** * 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); } } }
/** * Pushes a packet request flow rule to all devices. * * @param request the packet request */ private void pushToAllDevices(PacketRequest request) { log.debug("Pushing packet request {} to all devices", request); for (Device device : deviceService.getDevices()) { try { Driver driver = driverService.getDriver(device.id()); if (driver != null && Boolean.parseBoolean(driver.getProperty(SUPPORT_PACKET_REQUEST_PROPERTY))) { pushRule(device, request); } } catch (ItemNotFoundException e) { log.warn("Device driver not found for {}; not processing packet request {}", device.id(), request); } } }
@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"); }