| /* |
| * 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: |
| * <p> |
| * portX -> {MAC1, VLAN1} |
| * <p> |
| * 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. |
| * <p> |
| * 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). |
| * <p> |
| * 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<Criterion> conditions(); |
| |
| /** |
| * Auxiliary optional information provided to the device-driver.Typically |
| * conveys information about changes (treatments) to packets that are |
| * permitted into the pipeline by the PERMIT filtering condition. |
| * |
| * @return a treatment on the packets that make it through the PERMIT filters. |
| * Value may be null if no meta information is provided. |
| */ |
| TrafficTreatment meta(); |
| |
| /** |
| * Builder of Filtering objective entities. |
| */ |
| interface Builder extends Objective.Builder { |
| |
| /** |
| * Specify the key for the filter. |
| * |
| * @param key a criterion |
| * @return a filter objective builder |
| */ |
| Builder withKey(Criterion key); |
| |
| /** |
| * Add a filtering condition. |
| * |
| * @param criterion new criterion |
| * @return a filtering builder |
| */ |
| Builder addCondition(Criterion criterion); |
| |
| /** |
| * Permit this filtering condition set. |
| * |
| * @return a filtering builder |
| */ |
| Builder permit(); |
| |
| /** |
| * Deny this filtering condition set. |
| * |
| * @return a filtering builder |
| */ |
| Builder deny(); |
| |
| /** |
| * Set meta information about this filtering condition set. |
| * |
| * @param treatment traffic treatment to use |
| * @return a filtering builder |
| */ |
| Builder withMeta(TrafficTreatment treatment); |
| |
| /** |
| * Assigns an application id. |
| * |
| * @param appId an application id |
| * @return a filtering builder |
| */ |
| @Override |
| Builder fromApp(ApplicationId appId); |
| |
| /** |
| * Builds the filtering objective that will be added. |
| * |
| * @return a filtering objective |
| */ |
| @Override |
| FilteringObjective add(); |
| |
| /** |
| * Builds the filtering objective that will be removed. |
| * |
| * @return a filtering objective. |
| */ |
| @Override |
| FilteringObjective remove(); |
| |
| /** |
| * Builds the filtering objective that will be added. |
| * The context will be used to notify the calling application. |
| * |
| * @param context an objective context |
| * @return a filtering objective |
| */ |
| @Override |
| FilteringObjective add(ObjectiveContext context); |
| |
| /** |
| * Builds the filtering objective that will be removed. |
| * The context will be used to notify the calling application. |
| * |
| * @param context an objective context |
| * @return a filtering objective |
| */ |
| @Override |
| FilteringObjective remove(ObjectiveContext context); |
| |
| |
| } |
| |
| } |