Search in sources :

Example 46 with Objective

use of org.onosproject.net.flowobjective.Objective in project onos by opennetworkinglab.

the class Ofdpa2Pipeline method processEgress.

/**
 * In the OF-DPA 2.0 pipeline, egress forwarding objectives go to the
 * egress tables.
 * @param fwd  the forwarding objective of type 'egress'
 * @return     a collection of flow rules to be sent to the switch. An empty
 *             collection may be returned if there is a problem in processing
 *             the flow rule
 */
protected Collection<FlowRule> processEgress(ForwardingObjective fwd) {
    log.debug("Processing egress forwarding objective:{} in dev:{}", fwd, deviceId);
    List<FlowRule> rules = new ArrayList<>();
    // Build selector
    TrafficSelector.Builder sb = DefaultTrafficSelector.builder();
    VlanIdCriterion vlanIdCriterion = (VlanIdCriterion) fwd.selector().getCriterion(Criterion.Type.VLAN_VID);
    if (vlanIdCriterion == null) {
        log.error("Egress forwarding objective:{} must include vlanId", fwd.id());
        fail(fwd, ObjectiveError.BADPARAMS);
        return rules;
    }
    Optional<Instruction> outInstr = fwd.treatment().allInstructions().stream().filter(instruction -> instruction instanceof OutputInstruction).findFirst();
    if (!outInstr.isPresent()) {
        log.error("Egress forwarding objective:{} must include output port", fwd.id());
        fail(fwd, ObjectiveError.BADPARAMS);
        return rules;
    }
    PortNumber portNumber = ((OutputInstruction) outInstr.get()).port();
    sb.matchVlanId(vlanIdCriterion.vlanId());
    OfdpaMatchActsetOutput actsetOutput = new OfdpaMatchActsetOutput(portNumber);
    sb.extension(actsetOutput, deviceId);
    sb.extension(new OfdpaMatchAllowVlanTranslation(ALLOW_VLAN_TRANSLATION), deviceId);
    // Build a flow rule for Egress VLAN Flow table
    TrafficTreatment.Builder tb = DefaultTrafficTreatment.builder();
    tb.transition(EGRESS_DSCP_PCP_REMARK_FLOW_TABLE);
    if (fwd.treatment() != null) {
        for (Instruction instr : fwd.treatment().allInstructions()) {
            if (instr instanceof L2ModificationInstruction && ((L2ModificationInstruction) instr).subtype() == L2SubType.VLAN_ID) {
                tb.immediate().add(instr);
            }
            if (instr instanceof L2ModificationInstruction && ((L2ModificationInstruction) instr).subtype() == L2SubType.VLAN_PUSH) {
                tb.immediate().pushVlan();
                EthType ethType = ((L2ModificationInstruction.ModVlanHeaderInstruction) instr).ethernetType();
                if (ethType.equals(EtherType.QINQ.ethType())) {
                    // Build a flow rule for Egress TPID Flow table
                    TrafficSelector tpidSelector = DefaultTrafficSelector.builder().extension(actsetOutput, deviceId).matchVlanId(VlanId.ANY).build();
                    TrafficTreatment tpidTreatment = DefaultTrafficTreatment.builder().extension(new Ofdpa3CopyField(COPY_FIELD_NBITS, COPY_FIELD_OFFSET, COPY_FIELD_OFFSET, OXM_ID_VLAN_VID, OXM_ID_PACKET_REG_1), deviceId).popVlan().pushVlan(EtherType.QINQ.ethType()).extension(new Ofdpa3CopyField(COPY_FIELD_NBITS, COPY_FIELD_OFFSET, COPY_FIELD_OFFSET, OXM_ID_PACKET_REG_1, OXM_ID_VLAN_VID), deviceId).build();
                    FlowRule.Builder tpidRuleBuilder = DefaultFlowRule.builder().fromApp(fwd.appId()).withPriority(fwd.priority()).forDevice(deviceId).withSelector(tpidSelector).withTreatment(tpidTreatment).makePermanent().forTable(EGRESS_TPID_FLOW_TABLE);
                    rules.add(tpidRuleBuilder.build());
                }
            }
        }
    }
    FlowRule.Builder ruleBuilder = DefaultFlowRule.builder().fromApp(fwd.appId()).withPriority(fwd.priority()).forDevice(deviceId).withSelector(sb.build()).withTreatment(tb.build()).makePermanent().forTable(EGRESS_VLAN_FLOW_TABLE);
    rules.add(ruleBuilder.build());
    return rules;
}
Also used : OfdpaPipelineUtility(org.onosproject.driver.pipeline.ofdpa.OfdpaPipelineUtility) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) PortNumber(org.onosproject.net.PortNumber) DeviceService(org.onosproject.net.device.DeviceService) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) OfdpaMatchActsetOutput(org.onosproject.driver.extensions.OfdpaMatchActsetOutput) ObjectiveError(org.onosproject.net.flowobjective.ObjectiveError) Executors.newSingleThreadScheduledExecutor(java.util.concurrent.Executors.newSingleThreadScheduledExecutor) FlowRuleService(org.onosproject.net.flow.FlowRuleService) Pair(org.apache.commons.lang3.tuple.Pair) Executors.newScheduledThreadPool(java.util.concurrent.Executors.newScheduledThreadPool) Port(org.onosproject.net.Port) ApplicationId(org.onosproject.core.ApplicationId) NextObjective(org.onosproject.net.flowobjective.NextObjective) L2ModificationInstruction(org.onosproject.net.flow.instructions.L2ModificationInstruction) KryoNamespaces(org.onosproject.store.serializers.KryoNamespaces) SELECT(org.onosproject.net.group.GroupDescription.Type.SELECT) MPLS_BOS(org.onosproject.net.flow.criteria.Criterion.Type.MPLS_BOS) Ofdpa3MplsType(org.onosproject.driver.extensions.Ofdpa3MplsType) L3ModificationInstruction(org.onosproject.net.flow.instructions.L3ModificationInstruction) FilteringObjective(org.onosproject.net.flowobjective.FilteringObjective) AbstractAccumulator(org.onlab.util.AbstractAccumulator) OfdpaMatchVlanVid(org.onosproject.driver.extensions.OfdpaMatchVlanVid) OfdpaMatchAllowVlanTranslation(org.onosproject.driver.extensions.OfdpaMatchAllowVlanTranslation) DeviceId(org.onosproject.net.DeviceId) L3SubType(org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType) L2SubType(org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType) Pipeliner(org.onosproject.net.behaviour.Pipeliner) FlowRuleOperationsContext(org.onosproject.net.flow.FlowRuleOperationsContext) OfdpaSetVlanVid(org.onosproject.driver.extensions.OfdpaSetVlanVid) KryoNamespace(org.onlab.util.KryoNamespace) NextGroup(org.onosproject.net.behaviour.NextGroup) EthCriterion(org.onosproject.net.flow.criteria.EthCriterion) AbstractHandlerBehaviour(org.onosproject.net.driver.AbstractHandlerBehaviour) ArrayList(java.util.ArrayList) Lists(com.google.common.collect.Lists) TrafficSelector(org.onosproject.net.flow.TrafficSelector) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Criteria(org.onosproject.net.flow.criteria.Criteria) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) Criterion(org.onosproject.net.flow.criteria.Criterion) Ofdpa3CopyField(org.onosproject.driver.extensions.Ofdpa3CopyField) FlowRuleOperations(org.onosproject.net.flow.FlowRuleOperations) EthTypeCriterion(org.onosproject.net.flow.criteria.EthTypeCriterion) UdpPortCriterion(org.onosproject.net.flow.criteria.UdpPortCriterion) Instruction(org.onosproject.net.flow.instructions.Instruction) VlanId(org.onlab.packet.VlanId) GroupService(org.onosproject.net.group.GroupService) Icmpv6CodeCriterion(org.onosproject.net.flow.criteria.Icmpv6CodeCriterion) OXM_ID_VLAN_VID(org.onosproject.driver.extensions.Ofdpa3CopyField.OXM_ID_VLAN_VID) EtherType(org.onlab.packet.EthType.EtherType) Accumulator(org.onlab.util.Accumulator) NoActionInstruction(org.onosproject.net.flow.instructions.Instructions.NoActionInstruction) Objective(org.onosproject.net.flowobjective.Objective) MacAddress(org.onlab.packet.MacAddress) ArrayDeque(java.util.ArrayDeque) MplsBosCriterion(org.onosproject.net.flow.criteria.MplsBosCriterion) CoreService(org.onosproject.core.CoreService) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) Timer(java.util.Timer) PortCriterion(org.onosproject.net.flow.criteria.PortCriterion) ForwardingObjective(org.onosproject.net.flowobjective.ForwardingObjective) ServiceDirectory(org.onlab.osgi.ServiceDirectory) Ethernet(org.onlab.packet.Ethernet) OXM_ID_PACKET_REG_1(org.onosproject.driver.extensions.Ofdpa3CopyField.OXM_ID_PACKET_REG_1) SPECIFIC(org.onosproject.net.flowobjective.ForwardingObjective.Flag.SPECIFIC) Ofdpa3SetMplsType(org.onosproject.driver.extensions.Ofdpa3SetMplsType) IPCriterion(org.onosproject.net.flow.criteria.IPCriterion) PipelinerContext(org.onosproject.net.behaviour.PipelinerContext) OutputInstruction(org.onosproject.net.flow.instructions.Instructions.OutputInstruction) Collection(java.util.Collection) FlowObjectiveStore(org.onosproject.net.flowobjective.FlowObjectiveStore) Sets(com.google.common.collect.Sets) Icmpv6TypeCriterion(org.onosproject.net.flow.criteria.Icmpv6TypeCriterion) Objects(java.util.Objects) EthType(org.onlab.packet.EthType) List(java.util.List) FlowRule(org.onosproject.net.flow.FlowRule) Optional(java.util.Optional) IpPrefix(org.onlab.packet.IpPrefix) MplsCriterion(org.onosproject.net.flow.criteria.MplsCriterion) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GroupKey(org.onosproject.net.group.GroupKey) Deque(java.util.Deque) Group(org.onosproject.net.group.Group) ImmutableList(com.google.common.collect.ImmutableList) DefaultGroupKey(org.onosproject.net.group.DefaultGroupKey) TcpPortCriterion(org.onosproject.net.flow.criteria.TcpPortCriterion) OfdpaGroupHandlerUtility(org.onosproject.driver.pipeline.ofdpa.OfdpaGroupHandlerUtility) IpAddress(org.onlab.packet.IpAddress) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) Logger(org.slf4j.Logger) ModMplsHeaderInstruction(org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsHeaderInstruction) TimeUnit(java.util.concurrent.TimeUnit) VlanIdCriterion(org.onosproject.net.flow.criteria.VlanIdCriterion) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) Collections(java.util.Collections) OutputInstruction(org.onosproject.net.flow.instructions.Instructions.OutputInstruction) OfdpaMatchActsetOutput(org.onosproject.driver.extensions.OfdpaMatchActsetOutput) ArrayList(java.util.ArrayList) L2ModificationInstruction(org.onosproject.net.flow.instructions.L2ModificationInstruction) L2ModificationInstruction(org.onosproject.net.flow.instructions.L2ModificationInstruction) L3ModificationInstruction(org.onosproject.net.flow.instructions.L3ModificationInstruction) Instruction(org.onosproject.net.flow.instructions.Instruction) NoActionInstruction(org.onosproject.net.flow.instructions.Instructions.NoActionInstruction) OutputInstruction(org.onosproject.net.flow.instructions.Instructions.OutputInstruction) ModMplsHeaderInstruction(org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsHeaderInstruction) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) EthType(org.onlab.packet.EthType) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) OfdpaMatchAllowVlanTranslation(org.onosproject.driver.extensions.OfdpaMatchAllowVlanTranslation) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) FlowRule(org.onosproject.net.flow.FlowRule) PortNumber(org.onosproject.net.PortNumber) VlanIdCriterion(org.onosproject.net.flow.criteria.VlanIdCriterion) Ofdpa3CopyField(org.onosproject.driver.extensions.Ofdpa3CopyField)

