⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifindexlib.c

📁 VXWORKS源代码
💻 C
字号:
/* ifIndexLib.c - interface index library *//* Copyright 1984 - 2000 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01b,11jul01,jpf  Fixed a problem with the init routine resetting the index01a,29mar01,spm  file creation: copied from version 01b 0f tor2_0.open_stack                 branch (wpwr VOB) for unified code base*//*DESCRIPTIONThis library allocates unique interface indexes.  Indexes start from  1 and increase monotonically.  ifIndexLibInit() must be called before any other functions.ifIndexAlloc() and ifIndexTest() are reentrant,ifIndexLibInit() and ifIndexLibShutdown() are not.INCLUDE FILES: ifIndexLib.h.pG "Network"NOMANUAL*//* includes */#include "vxWorks.h"#include "semLib.h"#include "ifIndexLib.h"/* externs *//* globals *//* defines *//* typedefs *//* locals */LOCAL int ifIndexValue = 0;     /* 0 = uninitialized, -1 = overflowed, other = OK */LOCAL SEM_ID ifIndexSem;/* forward declarations *//***************************************************************************** ifIndexLibInit - initializes library variables** ifIndexLibInit() resets library internal state.  This function must be called* before any other functions in this library.** RETURNS: N/A*/void ifIndexLibInit (void)    {    if (ifIndexValue == 0)        {        /* library uninitialized */        ifIndexSem = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE);        ifIndexValue = 1;        }    }    /***************************************************************************** ifIndexLibShutdown - frees library variables** ifIndexLibShutdown() frees library internal structures.  * ifIndexLibInit() must be called before the library can be used again.** RETURNS: N/A*/void ifIndexLibShutdown (void)    {    if (ifIndexValue != 0)        {        /* library initialized */        semTake(ifIndexSem, WAIT_FOREVER);        ifIndexValue = 0;        semDelete(ifIndexSem);        }    /* else do nothing */    }/***************************************************************************** ifIndexAlloc - return a unique interface index** ifIndexAlloc() returns a unique integer to be used as an interface* index.  The first index returned is 1.  ERROR is returned if the library* has not been initialized by a call to ifIndexLibInit();** RETURNS: interface index or ERROR*/int ifIndexAlloc (void)    {    int ret;    if (ifIndexValue == 0)        {        /* library not initialized */        return ERROR;        }    semTake(ifIndexSem, WAIT_FOREVER);    if (ifIndexValue == -1)        {        /* overflow after 4 billion allocs */        semGive(ifIndexSem);        return ERROR;        }    ret = ifIndexValue++;    semGive(ifIndexSem);    return ret;    }/***************************************************************************** ifIndexTest - returns true if an index has been allocated.** ifIndexTest() returns TRUE if <index> has already been allocated by* ifIndexLibAlloc().  Otherwise returns FALSE.  If the library has not* been initialized returns FALSE.  This function does not check if the* index actually belongs to a currently valid interface.** RETURNS: TRUE or FALSE*/BOOL ifIndexTest    (    int ifIndex    /* the index to test */    )    {    if (ifIndex == -1 || ifIndex == 0)        {        /* these values are never valid */        return FALSE;        }    semTake(ifIndexSem, WAIT_FOREVER);    if ((unsigned int)ifIndex < (unsigned int)ifIndexValue)        {        semGive(ifIndexSem);        return TRUE;        }    semGive(ifIndexSem);    return FALSE;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -