| /* |
| * Copyright 2016-present Open Networking Foundation |
| * |
| * 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.opencord.olt.internalapi; |
| |
| import org.onlab.packet.VlanId; |
| import org.onosproject.net.DeviceId; |
| import org.onosproject.net.PortNumber; |
| import org.onosproject.net.flowobjective.ForwardingObjective; |
| import org.onosproject.net.flowobjective.ObjectiveError; |
| import org.onosproject.net.meter.MeterId; |
| import org.opencord.sadis.UniTagInformation; |
| |
| import java.util.concurrent.CompletableFuture; |
| |
| /** |
| * Olt service for flow operations. |
| */ |
| public interface AccessDeviceFlowService { |
| |
| /** |
| * Provisions or removes trap-to-controller DHCP packets. |
| * |
| * @param devId the target device identifier |
| * @param port the uni port for which this trap flow is designated |
| * @param upstreamMeterId the upstream meter id that includes the upstream |
| * bandwidth profile values such as PIR,CIR. If no meter id needs to be referenced, |
| * null can be sent |
| * @param tagInformation the uni tag (ctag, stag) information |
| * @param install true to install the flow, false to remove the flow |
| * @param upstream true if trapped packets are flowing upstream towards |
| * server, false if packets are flowing downstream towards client |
| */ |
| void processDhcpFilteringObjectives(DeviceId devId, PortNumber port, |
| MeterId upstreamMeterId, |
| UniTagInformation tagInformation, |
| boolean install, |
| boolean upstream); |
| |
| /** |
| * Trap igmp packets to the controller. |
| * |
| * @param devId Device identifier to send the flow |
| * @param port Uni Port number |
| * @param upstreamMeterId upstream meter id that represents the upstream bandwidth profile |
| * @param tagInformation the uni tag information of the subscriber |
| * @param install the indicator to install or to remove the flow |
| * @param upstream determines the direction of the flow |
| */ |
| void processIgmpFilteringObjectives(DeviceId devId, PortNumber port, |
| MeterId upstreamMeterId, |
| UniTagInformation tagInformation, |
| boolean install, |
| boolean upstream); |
| |
| /** |
| * Trap eapol authentication packets to the controller. |
| * |
| * @param devId the device identifier |
| * @param portNumber the port for which this trap flow is designated |
| * @param bpId bandwidth profile id to add the related meter to the flow |
| * @param filterFuture completable future for this filtering objective operation |
| * @param vlanId the default or customer tag for a subscriber |
| * @param install true to install the flow, false to remove the flow |
| */ |
| void processEapolFilteringObjectives(DeviceId devId, PortNumber portNumber, String bpId, |
| CompletableFuture<ObjectiveError> filterFuture, |
| VlanId vlanId, boolean install); |
| |
| /** |
| * Trap lldp packets to the controller. |
| * |
| * @param devId the device identifier |
| * @param port the port for which this trap flow is designated |
| * @param install true to install the flow, false to remove the flow |
| */ |
| void processLldpFilteringObjective(DeviceId devId, PortNumber port, boolean install); |
| |
| /** |
| * Installs trap filtering objectives for particular traffic types (LLDP, IGMP and DHCP) on an |
| * NNI port. |
| * |
| * @param devId device ID |
| * @param port port number |
| * @param install true to install, false to remove |
| */ |
| void processNniFilteringObjectives(DeviceId devId, PortNumber port, boolean install); |
| |
| /** |
| * Creates a ForwardingObjective builder with double-tag match criteria and output |
| * action. The treatment will not contain pop or push actions. |
| * If the last parameter is true, use the upstream meter id and vice versa. |
| * |
| * @param uplinkPort the nni port |
| * @param subscriberPort the uni port |
| * @param meterId the meter id that is assigned to upstream or downstream flows |
| * @param tagInfo the uni tag information |
| * @param upstream true to create upstream, false to create downstream builder |
| * @return ForwardingObjective.Builder |
| */ |
| ForwardingObjective.Builder createTransparentBuilder(PortNumber uplinkPort, |
| PortNumber subscriberPort, |
| MeterId meterId, |
| UniTagInformation tagInfo, |
| boolean upstream); |
| |
| /** |
| * Creates a ForwardingObjective builder for the upstream flows. |
| * The treatment will contain push action |
| * |
| * @param uplinkPort the nni port |
| * @param subscriberPort the uni port |
| * @param upstreamMeterId the meter id that is assigned to upstream flows |
| * @param uniTagInformation the uni tag information |
| * @return ForwardingObjective.Builder |
| */ |
| ForwardingObjective.Builder createUpBuilder(PortNumber uplinkPort, |
| PortNumber subscriberPort, |
| MeterId upstreamMeterId, |
| UniTagInformation uniTagInformation); |
| |
| /** |
| * Creates a ForwardingObjective builder for the downstream flows. |
| * The treatment will contain pop action |
| * |
| * @param uplinkPort the nni port |
| * @param subscriberPort the uni port |
| * @param downstreamMeterId the meter id that is assigned to downstream flows |
| * @param tagInformation the uni tag information |
| * @return ForwardingObjective.Builder |
| */ |
| ForwardingObjective.Builder createDownBuilder(PortNumber uplinkPort, |
| PortNumber subscriberPort, |
| MeterId downstreamMeterId, |
| UniTagInformation tagInformation); |
| } |