Example 47 with Objective

use of org.onosproject.net.flowobjective.Objective in project onos by opennetworkinglab.

the class FlowObjectiveQueueListCommand method doExecute.

@Override
protected void doExecute() {
    try {
        FlowObjectiveService service = get(FlowObjectiveService.class);
        ListMultimap<FilteringObjQueueKey, Objective> filtObjQueue = service.getFilteringObjQueue();
        ListMultimap<ForwardingObjQueueKey, Objective> fwdObjQueue = service.getForwardingObjQueue();
        ListMultimap<NextObjQueueKey, Objective> nextObjQueue = service.getNextObjQueue();
        Map<FilteringObjQueueKey, Objective> filtObjQueueHead = service.getFilteringObjQueueHead();
        Map<ForwardingObjQueueKey, Objective> fwdObjQueueHead = service.getForwardingObjQueueHead();
        Map<NextObjQueueKey, Objective> nextObjQueueHead = service.getNextObjQueueHead();
        if (cache) {
            printMap("Filtering objective cache", filtObjQueueHead, sizeOnly);
            printMap("Forwarding objective cache", fwdObjQueueHead, sizeOnly);
            printMap("Next objective cache", nextObjQueueHead, sizeOnly);
        } else {
            printMap("Filtering objective queue", filtObjQueue.asMap(), sizeOnly);
            printMap("Forwarding objective queue", fwdObjQueue.asMap(), sizeOnly);
            printMap("Next objective queue", nextObjQueue.asMap(), sizeOnly);
        }
    } catch (ServiceNotFoundException e) {
        print("FlowObjectiveService unavailable");
    }
}
Also used : Objective(org.onosproject.net.flowobjective.Objective) ForwardingObjQueueKey(org.onosproject.net.flowobjective.ForwardingObjQueueKey) FilteringObjQueueKey(org.onosproject.net.flowobjective.FilteringObjQueueKey) ServiceNotFoundException(org.onlab.osgi.ServiceNotFoundException) FlowObjectiveService(org.onosproject.net.flowobjective.FlowObjectiveService) NextObjQueueKey(org.onosproject.net.flowobjective.NextObjQueueKey)

