/* * 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.pcep.controller; import org.onosproject.incubator.net.tunnel.DefaultLabelStack; import org.onosproject.incubator.net.tunnel.LabelStack; import org.onosproject.incubator.net.tunnel.Tunnel; import org.onosproject.net.Path; import org.onosproject.pcepio.protocol.PcepMessage; import org.onosproject.pcepio.types.PcepValueType; import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * Abstraction of an Pcep client controller. Serves as a one stop * shop for obtaining Pcep devices and (un)register listeners * on pcep events */ public interface PcepClientController { /** * Returns list of pcc clients connected to this Pcep controller. * * @return list of PcepClient elements */ Collection<PcepClient> getClients(); /** * Returns the actual pcc client for the given ip address. * * @param pccId the id of the pcc client to fetch * @return the interface to this pcc client */ PcepClient getClient(PccId pccId); /** * Register a listener for meta events that occur to pcep * devices. * * @param listener the listener to notify */ void addListener(PcepClientListener listener); /** * Unregister a listener. * * @param listener the listener to unregister */ void removeListener(PcepClientListener listener); /** * Register a listener for PCEP msg events. * * @param listener the listener to notify */ void addEventListener(PcepEventListener listener); /** * Unregister a listener. * * @param listener the listener to unregister */ void removeEventListener(PcepEventListener listener); /** * Register a listener for PCEP msg events[carrying node descriptor details]. * * @param listener the listener to notify */ void addNodeListener(PcepNodeListener listener); /** * Unregister a listener. * * @param listener the listener to be unregistered */ void removeNodeListener(PcepNodeListener listener); /** * Send a message to a particular pcc client. * * @param pccId the id of the client to send message. * @param msg the message to send */ void writeMessage(PccId pccId, PcepMessage msg); /** * Process a message and notify the appropriate listeners. * * @param pccId id of the client the message arrived on * @param msg the message to process. */ void processClientMessage(PccId pccId, PcepMessage msg); /** * Close all connected PCC clients. */ void closeConnectedClients(); /** * Create label stack from the given path. * * @param path from which label stack is to be computed * @return the label stack */ public LabelStack computeLabelStack(Path path); /** * Allocates and downloads local labels for the given LSP. * * @param tunnel for which local labels have to be assigned and downloaded * @return success or failure */ public boolean allocateLocalLabel(Tunnel tunnel); /** * Creates label stack for ERO object from network resource. * * @param labelStack label stack * @param path (hop list) * @return list of ERO sub-objects */ public LinkedList<PcepValueType> createPcepLabelStack(DefaultLabelStack labelStack, Path path); /** * Returns list of PCEP exceptions. * * @return PcepExceptions */ public Map<String, List<String>> getPcepExceptions(); /** * Returns all the pcep error messages received . * * @return PcepErrorMsg */ public Map<Integer, Integer> getPcepErrorMsg(); /** * Returns the pcep session details. * * @return PcepSession */ public Map<String, String> getPcepSessionMap(); /** * Returns the pcep sessionid information. * * @return PcepSessionId */ public Map<String, Byte> getPcepSessionIdMap(); /** * Creates detailed information about pcep error value and type per peer. * * @param peerId id of the peer which sent the error message * @param errorType the error type of the error message received * @param errValue the error value of the error message received */ void peerErrorMsg(String peerId, Integer errorType, Integer errValue); }