blob: 519c9f7c711553a061e3e84f82ad875369d7eddb [file] [log] [blame]
/*
* 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.incubator.net.tunnel.Tunnel.State;
import org.onosproject.incubator.net.tunnel.Tunnel.Type;
import org.onosproject.net.Annotations;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.Store;
/**
* Manages inventory of tunnel; not intended for direct use.
*/
@Beta
public interface TunnelStore extends Store<TunnelEvent, TunnelStoreDelegate> {
/**
* Creates or updates a tunnel.
*
* @param tunnel tunnel
* @return tunnel identity
*/
TunnelId createOrUpdateTunnel(Tunnel tunnel);
/**
* Creates a tunnel or updates a tunnel with the new state given in input.
*
* @param tunnel tunnel
* @param state tunnel state
* @return tunnel identity
*/
TunnelId createOrUpdateTunnel(Tunnel tunnel, State state);
/**
* Deletes a tunnel by a specific tunnel identifier.
*
* @param tunnelId tunnel unique identifier generated by ONOS
*/
void deleteTunnel(TunnelId tunnelId);
/**
* Deletes all tunnels between source point and destination point.
*
* @param src a source point of tunnel.
* @param dst a destination point of tunnel.
* @param producerName producerName
*/
void deleteTunnel(TunnelEndPoint src, TunnelEndPoint dst,
ProviderId producerName);
/**
* Deletes all specific type tunnels between source point and destination
* point.
*
* @param src a source point of tunnel.
* @param dst a destination point of tunnel.
* @param type tunnel type
* @param producerName producerName
*/
void deleteTunnel(TunnelEndPoint src, TunnelEndPoint dst,
Tunnel.Type type, ProviderId producerName);
/**
* Returns a specific tunnel. 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 tunnelId tunnel identify generated by onos
* @param annotations parameter
* @return Tunnel subscribed tunnel
*/
Tunnel borrowTunnel(ApplicationId consumerId, TunnelId tunnelId,
Annotations... annotations);
/**
* Returns 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 parameter
* @return collection of subscribed Tunnels
*/
Collection<Tunnel> borrowTunnel(ApplicationId consumerId,
TunnelName tunnelName,
Annotations... annotations);
/**
* Returns 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 parameter
* @return collection of subscribed Tunnels
*/
Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src,
TunnelEndPoint dst, Annotations... annotations);
/**
* Returns 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);
/**
* 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();
}