Example 48 with Objective

use of org.onosproject.net.flowobjective.Objective in project onos by opennetworkinglab.

the class Dhcp4HandlerImpl method processIgnoreVlanRule.

/**
 * Process the ignore rules.
 *
 * @param deviceId the device id
 * @param vlanId the vlan to be ignored
 * @param op the operation, ADD to install; REMOVE to uninstall rules
 */
private void processIgnoreVlanRule(DeviceId deviceId, VlanId vlanId, Objective.Operation op) {
    AtomicInteger installedCount = new AtomicInteger(DHCP_SELECTORS.size());
    DHCP_SELECTORS.forEach(trafficSelector -> {
        TrafficSelector selector = DefaultTrafficSelector.builder(trafficSelector).matchVlanId(vlanId).build();
        ForwardingObjective.Builder builder = DefaultForwardingObjective.builder().withFlag(ForwardingObjective.Flag.VERSATILE).withSelector(selector).withPriority(IGNORE_CONTROL_PRIORITY).withTreatment(DefaultTrafficTreatment.emptyTreatment()).fromApp(appId);
        ObjectiveContext objectiveContext = new ObjectiveContext() {

            @Override
            public void onSuccess(Objective objective) {
                log.info("Ignore rule {} (Vlan id {}, device {}, selector {})", op, vlanId, deviceId, selector);
                int countDown = installedCount.decrementAndGet();
                if (countDown != 0) {
                    return;
                }
                switch(op) {
                    case ADD:
                        ignoredVlans.put(deviceId, vlanId);
                        break;
                    case REMOVE:
                        ignoredVlans.remove(deviceId, vlanId);
                        break;
                    default:
                        log.warn("Unsupported objective operation {}", op);
                        break;
                }
            }

            @Override
            public void onError(Objective objective, ObjectiveError error) {
                log.warn("Can't {} ignore rule (vlan id {}, selector {}, device {}) due to {}", op, vlanId, selector, deviceId, error);
            }
        };
        ForwardingObjective fwd;
        switch(op) {
            case ADD:
                fwd = builder.add(objectiveContext);
                break;
            case REMOVE:
                fwd = builder.remove(objectiveContext);
                break;
            default:
                log.warn("Unsupported objective operation {}", op);
                return;
        }
        Device device = deviceService.getDevice(deviceId);
        if (device == null || !device.is(Pipeliner.class)) {
            log.warn("Device {} is not available now, wait until device is available", deviceId);
            return;
        }
        flowObjectiveService.apply(deviceId, fwd);
    });
}
Also used : Objective(org.onosproject.net.flowobjective.Objective) ForwardingObjective(org.onosproject.net.flowobjective.ForwardingObjective) DefaultForwardingObjective(org.onosproject.net.flowobjective.DefaultForwardingObjective) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Device(org.onosproject.net.Device) ObjectiveContext(org.onosproject.net.flowobjective.ObjectiveContext) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) ForwardingObjective(org.onosproject.net.flowobjective.ForwardingObjective) DefaultForwardingObjective(org.onosproject.net.flowobjective.DefaultForwardingObjective) ConnectPoint(org.onosproject.net.ConnectPoint) ObjectiveError(org.onosproject.net.flowobjective.ObjectiveError)

