/** * @file IxAtmSch.h * * @date 23-NOV-2001 * * @brief Header file for the IXP400 ATM Traffic Shaper * * This component demonstrates an ATM Traffic Shaper implementation. It * will perform shaping on upto 12 ports and total of 44 VCs accross all ports, * 32 are intended for AAL0/5 and 12 for OAM (1 per port). * The supported traffic types are;1 rt-VBR VC where PCR = SCR. * (Effectively CBR) and Up-to 44 VBR VCs. * * This component models the ATM ports and VCs and is capable of producing * a schedule of ATM cells per port which can be supplied to IxAtmdAcc * for execution on the data path. * * @par * IXP400 SW Release version 2.0 * * -- Copyright Notice -- * * @par * Copyright 2001-2005, Intel Corporation. * All rights reserved. * * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @par * -- End of Copyright Notice -- * * @sa IxAtmm.h * */ /** * @defgroup IxAtmSch IXP400 ATM Transmit Scheduler (IxAtmSch) API * * @brief IXP400 ATM scheduler component Public API * * @{ */ #ifndef IXATMSCH_H #define IXATMSCH_H #include "IxOsalTypes.h" #include "IxAtmTypes.h" /* * #defines and macros used in this file. */ /* Return codes */ /** * @ingroup IxAtmSch * * @def IX_ATMSCH_RET_NOT_ADMITTED * @brief Indicates that CAC function has rejected VC registration due * to insufficient line capacity. */ #define IX_ATMSCH_RET_NOT_ADMITTED 2 /** * @ingroup IxAtmSch * * @def IX_ATMSCH_RET_QUEUE_FULL * @brief Indicates that the VC queue is full, no more demand can be * queued at this time. */ #define IX_ATMSCH_RET_QUEUE_FULL 3 /** * @ingroup IxAtmSch * * @def IX_ATMSCH_RET_QUEUE_EMPTY * @brief Indicates that all VC queues on this port are empty and * therefore there are no cells to be scheduled at this time. */ #define IX_ATMSCH_RET_QUEUE_EMPTY 4 /* * Function declarations */ /** * @ingroup IxAtmSch * * @fn ixAtmSchInit(void) * * @brief This function is used to initialize the ixAtmSch component. It * should be called before any other IxAtmSch API function. * * @param None * * @return * - IX_SUCCESS : indicates that * -# The ATM scheduler component has been successfully initialized. * -# The scheduler is ready to accept Port modelling requests. * - IX_FAIL : Some internal error has prevented the scheduler component * from initialising. */ PUBLIC IX_STATUS ixAtmSchInit(void); /** * @ingroup IxAtmSch * * @fn ixAtmSchPortModelInitialize( IxAtmLogicalPort port, unsigned int portRate, unsigned int minCellsToSchedule) * * @brief This function shall be called first to initialize an ATM port before * any other ixAtmSch API calls may be made for that port. * * @param port @ref IxAtmLogicalPort [in] - The specific port to initialize. Valid * values range from 0 to IX_UTOPIA_MAX_PORTS - 1, representing a * maximum of IX_UTOPIA_MAX_PORTS possible ports. * * @param portRate unsigned int [in] - Value indicating the upstream capacity * of the indicated port. The value should be supplied in * units of ATM (53 bytes) cells per second. * A port rate of 800Kbits/s is the equivalent * of 1886 cells per second * * @param minCellsToSchedule unsigned int [in] - This parameter specifies the minimum * number of cells which the scheduler will put in a schedule * table for this port. This value sets the worst case CDVT for VCs * on this port i.e. CDVT = 1*minCellsToSchedule/portRate. * @return * - IX_SUCCESS : indicates that * -# The ATM scheduler has been successfully initialized. * -# The requested port model has been established. * -# The scheduler is ready to accept VC modelling requests * on the ATM port. * - IX_FAIL : indicates the requested port could not be * initialized. */ PUBLIC IX_STATUS ixAtmSchPortModelInitialize( IxAtmLogicalPort port, unsigned int portRate, unsigned int minCellsToSchedule); /** * @ingroup IxAtmSch * * @fn ixAtmSchPortRateModify( IxAtmLogicalPort port, unsigned int portRate) * * @brief This function is called to modify the portRate on a * previously initialized port, typically in the event that * the line condition of the port changes. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port which is to be * modified. * * @param portRate unsigned int [in] - Value indicating the new upstream * capacity for this port in cells/second. * A port rate of 800Kbits/s is the equivalent * of 1886 cells per second * * @return * - IX_SUCCESS : The port rate has been successfully modified.
* - IX_FAIL : The port rate could not be modified, either * because the input data was invalid, or the new port rate is * insufficient to support established ATM VC contracts on this * port. * * @warning The IxAtmSch component will validate the supplied port * rate is sufficient to support all established VC * contracts on the port. If the new port rate is * insufficient to support all established contracts then * the request to modify the port rate will be rejected. * In this event, the user is expected to remove * established contracts using the ixAtmSchVcModelRemove * interface and then retry this interface. * * @sa ixAtmSchVcModelRemove() */ PUBLIC IX_STATUS ixAtmSchPortRateModify( IxAtmLogicalPort port, unsigned int portRate); /** * @ingroup IxAtmSch * * @fn ixAtmSchVcModelSetup( IxAtmLogicalPort port, IxAtmTrafficDescriptor *trafficDesc, IxAtmSchedulerVcId *vcId) * * @brief A client calls this interface to set up an upstream * (transmitting) virtual connection model (VC) on the * specified ATM port. This function also provides the * virtual * connection admission control (CAC) service to the * client. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the upstream * VC is to be established. * * @param *trafficDesc @ref IxAtmTrafficDescriptor [in] - Pointer to a structure * describing the requested traffic contract of the VC to be * established. This structure contains the typical ATM * traffic descriptor values (e.g. PCR, SCR, MBS, CDVT, etc.) * defined by the ATM standard. * * @param *vcId @ref IxAtmSchedulerVcId [out] - This value will be filled with the * port-unique identifier for this virtual connection. A * valid identification is a non-negative number. * * @return * - IX_SUCCESS : The VC has been successfully established on * this port. The client may begin to submit demand on this VC. * - IX_ATMSCH_RET_NOT_ADMITTED : The VC cannot be established * on this port because there is insufficient upstream capacity * available to support the requested traffic contract descriptor * - IX_FAIL :Input data are invalid. VC has not been * established. */ PUBLIC IX_STATUS ixAtmSchVcModelSetup( IxAtmLogicalPort port, IxAtmTrafficDescriptor *trafficDesc, IxAtmSchedulerVcId *vcId); /** * @ingroup IxAtmSch * * @fn ixAtmSchVcConnIdSet( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, IxAtmConnId vcUserConnId) * * @brief A client calls this interface to set the vcUserConnId for a VC on * the specified ATM port. This vcUserConnId will default to * IX_ATM_IDLE_CELLS_CONNID if this function is not called for a VC. * Hence if the client does not call this function for a VC then only idle * cells will be scheduled for this VC. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the upstream * VC is has been established. * * @param vcId @ref IxAtmSchedulerVcId [in] - This is the unique identifier for this virtual * connection. A valid identification is a non-negative number and is * all ports. * * @param vcUserConnId @ref IxAtmConnId [in] - The connId is used to refer to a VC in schedule * table entries. It is treated as the Id by which the scheduler client * knows the VC. It is used in any communicatations from the Scheduler * to the scheduler user e.g. schedule table entries. * * @return * - IX_SUCCESS : The id has successfully been set. * - IX_FAIL :Input data are invalid. connId id is not established. */ PUBLIC IX_STATUS ixAtmSchVcConnIdSet( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, IxAtmConnId vcUserConnId); /** * @ingroup IxAtmSch * * @fn ixAtmSchVcModelRemove( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId) * * @brief Interface called by the client to remove a previously * established VC on a particular port. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be * removed is established. * * @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be removed. This is the * value returned by the @ref ixAtmSchVcModelSetup call which * established the relevant VC. * * @return * - IX_SUCCESS : The VC has been successfully removed from * this port. It is no longer modelled on this port. * - IX_FAIL :Input data are invalid. The VC is still being modeled * by the traffic shaper. * * @sa ixAtmSchVcModelSetup() */ PUBLIC IX_STATUS ixAtmSchVcModelRemove( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId); /** * @ingroup IxAtmSch * * @fn ixAtmSchVcQueueUpdate( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, unsigned int numberOfCells) * * @brief The client calls this function to notify IxAtmSch that the * user of a VC has submitted cells for transmission. * * This information is stored, aggregated from a number of calls to * ixAtmSchVcQueueUpdate and eventually used in the call to * ixAtmSchTableUpdate. * * Normally IxAtmSch will update the VC queue by adding the number of * cells to the current queue length. However, if IxAtmSch * determines that the user has over-submitted for the VC and * exceeded its transmission quota the queue request can be rejected. * The user should resubmit the request later when the queue has been * depleted. * * This implementation of ixAtmSchVcQueueUpdate uses no operating * system or external facilities, either directly or indirectly. * This allows clients to call this function form within an interrupt handler. * * This interface is structurally compatible with the * IxAtmdAccSchQueueUpdate callback type definition required for * IXP400 ATM scheduler interoperability. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be * updated is established. * * @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be updated. This is the * value returned by the @ref ixAtmSchVcModelSetup call which * established the relevant VC. * * @param numberOfCells unsigned int [in] - Indicates how many ATM cells should * be added to the queue for this VC. * * @return * - IX_SUCCESS : The VC queue has been successfully updated. * - IX_ATMSCH_RET_QUEUE_FULL : The VC queue has reached a * preset limit. This indicates the client has over-submitted * and exceeded its transmission quota. The request is * rejected. The VC queue is not updated. The VC user is * advised to resubmit the request later. * - IX_FAIL : The input are invalid. No VC queue is updated. * * @warning IxAtmSch assumes that the calling software ensures that * calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and * ixAtmSchTableUpdate are both self and mutually exclusive * for the same port. * * @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */ PUBLIC IX_STATUS ixAtmSchVcQueueUpdate( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, unsigned int numberOfCells); /** * @ingroup IxAtmSch * * @fn ixAtmSchVcQueueClear( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId) * * @brief The client calls this function to remove all currently * queued cells from a registered VC. The pending cell count * for the specified VC is reset to zero. * * This interface is structurally compatible with the * IxAtmdAccSchQueueClear callback type definition required for * IXP400 ATM scheduler interoperability. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be * cleared is established. * * @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be cleared. This is the * value returned by the @ref ixAtmSchVcModelSetup call which * established the relevant VC. * * @return * - IX_SUCCESS : The VC queue has been successfully cleared. * - IX_FAIL : The input are invalid. No VC queue is modified. * * @warning IxAtmSch assumes that the calling software ensures that * calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and * ixAtmSchTableUpdate are both self and mutually exclusive * for the same port. * * @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */ PUBLIC IX_STATUS ixAtmSchVcQueueClear( IxAtmLogicalPort port, IxAtmSchedulerVcId vcId); /** * @ingroup IxAtmSch * * @fn ixAtmSchTableUpdate( IxAtmLogicalPort port, unsigned int maxCells, IxAtmScheduleTable **rettable) * * @brief The client calls this function to request an update of the * schedule table for a particular ATM port. * * This is called when the client decides it needs a new sequence of * cells to send (probably because the transmit queue is near to * empty for this ATM port). The scheduler will use its stored * information on the cells submitted for transmit (i.e. data * supplied via @ref ixAtmSchVcQueueUpdate function) with the traffic * descriptor information of all established VCs on the ATM port to * decide the sequence of cells to be sent and fill the schedule * table for a period of time into the future. * * IxAtmSch will guarantee a minimum of minCellsToSchedule if there * is at least one cell ready to send. If there are no cells then * IX_ATMSCH_RET_QUEUE_EMPTY is returned. * * This implementation of ixAtmSchTableUpdate uses no operating * system or external facilities, either directly or indirectly. * This allows clients to call this function form within an FIQ * interrupt handler. * * @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port for which requested * schedule table is to be generated. * * @param maxCells unsigned [in] - Specifies the maximum number of cells * that must be scheduled in the supplied table during any * call to the interface. * * @param **table @ref IxAtmScheduleTable [out] - A pointer to an area of * storage is returned which contains the generated * schedule table. The client should not modify the * contents of this table. * * @return * - IX_SUCCESS : The schedule table has been published. * Currently there is at least one VC queue that is nonempty. * - IX_ATMSCH_RET_QUEUE_EMPTY : Currently all VC queues on * this port are empty. The schedule table returned is set to * NULL. The client is not expected to invoke this function * again until more cells have been submitted on this port * through the @ref ixAtmSchVcQueueUpdate function. * - IX_FAIL : The input are invalid. No action is taken. * * @warning IxAtmSch assumes that the calling software ensures that * calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and * ixAtmSchTableUpdate are both self and mutually exclusive * for the same port. * * @warning Subsequent calls to this function for the same port will * overwrite the contents of previously supplied schedule * tables. The client must be completely finished with the * previously supplied schedule table before calling this * function again for the same port. * * @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */ PUBLIC IX_STATUS ixAtmSchTableUpdate( IxAtmLogicalPort port, unsigned int maxCells, IxAtmScheduleTable **rettable); /** * @ingroup IxAtmSch * * @fn ixAtmSchShow(void) * * @brief Utility function which will print statistics on the current * and accumulated state of VCs and traffic in the ATM * scheduler component. Output is sent to the default output * device. * * @param none * @return none */ PUBLIC void ixAtmSchShow(void); /** * @ingroup IxAtmSch * * @fn ixAtmSchStatsClear(void) * * @brief Utility function which will reset all counter statistics in * the ATM scheduler to zero. * * @param none * @return none */ PUBLIC void ixAtmSchStatsClear(void); #endif /* IXATMSCH_H */ /** @} */