@Override public void cancelPackets(PacketRequest request) { DeviceId deviceid = request.deviceId().orElse(null); if (deviceid != null) { Device device = deviceService.getDevice(deviceid); if (device != null) { removeRule(deviceService.getDevice(deviceid), request); } } else { removeFromAllDevices(request); } } }
@Override public void requestPackets(PacketRequest request) { DeviceId deviceid = request.deviceId().orElse(null); if (deviceid != null) { Device device = deviceService.getDevice(deviceid); if (device != null) { pushRule(deviceService.getDevice(deviceid), request); } } else { pushToAllDevices(request); } }
private JsonNode json(List<PacketRequest> requests) { ObjectMapper mapper = new ObjectMapper(); ArrayNode result = mapper.createArrayNode(); for (PacketRequest r : requests) { result.add(mapper.createObjectNode() .put("nodeId", r.nodeId().toString()) .put("appId", r.appId().name()) .put("priority", r.priority().toString()) .put("criteria", r.selector().criteria().toString()) .put("deviceId", r.deviceId().isPresent() ? r.deviceId().get().toString() : "ALL")); } return result; }
@Override public ObjectNode encode(PacketRequest packetRequest, CodecContext context) { checkNotNull(packetRequest, NULL_OBJECT_MSG); final JsonCodec<TrafficSelector> trafficSelectorCodec = context.codec(TrafficSelector.class); final ObjectNode result = context.mapper().createObjectNode() .put(NODE_ID, packetRequest.nodeId().toString()) .put(PRIORITY, packetRequest.priority().name()) .put(APP_ID, packetRequest.appId().toString()); if (packetRequest.deviceId().isPresent()) { result.put(DEVICE_ID, packetRequest.deviceId().get().toString()); } result.set(TRAFFIC_SELECTOR, trafficSelectorCodec.encode(packetRequest.selector(), context)); return result; }
/** * 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); } } }
@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"); }