Example 49 with Objective

use of org.onosproject.net.flowobjective.Objective in project onos by opennetworkinglab.

the class Dhcp6HandlerImpl method processIgnoreVlanRule.

/**
 * Process the ignore rules.
 *
 * @param deviceId the device id
 * @param vlanId the vlan to be ignored
 * @param op the operation, ADD to install; REMOVE to uninstall rules
 */
private void processIgnoreVlanRule(DeviceId deviceId, VlanId vlanId, Objective.Operation op) {
    AtomicInteger installedCount = new AtomicInteger(DHCP_SELECTORS.size());
    DHCP_SELECTORS.forEach(trafficSelector -> {
        TrafficSelector selector = DefaultTrafficSelector.builder(trafficSelector).matchVlanId(vlanId).build();
        ForwardingObjective.Builder builder = DefaultForwardingObjective.builder().withFlag(ForwardingObjective.Flag.VERSATILE).withSelector(selector).withPriority(IGNORE_CONTROL_PRIORITY).withTreatment(DefaultTrafficTreatment.emptyTreatment()).fromApp(appId);
        ObjectiveContext objectiveContext = new ObjectiveContext() {

            @Override
            public void onSuccess(Objective objective) {
                log.info("Ignore rule {} (Vlan id {}, device {}, selector {})", op, vlanId, deviceId, selector);
                int countDown = installedCount.decrementAndGet();
                if (countDown != 0) {
                    return;
                }
                switch(op) {
                    case ADD:
                        ignoredVlans.put(deviceId, vlanId);
                        break;
                    case REMOVE:
                        ignoredVlans.remove(deviceId, vlanId);
                        break;
                    default:
                        log.warn("Unsupported objective operation {}", op);
                        break;
                }
            }

            @Override
            public void onError(Objective objective, ObjectiveError error) {
                log.warn("Can't {} ignore rule (vlan id {}, selector {}, device {}) due to {}", op, vlanId, selector, deviceId, error);
            }
        };
        ForwardingObjective fwd;
        switch(op) {
            case ADD:
                fwd = builder.add(objectiveContext);
                break;
            case REMOVE:
                fwd = builder.remove(objectiveContext);
                break;
            default:
                log.warn("Unsupported objective operation {}", op);
                return;
        }
        Device device = deviceService.getDevice(deviceId);
        if (device == null || !device.is(Pipeliner.class)) {
            log.warn("Device {} is not available now, wait until device is available", deviceId);
            return;
        }
        flowObjectiveService.apply(deviceId, fwd);
    });
}
Also used : Objective(org.onosproject.net.flowobjective.Objective) ForwardingObjective(org.onosproject.net.flowobjective.ForwardingObjective) DefaultForwardingObjective(org.onosproject.net.flowobjective.DefaultForwardingObjective) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Device(org.onosproject.net.Device) ObjectiveContext(org.onosproject.net.flowobjective.ObjectiveContext) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) ForwardingObjective(org.onosproject.net.flowobjective.ForwardingObjective) DefaultForwardingObjective(org.onosproject.net.flowobjective.DefaultForwardingObjective) ConnectPoint(org.onosproject.net.ConnectPoint) ObjectiveError(org.onosproject.net.flowobjective.ObjectiveError)

