/* * Copyright 2015 Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.net.flowobjective; import com.google.common.annotations.Beta; import org.onosproject.core.ApplicationId; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; import java.util.Collection; /** * Represents a filtering flow objective. Each filtering flow objective * is made up of a key (typically a PortCriterion) mapped to a set of criteria. * Using this information, a pipeline aware driver will decide how this objective * should be mapped to the device specific pipeline-tables in order to satisfy the * filtering condition. For example, consider the following PERMIT filtering * objective: *
* portX -> {MAC1, VLAN1} *
* The driver could decide to pass packets to the MAC table or VLAN or PORT * tables to ensure that only those packets arriving with the correct dst MAC * and VLAN ids from Port X are allowed into the pipeline. *
* Filtering objectives of type PERMIT allow packets that match the key:criteria * to enter the pipeline. As a result, the implication is that packets that don't * match are automatically denied (dropped). *
* Filtering objectives of type DENY, are used to deny packets that would
* otherwise be permitted and forwarded through the pipeline (ie. those packets
* that make it through the PERMIT filters).
*/
@Beta
public interface FilteringObjective extends Objective {
enum Type {
/**
* Permits packets that match the filtering condition to be processed
* by the rest of the pipeline. Automatically denies packets that don't
* match the criteria.
*/
PERMIT,
/**
* Denies packets that make it through the permit filters.
*/
DENY
}
/**
* Obtain the key for this filter. The filter may or may not require a key.
*
* @return a criterion, which could be null if no key was provided.
*/
Criterion key();
/**
* Obtain this filtering type.
*
* @return the type
*/
Type type();
/**
* The set of conditions the filter must provision at the device.
*
* @return a collection of criteria
*/
Collection