/* * Copyright 2015-present 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.incubator.net.tunnel; import java.util.Collection; import com.google.common.annotations.Beta; import org.onosproject.core.ApplicationId; import org.onosproject.event.ListenerService; import org.onosproject.incubator.net.tunnel.Tunnel.Type; import org.onosproject.net.Annotations; import org.onosproject.net.DeviceId; import org.onosproject.net.ElementId; import org.onosproject.net.Path; /** * Service for interacting with the inventory of tunnels. */ @Beta public interface TunnelService extends ListenerService<TunnelEvent, TunnelListener> { /** * Borrows a specific tunnel. Annotations parameter is reserved.If there * is no tunnel in the store, returns a "null" object, and record the tunnel subscription. * Where tunnel is created, ONOS notifies this consumer actively. * * @param consumerId a tunnel consumer * @param tunnelId tunnel identify generated by onos * @param annotations Annotations * @return Tunnel subscribed tunnel */ Tunnel borrowTunnel(ApplicationId consumerId, TunnelId tunnelId, Annotations... annotations); /** * Borrows a specific tunnel by tunnelName. Annotations parameter is reserved.If there * is no tunnel in the store, return a "null" object, and record the tunnel subscription. * Where tunnel is created, ONOS notifies this consumer actively. * * @param consumerId a tunnel consumer * @param tunnelName tunnel name * @param annotations Annotations * @return collection of subscribed Tunnels */ Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelName tunnelName, Annotations... annotations); /** * Borrows all tunnels between source and destination. Annotations * parameter is reserved.If there is no any tunnel in the store, return a * empty collection,and record the tunnel subscription. Where tunnel is created, ONOS * notifies this consumer actively. Otherwise ONOS core returns all the * tunnels, consumer determined which one to use. * * @param consumerId a tunnel consumer * @param src a source point of tunnel. * @param dst a destination point of tunnel * @param annotations Annotations * @return collection of subscribed Tunnels */ Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst, Annotations... annotations); /** * Borrows all specified type tunnels between source and destination. * Annotations parameter is reserved.If there is no any tunnel in the store, * return a empty collection, and record the tunnel subscription. Where tunnel is * created, ONOS notifies this consumer actively. Otherwise,ONOS core returns * all available tunnels, consumer determined which one to use. * * @param consumerId a tunnel consumer * @param src a source point of tunnel. * @param dst a destination point of tunnel * @param type tunnel type * @param annotations Annotations * @return collection of available Tunnels */ Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst, Type type, Annotations... annotations); /** * Creates a tunnel with given path and default initial state. The state changes * in due course of time based on changes happening in the network. * * @param producerId a tunnel producer * @param srcElementId element id of the source * @param tunnel to be created * @param path path of the tunnel * @return generated tunnel identity */ TunnelId setupTunnel(ApplicationId producerId, ElementId srcElementId, Tunnel tunnel, Path path); /** * Triggers removal of specified tunnel. * * @param producerId a tunnel producer * @param tunnelId identity for the tunnel to be triggered for removal * @return success or failure */ boolean downTunnel(ApplicationId producerId, TunnelId tunnelId); /** * Returns back a specific tunnel to store. * * @param consumerId a tunnel consumer * @param tunnelId tunnel identify generated by ONOS * @param annotations Annotations * @return success or fail */ boolean returnTunnel(ApplicationId consumerId, TunnelId tunnelId, Annotations... annotations); /** * Returns all specific name tunnel back store. Annotations parameter is reserved.if there * is no tunnel in the store, return a "null" object, and record the tunnel subscription. * Where tunnel is created, ONOS notifies this consumer actively. * * @param consumerId a tunnel consumer * @param tunnelName tunnel name * @param annotations Annotations * @return boolean */ boolean returnTunnel(ApplicationId consumerId, TunnelName tunnelName, Annotations... annotations); /** * Returns all specific type tunnels between source and destination back * store. Annotations parameter is reserved. * * @param consumerId a tunnel consumer * @param src a source point of tunnel. * @param dst a destination point of tunnel * @param type tunnel type * @param annotations Annotations * @return success or fail */ boolean returnTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst, Type type, Annotations... annotations); /** * Returns all tunnels between source and destination back the store. * Annotations parameter is reserved. * * @param consumerId a tunnel consumer * @param src a source point of tunnel. * @param dst a destination point of tunnel. * @param annotations Annotations * @return success or fail */ boolean returnTunnel(ApplicationId consumerId, TunnelEndPoint src, TunnelEndPoint dst, Annotations... annotations); /** * Returns a tunnel by a specific tunnel identity. * * @param tunnelId tunnel identify generated by tunnel producer * @return Tunnel */ Tunnel queryTunnel(TunnelId tunnelId); /** * Returns all tunnel subscription record by consumer. * * @param consumerId consumer identity * @return Collection of TunnelSubscription */ Collection<TunnelSubscription> queryTunnelSubscription(ApplicationId consumerId); /** * Returns all specified type tunnels. * * @param type tunnel type * @return Collection of tunnels */ Collection<Tunnel> queryTunnel(Type type); /** * Returns all tunnels between source point and destination point. * * @param src a source point of tunnel. * @param dst a destination point of tunnel. * @return Collection of tunnels */ Collection<Tunnel> queryTunnel(TunnelEndPoint src, TunnelEndPoint dst); /** * Returns all tunnels. * * @return Collection of tunnels */ Collection<Tunnel> queryAllTunnels(); /** * Returns all tunnels. * * @return all tunnels */ int tunnelCount(); /** * Returns the collection of tunnels applied on the specified device. * * @param deviceId device identifier * @return collection of tunnels */ Iterable<Tunnel> getTunnels(DeviceId deviceId); }