Example 50 with Objective

use of org.onosproject.net.flowobjective.Objective in project trellis-control by opennetworkinglab.

the class DefaultGroupHandler method removeGroupFromPort.

/**
 * Remove simple next objective for a single port. The treatments can include
 * all outgoing actions that need to happen on the packet.
 *
 * @param portNum  the outgoing port on the device
 * @param treatment the actions applied on the packets (should include outport)
 * @param meta optional data to pass to the driver
 * @return a completable future that completes when the port has been removed
 */
public CompletableFuture<Objective> removeGroupFromPort(PortNumber portNum, TrafficTreatment treatment, TrafficSelector meta) {
    PortNextObjectiveStoreKey key = new PortNextObjectiveStoreKey(deviceId, portNum, treatment, meta);
    Integer nextId = portNextObjStore.get(key);
    CompletableFuture<Objective> future = new CompletableFuture<>();
    NextObjective.Builder nextObjBuilder = DefaultNextObjective.builder().withId(nextId).withType(NextObjective.Type.SIMPLE).addTreatment(treatment).fromApp(appId).withMeta(meta);
    ObjectiveContext context = new DefaultObjectiveContext((objective) -> {
        log.info("removeGroupFromPort done " + "NextObj {} on {}", nextId, deviceId);
        future.complete(objective);
    }, (objective, error) -> {
        log.warn("removeGroupFromPort failed to install NextObj {} on {}: {}", nextId, deviceId, error);
        srManager.invalidateNextObj(objective.id());
        future.complete(null);
    });
    NextObjective nextObj = nextObjBuilder.remove(context);
    flowObjectiveService.next(deviceId, nextObj);
    log.info("removeGroupFromPort: Submitted next objective {} in device {} " + "for port {}", nextId, deviceId, portNum);
    portNextObjStore.remove(key);
    return future;
}
Also used : PortNextObjectiveStoreKey(org.onosproject.segmentrouting.storekey.PortNextObjectiveStoreKey) DefaultNextObjective(org.onosproject.net.flowobjective.DefaultNextObjective) NextObjective(org.onosproject.net.flowobjective.NextObjective) DefaultNextObjective(org.onosproject.net.flowobjective.DefaultNextObjective) NextObjective(org.onosproject.net.flowobjective.NextObjective) Objective(org.onosproject.net.flowobjective.Objective) CompletableFuture(java.util.concurrent.CompletableFuture) DefaultObjectiveContext(org.onosproject.net.flowobjective.DefaultObjectiveContext) ObjectiveContext(org.onosproject.net.flowobjective.ObjectiveContext) DefaultObjectiveContext(org.onosproject.net.flowobjective.DefaultObjectiveContext)

Aggregations

Objective (org.onosproject.net.flowobjective.Objective)64 ForwardingObjective (org.onosproject.net.flowobjective.ForwardingObjective)58 DefaultForwardingObjective (org.onosproject.net.flowobjective.DefaultForwardingObjective)42 FilteringObjective (org.onosproject.net.flowobjective.FilteringObjective)42 NextObjective (org.onosproject.net.flowobjective.NextObjective)42 DefaultTrafficTreatment (org.onosproject.net.flow.DefaultTrafficTreatment)38 DefaultTrafficSelector (org.onosproject.net.flow.DefaultTrafficSelector)37 TrafficSelector (org.onosproject.net.flow.TrafficSelector)37 ObjectiveContext (org.onosproject.net.flowobjective.ObjectiveContext)36 TrafficTreatment (org.onosproject.net.flow.TrafficTreatment)34 DeviceId (org.onosproject.net.DeviceId)32 DefaultFilteringObjective (org.onosproject.net.flowobjective.DefaultFilteringObjective)29 ConnectPoint (org.onosproject.net.ConnectPoint)27 DefaultNextObjective (org.onosproject.net.flowobjective.DefaultNextObjective)27 List (java.util.List)26 ObjectiveError (org.onosproject.net.flowobjective.ObjectiveError)26 Set (java.util.Set)25 Lists (com.google.common.collect.Lists)24 CompletableFuture (java.util.concurrent.CompletableFuture)24 Collectors (java.util.stream.Collectors)24